Linenoise: Сделайте Ctrl влево и вправо

Созданный на 24 нояб. 2016  ·  8Комментарии  ·  Источник: antirez/linenoise

Эти сочетания клавиш очень полезны при быстрой навигации по уже существующей строке. Есть ли причина, по которой они не выполняются?

Все 8 Комментарий

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:

линейныйшумSetMultiLine(1);

Я надеюсь, что это поможет и с Днем Благодарения! (не важно где ты :-)

Это относится к той же идее, что и № 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:

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

denisvm picture denisvm  ·  9Комментарии

krux02 picture krux02  ·  8Комментарии

fatcerberus picture fatcerberus  ·  5Комментарии

ghost picture ghost  ·  4Комментарии

ozancaglayan picture ozancaglayan  ·  21Комментарии