less
представляет собойприложение termcap , использующее интерфейс termcap для получения всей информации, которую оно «знает» о данном терминале. Если его разработчик не введетжестко -закодированноеповедение (, как это сделано в очень немногих программах, которые я не буду упоминать ),less
не будет поддерживать для этих комбинаций клавиш, поскольку они не являются стандартными функциями (, см., например, столбец termcap возможностей, перечисленных в ncurses' terminfo (5 )), и не имеют 2-присвоенных им имен персонажей (см. терминальную базу данных для сводки расширений ).
Между прочим, ссылаясь на мой ответ и бегло взглянув на исходный -код , я не вижу ничего, что соответствовало бы левому/правомусловодвижение (, если только это не является предполагаемым значением сдвига влево/вправоA_LSHIFT
иA_RSHIFT
). git fault говорит, что они, а также комментарий на странице руководства о слове относятся к 2007 году (версии 394 ). Эти выглядят более многообещающе (из 2016 года):
SK(SK_CTL_RIGHT_ARROW),0, A_RRSHIFT,
SK(SK_CTL_LEFT_ARROW),0, A_LLSHIFT
, но в комментарии к регистрации написано только
commit e5c195113d1666ac506ea3f65545d436d96fe099
Author: Mark Nudelman
Date: Sat Oct 22 15:25:44 2016 +0000
New commands ESC-{ and ESC-} to shift to start/end of displayed lines.
Читая код (в command.c)для сдвига, я не увидел ничего, что не согласуется с выводом о том, чтоless
листает по столбцам(одиночным символам )а не слов , но комментарий ОП указал на эти:
ESC,SK(SK_LEFT_ARROW),0, EC_W_LEFT, /* ESC LEFTARROW */
SK(SK_CTL_LEFT_ARROW),0, EC_W_LEFT, /* CTRL-LEFTARROW */
ESC,'w',0, EC_W_RIGHT, /* ESC w */
ESC,SK(SK_RIGHT_ARROW),0, EC_W_RIGHT, /* ESC RIGHTARROW */
SK(SK_CTL_RIGHT_ARROW),0, EC_W_RIGHT, /* CTRL-RIGHTARROW */
, которые используютпробелв качестве разделителя для "слов". Возможно, когда разработчик вносил эти изменения, он имел в виду подражание vi, который может делать и то и другое (, хотя слова vi разделены по-другому ).
Предлагаемые*выходлевая -стрелкаи т. д. приведены с помощью этих строк из таблицы:
ESC,SK(SK_LEFT_ARROW),0, EC_W_LEFT, /* ESC LEFTARROW */
ESC,SK(SK_RIGHT_ARROW),0, EC_W_RIGHT, /* ESC RIGHTARROW */
Однако — текущая программа не содержит назначений , использующих эти символы SK_CTL_RIGHT_ARROW
или SK_CTL_LEFT_ARROW
. Это должно быть сделано в lesskey , например, в этом операторе case(или рядом, во всяком случае):
switch (*++p)
{
case 'u': ch = SK_UP_ARROW; break;
case 'd': ch = SK_DOWN_ARROW; break;
case 'r': ch = SK_RIGHT_ARROW; break;
case 'l': ch = SK_LEFT_ARROW; break;
case 'U': ch = SK_PAGE_UP; break;
case 'D': ch = SK_PAGE_DOWN; break;
case 'h': ch = SK_HOME; break;
case 'e': ch = SK_END; break;
case 'x': ch = SK_DELETE; break;
default:
error("illegal char after \\k", NULL_PARG);
*pp = p+1;
return ("");
}
Без присвоений в коде они только жестко -закодированы, не настраиваются.
Конфигурации MSDOS / OS/2 отличаются от конфигурации Unix наличием (жестко -закодированной )таблицы кодов клавиш:
#if MSDOS_COMPILER || OS2
static char k_right[] = { '\340', PCK_RIGHT, 0 };
static char k_left[] = { '\340', PCK_LEFT, 0 };
static char k_ctl_right[] = { '\340', PCK_CTL_RIGHT, 0 };
static char k_ctl_left[] = { '\340', PCK_CTL_LEFT, 0 };
и позволяет использовать их в операторе case:
#if MSDOS_COMPILER || OS2
case SK_INSERT:
s = k_insert;
break;
case SK_CTL_LEFT_ARROW:
s = k_ctl_left;
break;
case SK_CTL_RIGHT_ARROW:
s = k_ctl_right;
break;
(примечание :по-прежнему нет назначений, поэтому регистры не используются ), а в конфигурации termcap эти символы вообще не используются.(termcap является «расширяемым», и если вы потрудитесь изобрести двухсимвольную мнемонику -для собственного использования и меньше модифицировать для реализации этих случаев, она будет делать то, что вы хотите ).
Повторное посещение страницы руководства lesskey , там написано следующее:
An action may be followed by an "extra" string. When such a command is entered while running less, the action is performed, and then the extra string is parsed, just as if it were typed in to less. This feature can be used in certain cases to extend the functionality of a command. For example, see the "{" and ":t" commands in the example below. The extra string has a special meaning for the "quit" action: when less quits, first character of the extra string is used as its exit status.
Это означает, что вы могли бы сделать что-то подобное:
\e[1;5D noaction \e\e[D
\e[1;5C noaction \e\e[C
для преобразования в дополнительную строку , которая использует предопределенное слово -shift.
Вам просто нужно переключить аргументы (, которые представляют источник и пункт назначения ), например
rsync -av./newfolder root@aaa.aaa.aaa.aaa:/home/my_folder
Взгляните на man rsync
, в котором объясняется, что завершающая косая черта после newfolder
будет передавать только содержимое указанного каталога -. В этом случае вы можете изменить место загрузки на .../my_folder/newfolder
.