В современных веб-браузерах и других программах с текстовым содержимым Spaceпрокручивается более или менее на экране. ShiftSpaceпрокручивается во всем, кроме less
.
Как можно использовать ShiftSpaceдля прокрутки вверх less
? Или, в качестве альтернативы, есть другой пейджер (совместимость с POSIX - мое единственное требование), который мог бы выполнить эту работу?
Мне сказали, что некоторые терминальные эмуляторы и некоторые терминальные библиотеки пользовательского интерфейса (ncurses?) Не распознают ShiftSpace. Это действительная проблема?
less
отличить Пространство от Пространства Сдвига.b
или^B
(0x2) после<shift-Space>
. Обратите внимание, чтоb
во многих конфигурациях клавиатуры он находится над пробелом/
повсеместно принять в качестве «поискового текста» различные общепринятые инструменты, но в то же время я опасаюсь навязывать чрезмерные мегоманиакальные стандарты, которые в любом случае еще проще сделать что-то, что можно сделать одним (универсально узнаваемым) нажатием клавиши. Интересно узнать, что в данном случае это техническое ограничение (см. Ответ 200_success), а не обманчивый дизайн, который объясняет.translations
Ресурс для виджета VT100.Ответы:
Я думаю, что вы вызвали культурный конфликт, вызванный техническими ограничениями. Поскольку Shift+ Spaceгенерирует тот же вывод Space, что и терминальная модель Unix, обрабатывает их одинаково. Чтобы различать их, вам нужна среда программирования, которая поддерживает события нажатия клавиш вверх / вниз. Это возможно в X11 и в эмуляторах терминала, которые поддерживают переназначение ключей. Пример переназначения Shift+ Spaceв PageUp:
источник
xterm -xrm 'XTerm.VT100.translations: #override Shift <KeyPress> space: string(0x2)'
например, в xterm, или вы отправляете ту же последовательность, что и при отправке<PageUp>
). Конечно, это сделает ввод текста, удерживая клавишу Shift, неудобным.В эмуляторах терминала эта функция прервала бы ввод текста в верхнем регистре со встроенными пробелами, удерживая клавишу Shift. Например, если вы хотите ввести «Это заголовок», вам нужно отпустить Shift между «A» и «T». Удерживание нажатой приведет к удалению курсора и неправильному расположению остальной части введенного вами текста. Я считаю, что это будет гораздо более раздражающим, чем то, что вы получаете с помощью функции прокрутки вверх.
При обычном поведении при наборе текста и прокрутке вверх всякий раз, когда прокручивается Space, потребуется редизайн и интенсивное сотрудничество со стороны приложений (например, приложение, способное переключать то, что отправляет Shift + Space), я почти уверен, что этого не произойдет.
Ключевое отличие состоит в том, что приложение с графическим интерфейсом знает «контекст», редактируете ли вы или просматриваете контент, эмуляторы терминала не могут этого знать.
источник
Эмуляторы терминала отправляют один и тот же символ при Spaceи Shift+Space. Если бы они этого не сделали, то было бы неудобно печатать текст, удерживая Shiftклавишу (см . Ответ @ egmont, который расширяет этот аргумент).
Однако вы можете обойти эту проблему, сопоставив Shift+Spaceпоследовательность символов, которая в конечном итоге будет вставлять пробел по умолчанию, и для которой вы можете настроить приложения, например
less
прокрутку вверх при таком нажатии клавиши.Например, такая последовательность может быть
`
DEL
SPC
(изменить ,DEL
чтобыBS
в системах , где БС являетсяerase
символом).Для
xterm
добавления ресурса:И настроить
less
с помощью:источник
less
в настоящее время не поддерживает это, но это определенно может быть добавлено .Если программа использует управляющую последовательность xterm для установки значения
modifyOtherKeys
2 путем записи\e[>4;2m
в терминал, тоxterm
аннотируются ключи с дополнительной информацией о том, какие клавиши-модификаторы активны. Специально для Spaceключа, сmodifyOtherKeys
активным в xterm, Shift+ Spaceпревращается в\e[27;2;32~
.less
пришлось бы правильно интерпретировать это как Shift+, Spaceа затем вызвать прокрутку вверх.Хотя это определенно будет работать в xterm, оно не будет работать во всех терминальных приложениях. Но те терминалы, которые не распознают эту escape-последовательность для включения,
modifyOtherKeys
будут просто игнорировать эту escape-последовательность и продолжать посылать программам обычный пробел, когда вы нажимаете Shift+ Space.На веб-сайте xterm есть довольно подробная страница, объясняющая, как
modifyOtherKeys
рассчитываются коды: https://invisible-island.net/xterm/modified-keys.htmlисточник