[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: