Как связать несколько команд tmux одним нажатием клавиши?


13

В частности, я пытаюсь дать уведомление после того, как какая-то команда была выполнена. Так, например, если я перезагружаю свой файл конфигурации, я хотел бы получить подтверждение того, что он работает, что может быть сделано примерно так:

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

Это , однако, не работает. Я также не пытался делать какие-либо другие вещи как способы объединения команд.


1
У меня это работает (tmux 1.3 на Debian squeeze) с \;разделителем.
Жиль "ТАК - прекрати быть злым"

1
Хорошо, я нашел это \; делает работу, и это суть ответа я выбрал ниже. Как-то я проверял \; слишком быстро и решил, что это не сработало. Но я оставляю этот вопрос здесь, поскольку он все еще служит для ответа на вопрос, как это сделать.
иконоборчество

Ответы:


12

Вы можете использовать эту run-shellопцию , но самое главное - разделить команды\;

В этом случае что-то вроде:

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

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


Эй, спасибо за ответ. Я не проверял это специально, но я не думаю, что это будет работать, так как я проверял код в моем вопросе с помощью \; и он просто выполнил вторую команду, но не первую. И я не знаю, почему run-shell будет работать, но display-message не будет.
иконоборчество

1
Хорошо, я попытался протестировать ваше решение, и tmux продолжает блокироваться, по-видимому (хотя и не с абсолютной уверенностью) от этой команды. Я буду продолжать пытаться, но я уверен, что это не сработает ...
iconoclast

Работает на tmux 1.4. Означает ли "блокировка" "режим копирования" - то есть по замыслу ...
jasonwryan

хорошо, я получил его на работу, без блокировки tmux. Это оставило меня с вопросом о том, почему моя первоначальная попытка использовать \; не работал:
иконоборца

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
Это на самом деле единственный способ, которым он работает. Все остальное здесь просто не работает.
2013 года

Правда? ... Прошло много времени с тех пор, как я тестировал другой подход, но я был бы удивлен, если бы 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.