Re: Можно ли как то обезопасить работу при вставке текста в терминальный эмулятор (xterm) или специальной поддержкой от SHELL (bash)?
On 2015-12-20, Oleksandr Gavenko wrote:
> Я предпочитаю вместо набора вручную вставлять готовый текст по клику средней
> кнопкой мыши или Shift+Ins в xterm или емаксовский M-x term.
>
> При переносе текста из Firefox/Evince/etc иногда вкрадывается мусор. Иногда
> путаюсь что в primary и что в clipboard.
>
> Я проверяю что вставилось, но если в последовательности есть \n, то мусор
> отправляется в bash и остается надеятся что беды не случится.
>
> Можно все скопированое пропускать черер редактор на выверку, но это хлопотно.
>
> В Bash даже есть возможность отредактировать команду во внешнем редакторе по
> ~/.inputrc:
>
> $if Bash
> "\C-x\C-e": edit-and-execute-command
> $endif
>
> Можно ли как то запретить вставку текста с переносом строки в Xterm? Или
> ограничить текст до первого переноса?
>
Тут говорится что может быть особый клиент, промежуточное звено между
приложением, предоставляющим выдеелние и копирующим приложением:
http://tronche.com/gui/x/icccm/sec-2.html#s-2.6.1
Полистал "man 1 xclipboard", там упоминается возможность интерграции с xterm.
Перелистал "man 1 xterm", комбинациям клавиш можно назначать предопределенные
действия. Например:
*VT100*translations: #override Meta <KeyPress> Insert:insert-formatted("Hello!", SELECT)
по Alt+Ins будет вставлять фиксированую строку.
Есть команда exec-formatted(), она выполняет внешнюю команду.
Есть команда insert-selection(PRIMARY). Она вставляет из выбраного буфера
содержимое в xterm.
Через pipe можно обработать выделенное.
Команды можно прописать поряд. Итого в ~/.Xdefaults:
*VT100*translations: #override Meta <KeyPress> Insert: exec-formatted("sh -c 'echo xxx | xsel -p; xmessage ok'", SELECT) insert-selection(PRIMARY)
После:
$ xrdb -merge .Xdefaults
как бы результат есть (xmessage появляется, содержимое PRIMARY вставляется).
Но содержимое PRIMARY не изменяется, а ожижаю там появление строки "xxx".
Если бы зарабтало, то вставил бы скрипт:
sh -c 'xset -o -b | read line; xset -c -b; printf \"$line\" | xset -i -b'
Но есть сомнения - exec-formatted выполняет команду асинхронно.
Нужна команда, вставляющая результат выполнения команды, такого не
обнаружил...
--
Best regards!
Reply to: