Если вы видите control Q (0x11) и control S (0x13), это XON / XOFF: артефакты управления потоком. Вы должны видеть их только в том случае, если ваше соединение говорит, что полагается на программное управление потоком; драйвер терминала может отправлять их на устройство (точно так же, как пользователь может нажимать эти клавиши для управления другим направлением).
Дополнительная литература:
Комментарий о «макете» для Lynx неясен:
Отсутствие некоторых подробностей о том, почему Lynx может использовать 0x11 в качестве непечатаемого символа, звучит так, как будто драйвер терминала отправляет XON / XOFF с довольно маленьким буфером.
В ответ на комментарии ( какой терминал использует TERM = ansi
? На снимке экрана показан xterm ), lynx
может писать (с использованием curses) стрелка влево, например, символ ACS_LARROW
. В исходном коде это выглядит так:
/* * Draw the left scrolling-indicator now, to avoid the complication of * overwriting part of a multicolumn character which may lie in the first * position. */ if (IsPanned && lft_cells) { CTRACE_EDIT((tfp, "Draw left scroll-indicator\n")); TmpStyleOn(prompting ? s_prompt_edit_arr : s_aedit_arr); LYmove(StartY, StartX); LYaddch(ACS_LARROW); TmpStyleOff(prompting ? s_prompt_edit_arr : s_aedit_arr); lft_shift = 1; }
Теперь ... lynx
сам знает только об этом определении в
:
#define ACS_LARROW NCURSES_ACS(',') /* arrow pointing left */
, в то время как описание терминала для "ansi" дает фактическое отображение в klone + acs
:
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
К счастью (для удобства чтения), отображение, которое вас интересует, является второй записью сопоставление запятой (экранированной) с восьмеричным числом 021:
\,\021
и это ваш DC1 (восьмеричный 021 - это шестнадцатеричный код 0x11). Но это отображение не используется в xterm . Символы рисования линий для xterm
(если не используется UTF-8, где ncurses игнорирует описание терминала) не включают стрелку влево. Это отображение определено в xterm-basic
, в котором, как вы видите, нет запятой (запятая в конце является разделителем):
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
В руководстве по xterm предлагаются полезные значения для TERM
, и термин "ansi" (хотя и находится в списке) не первый. Это было некоторое время (до ncurses):
Terminal database (terminfo (5) or termcap (5)) entries that work with
xterm include
an optional platform-specific entry ("xterm-new"),
"xterm",
"vt102",
"vt100",
"ansi" and
"dumb"
Например, я вижу это в X11R5 (1993). Но он был представлен ранее , появившись в X10R4 (1986). Я подозреваю, что значение «ansi» для эмуляторов терминала немного изменилось за 30 лет (это соответствует ANSI.SYS
, который отличается от xterm и т. Д.).Используйте «xterm»
(или «xterm-new»
), и вы получите лучшие результаты.
Предполагая, что табуляция стирается после stuff
в обоих этих случаях
% ls
bar foo.txt
% whence stuff
% alias stuff=less
% zstyle ':completion:*:*:stuff:*' file-patterns '*.txt:all-files'
% stuff
bar foo.txt
соответствующий регулятор из zshoptions(1)
—
COMPLETE_ALIASES
Prevents aliases on the command line from being internally sub-
stituted before completion is attempted. The effect is to make
the alias a distinct command for completion purposes.
так
% setopt COMPLETE_ALIASES
% stuff foo.txt
иначе псевдоним уже что-то другое.
Чтобы проверить наличие побочных эффектов, мы должны подтвердить, что это изменение не нарушает завершение псевдонимов, для которых нет завершения или настройки стиля,
% setopt COMPLETE_ALIASES
% whence foo
% unfunction _foo
unfunction: no such hash table element: _foo
% alias foo=ls
% foo (eval):1: command not found: _foo
поэтому с установленным COMPLETE_ALIASES
вам может потребоваться настроить завершение для каждого псевдонима или перечислить или иным образом включить имя псевдонима (s )в соответствующем compdef
, например.
% compdef _ls foo
% foo
...
С другой стороны, я нахожу оболочки exec
довольно элегантными, поскольку они, в отличие от псевдонимов оболочки, могут вызываться с помощью exec(3)
или system(3)
без необходимости загружать довольно большую оболочку или загрязнять то, что должно быть простой системный вызов с интерактивной настройкой оболочки.