странные символы при вставке в терминал рейнджер: [200 ~ и [201 ~ - PullRequest
0 голосов
/ 18 марта 2020

Когда я вставляю что-то в рейнджер с помощью Ctrl + Shift + V , я получаю странные символы. Здесь я вставил слово «вставить» в рейнджер:

enter image description here

И в начале у меня есть [200~ и в конце [201~. Я понятия не имею, в чем может быть проблема (ranger? Fi sh shell? Терминал? Некоторые файлы конфигурации?). Как избавиться от нежелательных символов при вставке?

Дополнительная информация: я использую оболочку fi sh. Проблема сохраняется только тогда, когда я запускаю рейнджер с сочетанием клавиш Ctrl + O . Он отлично работает, когда я запускаю рейнджер, вручную вводя команды ranger или ranger_cd или просто вставляя текст прямо в оболочку fi sh (без запуска рейнджера вообще). Ctrl + O ярлык определяется следующим образом:

function fish_user_key_bindings
    bind \co ranger_cd
end

My ranger_cd является функцией:

function ranger_cd
    set -l tempfile '/tmp/chosendir'

    ranger --choosedir $tempfile (pwd)
    if [ -f "$tempfile" ]; and [ (cat -- $tempfile) != (echo -n (pwd)) ]
        cd (cat $tempfile)
    end
    rm -f -- $tempfile
end

(его цель - сохранить последний каталог, выбранный в рейнджере и войдите в него после выхода из рейнджера)

Я также заметил, что Ctrl + V не работает в рейнджере (он вставляет только ^V), но он работает должным образом непосредственно в Fi sh shell (вставляет то, что я скопировал ранее, так же как Ctrl + Shift + V ).

Есть идеи, что может быть не так? Заранее спасибо. Я использую:

  • Linux Manjaro 19.0.2 XFCE
  • Xfce4 терминал 0.8.9.1
  • fi sh 3.1.0
  • Рейнджер 1.9.2 (с python 3.6.9)

1 Ответ

4 голосов
/ 18 марта 2020

Это режим вставки в скобках действительно.

Fi sh позволяет в основном не выполнять многострочные вставки немедленно. Он отключает ее, когда вы выполняете команду через командную строку, и снова активируете ее, когда вы снова получаете контроль.

Не принято запускать интерактивные вещи через привязки, поэтому fi sh не отключает их там.

Чтобы отключить его вручную, используйте __fish_disable_bracketed_paste и __fish_enable_bracketed_paste:

function ranger_cd
    set -l tempfile '/tmp/chosendir'

    __fish_disable_bracketed_paste
    ranger --choosedir $tempfile (pwd)
    __fish_enable_bracketed_paste
    if [ -f "$tempfile" ]; and [ (cat -- $tempfile) != (echo -n (pwd)) ]
        cd (cat $tempfile)
    end
    rm -f -- $tempfile
end
...