Вы можете скопировать верхнюю строку, отображаемую в less
выделенную панель X11, набрав less
:
|.head -n1|xclip -sel c<Enter><Enter>
Это направляет меньший буфер от верхней строки к .
метке (таким образом, фактически весь контент экрана) к head -n1|xclip -sel c
команде (чтобы сохранить первую строку этого в выборе CLIPBOARD)
Вы можете настроить свой эмулятор терминала так, чтобы он вставлял эту строку при нажатии клавиши или связывал ее с клавишей или комбинацией less
клавиш в привязках клавиш. Например, чтобы связать это с Alt+C:
printf '%s\n' '#commands' '\ec pipe .head -n1|xclip -sel c\n' | lesskey -
Однако обратите внимание, что Enterпосле этого вы нажмете , чтобы подтвердить приглашение «| done (нажмите RETURN)».
С помощью xterm
, вы также можете определить новый режим выделения, например, здесь, удерживая Ctrl+Altпри расширении выделения, которое сообщает, less
какие строки копировать с его текущего экрана:
Напишите lesspaste
скрипт как:
#! /bin/sh -
start=${1%%";"*}
end=${1#*" "}
end=${end%";"*}
head -n "$((end))" | tail -n "$((end - start + 1))" | xclip -sel c
И определите таблицы перевода xterm (здесь, в командной строке для тестирования, но вы захотите добавить это в файл ресурсов X):
xterm -xrm 'XTerm.VT100.translations: #override \
Meta Ctrl<Btn1Down>: select-start()\n\
Meta Ctrl<Btn1Motion>: select-extend()\n\
Meta Ctrl<Btn1Up>: select-end(SECONDARY) \
insert-formatted("|.lesspaste '\''%P %p'\''\n\n", SECONDARY)'
Затем вы пометите строки для вставки, перетаскивая мышь с Ctrl+Altудержанным, и после отпускания кнопки 1, xterm скажет меньше, чтобы передать текущий экран нашему lesspaste
скрипту с начальными и конечными координатами, переданными в качестве одного аргумента ( y1;x1 y2;x2
).
(обратите внимание, что он может не работать должным образом, если less
вызывается с помощью -s
сжатия пустых строк (как это обычно происходит при вызове man
), поскольку вход, на который подается подача lesspaste
, не будет сжимать пустые строки (поэтому смещения номеров строк могут быть неправильными)) ,