Ctrl-Enter, Shift-Enter и Enter интерпретируются как одна и та же клавиша.

Как вы заметили, условности нет. Это полностью зависит от того, что делает приложение и от роли аргумента хоста в командной строке, а также от того, как это делают приложения, связанные с вашим скриптом. Следовательно, ответ на этот вопрос, скорее всего, будет основан на мнении -.

Для «длинных опционов» --host=hostnameможет быть хорошим выбором, но это личное мнение, и аналогично -hв качестве короткого опциона. Именно так это делают MySQL/MariaDB и клиенты командной строки PostgreSQL.

Как отмечает Дероберт в комментариях к вашему вопросу,-hдля имени хоста может конфликтовать с использованием -hдля получения справки, но иногда для этого используются -?, --helpили запуск приложения с без аргументов.

Также может быть полезно указать, для чего используется имя хоста, связанное с определенной опцией, например, --target=hostnameи --jumphost=hostnameи т. д. Если вы хотите указать, что хост должен быть IP-адресом (, а не имя хоста ), можно было бы использовать --addr=ipaddrили что-то подобное. Некоторые инструменты используют -Tи -Uдля указания того, какой адрес привязки использовать с сокетами TCP и UDP соответственно (, особенно syslogdв OpenBSD ). Опять же, это сводится к тому, что на самом деле делает ваш скрипт.

Если ваш сценарий оболочки использует несколько параметров для изменения своего поведения, в то время как всегда работает с именем хоста, не используйте параметр для указания имени хоста, как это делает ssh.

Наконец, посмотрите, как похожие утилиты управляют своими флагами командной строки, и используйте что-то согласованное. Это особенно важно, если вы создаете набор из нескольких сценариев для выполнения связанных задач. То есть, не используйте --host=hostnameв одном, пока у вас есть -i addrв другом.

1
20.08.2019, 16:03
2 ответа

Нет необходимости устанавливать ibus и т. д. Все приложения X11 имеют доступ к точным кодам клавиш и к своим переводам xkb/xim и могут игнорировать последний.

Проблема в эмуляторе терминала, а также в том, что нет стандартного способа представления комбинаций клавиш типа Ctrl -Enter в терминале. Кроме того, каждый эмулятор терминала имеет (или не имеет )собственный способ настройки привязок клавиш -.

В xterm, как и в любом приложении на основе xt -, вы можете легко настроить его с помощью ресурсов X11. Например, это переведет Ctrl -Enter в escape-последовательность, соответствующую функциональной клавише F33(в соответствии с infocmp):

.
xterm -xrm '*VT100*translations: #override Ctrl<Key>Return:string("\033[20;5~")'

Затем вы можете привязать это \e[20;5~к любому действию, которое вы хотите, в readline ~/.inputrc, с bindв bash, с bindkeyв zshи т. д.

Ресурсы X11 хранятся как свойство RESOURCE_MANAGERкорневого окна и могут быть загружены туда утилитой xrdb; обычно xrdbвызывается из сценария инициализации сеанса x11 для загрузки содержимого файла ~/.Xresources.

Приложения KDE или Gnome, такие как konsoleи gnome-terminal, имеют собственный способ настройки комбинаций клавиш для действий; Я не знаю, включает ли это возможность записывать произвольные строки в псевдо--мастер tty.

2
27.01.2020, 23:30

Вот как это настроить вkonsole:

Также см. Справочник Kde по привязкам клавиш в Konsole .

Настройки -> Редактировать текущий профиль -> Клавиатура -> (выберите используемую раскладку клавиатуры)-> Редактировать -> Поиск/фильтр для Return.

Редактировать следующие записи (только левый столбец):

  • Изменить Return-Shift-NewLineнаReturn-Shift-Ctrl-NewLine
  • Изменить Return-Shift+NewLineнаReturn-Shift-Ctrl+NewLine

Это позволяет различать Enterи Ctrl+ Enter.

Добавьте следующую запись:

Return+Ctrl->\E[20;5~

Теперь просто добавьте bindkey '\e[20;5~' autosuggest-executeили любой другой приемник в ~/.zshrc.

1
27.01.2020, 23:30

Теги

Похожие вопросы