Эти сочетания клавиш очень полезны при быстрой навигации по уже существующей строке. Есть ли причина, по которой они не выполняются?
A: Это не типичная команда перемещения в POSIX/UNIX. Linenoise на 100% соответствует POSIX.
Однако было бы легко добавить это к вашей собственной копии линейного шума. Многие люди, использующие линейный шум, взламывают его по той или иной причине. Это очень легко понять и мод.
Вот диаграмма, которая сравнивает использование ключа управления в Win/Unix/Emacs: https://en.wikipedia.org/wiki/Control_key
Что делать?
в строке № 41 в файле linenoise.c вы найдете обсуждение того, как управляется курсор.
В строке № 768 вы найдете
static int linenoiseEdit (int stdin_fd, int stdout_fd, char *buf, size_t buflen, const char *prompt)
Если бы вам нужно было изменить функциональность редактирования, она была бы здесь, в этой функции.
Также помните, что многострочное редактирование должно быть включено вызовом API:
Я надеюсь, что это поможет и с Днем Благодарения! (не важно где ты :-)
Это относится к той же идее, что и № 64 и № 92, или к чему-то другому?
Я не думаю, что линейный шум ограничивается функциями редактирования строк, определенными в POSIX (и я даже не смог найти источник определенных escape-последовательностей, которые определяет POSIX, хотя я нашел много информации о vi/emacs/readline back-word и последовательности слов вперед). Возможно, вы подумали о том, что линейный шум зависит от среды POSIX, но это означает только то, что он должен держаться подальше от вызовов, специфичных для ОС.
Возможно, я был неясен - я знаю, что control+left не соответствует управляющему символу (так, как ctrl+a соответствует \01 и т. д.). Однако многие эмуляторы терминала создают для этого другую escape-последовательность (например, \033[1;5D
или \033f
), которую некоторые библиотеки редактирования строк связывают по умолчанию для перехода вперед/назад по слову. По крайней мере, я предполагаю, что это то, что предлагает эта проблема.
Если вы нашли что-то, в котором перечислены escape-последовательности редактирования строк, определяемые (не) POSIX, или что-то, что утверждает, что линейный шум не будет реализовывать какие-либо, которые не являются частью стандарта POSIX, пожалуйста, дайте мне знать, как Я не смог найти его.
Изменить: если вы имеете в виду таблицу, на которую вы ссылались выше, хотя это не относится к POSIX, я думаю, что понимаю вашу точку зрения. Я не спорю конкретно в пользу Ctrl+Left/Right, но я не думаю, что какая -то последовательность - плохая идея. Кроме того, это не полный список комбинаций клавиш или привязок readline — я полагаю, что readline по умолчанию связывает esc-b/f (и, возможно, другие, более длинные escape-последовательности) с back/forward-word, которые там не перечислены.
Я думаю, что функция, которую хочет JelteF, включает в себя расширение дескрипторов линейного шума входных escape-последовательностей ( здесь , например, последовательности, сгенерированные нажатием клавиш со стрелками или удаления), и вы имеете в виду выходные escape-последовательности (например, последовательности, отправленные на вывод для фактического перемещения курсора) . Я согласен с тем, что работа с termcap выходит за рамки линейного шума, и я ценю тот факт, что линейный шум реализован с помощью небольшого количества команд.
Возможно , @JelteF мог бы уточнить, что именно запрашивает этот запрос функции. Я думал, что речь идет об обработке двух дополнительных последовательностей в linenoiseEdit(), но могу ошибаться.
К вашему сведению, если речь идет о перемещении на одно слово влево/вправо при нажатии ctrl-left
или ctrl-right
(с соответствующими длинными управляющими последовательностями \033[5;D
и C
соответственно, У меня есть патч для этого в привязках OCaml: https://github.com/fxfactorial/ocaml-linenoise/commit/c3d130cd62419ed3e77203bea392b12830c3e593
@c-cube прав, это то, что я имел в виду. Извините, что не ответил раньше.
ха-ха, прошло всего полтора года, это ничто по интернет-времени. И прямо там же, в linenoiseEdit(). Спасибо @c-cube :+1: