Tmux copy-pipe с выбором мыши

Я использую copy-pipe на OS X, чтобы поделиться системным буфером обмена с Tmux 1.8:

unbind -t vi-copy Enter
bind -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"

Это работает при входе в режим выбора и копировании текста (выберите текст, затем нажмите Enter), но не при выборе текста с помощью мыши. Можно ли установить команду, которая должна запускаться после выбора мыши, как copy-pipe работает после нажатия Enter? Т.е. мне нужно бежать reattach-to-user-namespace pbcopy когда выбор оставлен.

2 ответа

Решение

Не существует встроенного способа настройки поведения "мыши вверх", которое завершает выделение, начатое мышью. Подробнее см. reset_mode ярлык window_copy_mouse() в window-copy.c (ссылки на источник tmux 1.8); в частности, в этом фрагменте кода нет ссылок на параметры окна, сеанса или сервера.

Есть обходной путь, но это, вероятно, немного крайний случай:

  • Активируйте свой copy-pipe привязка (например, нажмите Enter), прежде чем отпустить кнопку мыши.
    Это запустит вашу команду оболочки, скопирует выделение в буфер и выйдет из режима копирования (т.е. обычное поведение для copy-pipe).

Есть небольшой побочный эффект:

  • Событие мыши, которое ваш терминал отправит, когда вы наконец отпустите кнопку, заставит tmux снова войти в режим копирования. Вам нужно будет вручную выйти (например, Escape или Cc) из этого "дополнительного" режима копирования.
    Это, вероятно, можно считать ошибкой (input_mouse() не проверяет, что событие мыши является событием "кнопка вверх" перед запуском нового режима копирования); но это в основном безвредно (кроме неудобства необходимости выхода из второго экземпляра режима копирования).

Для tmux 2.2 и более поздних версий используйте:

bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "pbcopy"
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "pbcopy"
Другие вопросы по тегам