Есть горячая клавиша, чтобы выбрать весь текст ввода в строке ввода в Terminal.app OS X?
1 ответ
Вы можете попробовать edit-and-execute-command() (manual) через подходящий $EDITOR или $VISUAL:
$ touch foo.sh
$ open foo.sh
Установите для содержимого foo.sh следующее и сохраните:
#!/usr/bin/env bash
# copy current command input to clipboard -- requires local session
cat $1 | pbcopy
# clear the prompt, so no command gets executed when closing this script
# comment out the following line to execute the command you entered instead
echo -n "" > $1
exit 0
Затем сделайте исполняемый файл и установите для Visual:
$ chmod +x foo.sh
$ export VISUAL=/Users/danielbeck/foo.sh
В приглашении bash (или любом другом представлении с поддержкой readline я думаю) вы можете скопировать текущий ввод команды, нажав Ctrl-X Ctrl-E чтобы вызвать edit-and-execute-command() .
Отредактируйте файл ~/.inputrc чтобы изменить горячую клавишу для этого. Отредактируйте ваш .bash_profile чтобы он оставался вашим $EDITOR/$VISUAL - недостаток очевиден, у вас никогда не будет правильного $EDITOR , к сожалению,
В качестве альтернативы, вы можете попробовать воспроизвести то, что делает этот пользователь, но он использует zsh , а не bash .
Терминал сам не знает, какая часть текущей строки является вашей подсказкой, а какая - вашей. Таким образом, доступ к его строкам, например, через AppleScript, не будет работать вообще.
Однако вы можете прочитать полный вывод текущей вкладки и получить ее последнюю строку и, используя фильтрацию, попытаться удалить ее подсказку.
Моя подсказка заканчивается на $ , поэтому работает следующая команда:
tell application "Terminal" tell selected tab of window 1 to do shell script "echo '" & history & "' | sed '/^$/d' | tail -n1 | cut -d$ -f2-"
Он получит свойство history текущей вкладки текущего окна и отфильтрует его через sed чтобы удалить все пустые строки, затем получит последнюю строку, используя tail , и затем удалит все, вплоть до первого $ строки (включая мое приглашение), используя cut
Выход этой программы - ваша текущая командная строка. Действительно бессмысленное упражнение:
~ $ osascript Library/Scripts/get_line.scpt
osascript Library/Scripts/get_line.scpt
Чтобы в конце скопировать его в буфер обмена, измените его на следующее:
tell application "Terminal" to tell selected tab of window 1 to do shell script "echo '" & history & "' | sed '/^$/d' | tail -n1 | cut -d$ -f2- | pbcopy"
Вы можете использовать Automator для создания службы, которая не получает входные данные в терминале приложения и выполняет одно действие « Выполнить сценарий AppleScript», состоящее из приведенного выше кода. Сохраните и при необходимости назначьте сочетание клавиш в Системных настройках »Клавиатура» Сочетания клавиш »Службы.
