Як я можу прив’язати кілька команд tmux до одного натискання клавіші?


13

Зокрема, я намагаюся дати сповіщення після того, як якась команда була виконана. Так, наприклад, якщо я перезавантажую свій файл конфігурації, я хотів би мати якесь підтвердження того, що він працював, що може зробити щось подібне:

bind R source-file "$HOME/.tmux.conf" && display-message "Configuration reloaded."

Це , однак, не працює. Як і будь-які інші речі, які я пробував як способи з'єднання команд разом.


1
Він працює для мене (tmux 1.3 на Debian стисканні), \;як роздільник.
Жил 'ТАК - перестань бути злим'

1
Гаразд, я виявив, що \; чи працює, і це суть відповіді, яку я вибрав нижче. Якось тестував \; занадто швидко і визначив, що це не працює. Але я залишаю це питання тут, оскільки воно все ще служить для відповіді на питання, як це зробити.
iconoclast

Відповіді:


12

Ви можете скористатися run-shellпараметром , але найважливіше - розділити команди\;

У цьому випадку щось подібне:

bind R source-file ~/.tmux.conf \; run-shell "echo 'Reload'"

run-shell shell-command
(псевдонім: run)
Виконайте команду shell у фоновому режимі без створення вікна. Після її завершення будь-який вихід на stdout відображається в режимі копіювання. Якщо команда не повертає успіх, відображається також стан виходу.


Гей, дякую за відповідь. Я цього не перевіряв, але думаю, що це не спрацює, оскільки я перевірив код у своєму запитанні з \; і він просто запустив другу команду, але не першу. І я не знаю, чому працює оболонка запуску, але дисплей-повідомлення не буде.
іконоборство

1
Гаразд, я спробував протестувати ваше рішення, і tmux продовжує блокуватись, мабуть (хоча не з абсолютною впевненістю) від цієї команди. Я продовжую намагатися, але я впевнений, що це не вийде ...
iconoclast

Він працює на tmux 1.4. Чи означає "заблокування" означає "режим копіювання" - тобто за задумом ...
jasonwryan

Гаразд, я змусив його працювати, не замикаючи tmux. Це залишило у мене питання, чому моя первісна спроба використовувати \; не працювало:
iconoclast

1
Основою вашої відповіді є використання \; - частина про run-shell не дуже важлива, і я думаю, що приклад, який я дав display-message, набагато кращий. Тож я обираю вашу відповідь над моєю, але ви б проти того, щоб редагувати відповідь, щоб вона не вводила в оману чи не плутала інших людей. Спасибі!
іконоборство

4

Щойно після складання свого питання я подумав про щось, що може спрацювати. Я спробував це, і він працює, вам просто потрібно миритися з декількома файлами для конфігурації tmux.

Ось рішення, зокрема, воно стосується перезавантаження вашої конфігурації. У свій файл .tmux.conf поставте щось подібне:

bind R source-file "$HOME/.tmux/reload.tmux"

У файл ~ / .tmux / reload.tmux помістіть щось подібне:

source-file "$HOME/.tmux.conf" 
display-message "Configuration reloaded."

Це прекрасно працює.


1
Це насправді ТІЛЬКИ, як це працює. Все інше тут просто не працює.
lzap

Дійсно? ... Минув час, коли я перевірив інший підхід, але я був би здивований, якби tmux зламав це. Якщо ви абсолютно впевнені, що це не працює, то я знову перевірю і, можливо, замість цього прийму цю відповідь.
іконоборство

Так, вибачте, наведена відповідь справді працює :-)
lzap

1

Використовуючи метод run-shell, виводить вихід у буфер копіювання, який вимагає очищення вручну. Використання проміжного файлу конфігурації додає накладні витрати на підтримку другого файлу конфігурації. Поєднання обох відповідей у ​​моєму випадку краще, оскільки я хотів, щоб повідомлення зникло через короткий проміжок часу, подібно до спливаючого діалогового вікна в графічному інтерфейсі, але зберігати все, що міститься в одному файлі.

bind R source-file ~/.tmux.conf \; display-message "Configuration reloaded"

0

Існує патч, що дозволяє повноцінно писати сценарії всередині tmux, приєднуючи мову tcl до внутрішніх.

http://ershov.github.io/tmux/

Крім того, це дозволяє вказати стільки дій, скільки вам потрібно для натискання клавіш в режимі.

Використовуючи це, ваш код виглядатиме так:

bind R tcl { source-file "$HOME/.tmux.conf" ; display-message "Configuration reloaded." }

або навіть читабельніше:

bind R tcl {
  source-file "$HOME/.tmux.conf"
  display-message "Configuration reloaded."
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.