Что: cae7931cc800c658d90a15b8cdca5356b0c9e179
Когда: 2020-10-07 13:22:57+03:00
Темы: tip tmux
Bracketed paste в tmux Ещё со времён XTerm-а терминалы могут отправлять особую escape последовательность чтобы показать программе что идёт вставка из буфера обмена, а не что-то набирается руками пользователя. Тогда в Vim не нужно заниматься ручным pastetoggle-ом. Давно удивляюсь как люди продолжают эту ручную работу. Но это не поможет с tmux-ом, который является терминальным приложением. С ним проблем у меня не было, потому что использую плагин Tbone, интегрирующий tmux и Vim. А сегодня решил почитать man tmux и увидел что в нём давно уже есть возможность делать bracketed paste. И default клавишу можно просто перебить на bracketed paste enabled режим: bind ] paste-buffer -p Я сейчас использую 3.2rc2 версию tmux, в которой оно, похоже, само автоматом включено и bracketed paste автоматом включён.
From: kmeaw Date: 2020-10-08 07:58:00Z Я был удивлён, когда обнаружил, что Zsh знает про это. То есть если вставить в интерактивный шелл пачку команд, то он не начнёт их немедленно выполнять, как только дочитает первую строку, а будет считать всё встравленное одним большим блоком, ожидая, когда я по-настоящему нажму Enter, чтобы дать мне шанс отредактировать вставленное. И, одновременно, есть сценарий, который у меня ломается от такого поведения. Когда я по ssh подключаюсь к удалённой машине с Zsh, и хочу допробросить какой-нибудь порт, то делаю это через command line, встроенный в ssh ("ssh> "). В ней я печатаю "-L1234:", например, а потом, если хочу вставить из X11 selection назначение, то получается не то, чего я хочу на самом деле, так как помимо "host:port" вокруг вставляемой строки добавляются те самые brackets. Видимо, придётся патчить ssh, чтобы просить его временно отключать этот режим работы терминала, когда я открываю command line, и возвращать состояние обратно, когда возвращаюсь к pty.
From: Sergey Matveev Date: 2020-10-08 08:23:34Z
From: kmeaw Date: 2021-05-14 09:35:55Z Сегодня показывал коллегам, как копировать имя ветки в pull-request из браузера и вставить его в command-line git'а, чтобы не получалось такого: % git checkout foo-bar Branch 'foo-bar' set up to track remote branch 'foo-bar' from 'origin'. Switched to a new branch 'foo-bar'. % to master to: command not found % И обнаружил проблему (уязвимость?) - копируемый в буфер фрагмент может содержать строку "\033[201~", из-за чего шелл не может определить границу встравляемого фрагмента, что может вызвать выполнение кода. Средства CSS достаточно богаты, чтобы визуально скрыть наличие этих спецсимволов. Воспроизводится в zsh 5.8 и GNU bash, version 4.4.23(1)-release с GNU Readline 7.0p5 в urxvt v9.22. В xterm и vte не воспроизводится, потому что там нельзя вставить ^[. Так что не стоит воспринимать эту фичу, как security measure, а лишь как удобный способ вставлять данные из доверенных источников. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=787628
From: Sergey Matveev Date: 2021-05-14 09:44:07Z
Сгенерирован: SGBlog 0.34.0