Создайте пользовательскую команду в tmux.

Вопрос или проблема

Я знаю, как привязать клавишу к команде в tmux, но я хочу создать свою собственную команду (которую можно ввести с помощью префиксной клавиши + двоеточие). В этой пользовательской команде я хочу выполнить пару других команд.

Моя идея заключается в следующем:

no-side-status() {
    set status-left-length 0
    set status-right-length 0
}

side-status() {
    set status-left-length 50
    set status-right-length 150
}

Таким образом, я могу ввести :no-side-status, чтобы скрыть левую и правую панели состояния, и ввести :side-status, чтобы восстановить левую и правую панели состояния.

Возможно ли создать такие пользовательские команды? Если да, то как? Если нет, то есть ли другой способ достичь желаемого?

Изначально tmux не поддерживает пользовательские команды, кроме выполнения внешних оболочечных скриптов.

Есть мод, который добавляет полноценную поддержку скриптов в tmux: http://ershov.github.io/tmux/

Он также позволяет создавать пользовательские команды. Например, ваши будут выглядеть так:

proc no-side-status {} {
    set status-left-length 0
    set status-right-length 0
}

proc side-status {} {
    set status-left-length 50
    set status-right-length 150
}

Чтобы использовать из командной строки tmux, просто введите C-b : и side-status или no-side-status.

Чтобы привязать это к клавише, используйте bind C-p tcl side-status.

bind C-p run "/usr/bin/notify-send Foo"

Это полный ответ. У вас может быть две конфигурации tmux. Одна содержит

set status-left-length 0
set status-right-length 0
bind-key R source-file ~/.tmux.alternative.conf \; \
                    display-message "Загружена альтернативная конфигурация"

Другой содержит

set status-left-length 50
set status-right-length 15
bind-key R source-file ~/.tmux.conf \; \
                    display-message "Загружена конфигурация по умолчанию"

Самый близкий опыт, который вы можете получить прямо сейчас, это:

  1. создать оболочечный скрипт tmux и поместить его в $PATH
  2. выполнить скрипт внутри tmux с помощью команды run-shell (коротко: ru)

Пример в tmux (скажем, что скрипт называется tm.xx)

c-b :ru tm.xx

Таким образом, вы вводите три дополнительных символа – ru

Определите псевдоним команды, добавив что-то вроде этого в ваш .tmux.conf:

set -s command-alias[10] widevim='splitw -bvfp 80 "vim -O2"'

Это относительно новая функция tmux, которая предлагает то, что вам здесь нужно: псевдонимы команд. Псевдонимы команд отличаются от короткого псевдонима каждой команды (например, lsw для list-windows). Псевдонимы команд определяются с помощью опции сервера command-alias. Это массивная опция, где каждая запись имеет номер.

По умолчанию есть несколько настроек для удобства и несколько для совместимости с предыдущими версиями:

$ tmux show -s command-alias
command-alias[0] split-pane=split-window
command-alias[1] splitp=split-window
command-alias[2] "server-info=show-messages -JT"
command-alias[3] "info=show-messages -JT"
command-alias[4] "choose-window=choose-tree -w"
command-alias[5] "choose-session=choose-tree -s"

Беря command-alias[4] в качестве примера, это означает, что команда choose-window расширяется до choose-tree -w.

Пользовательский псевдоним команды добавляется путем добавления нового индекса в массив. Поскольку значения по умолчанию начинаются с индекса 0, лучше использовать более высокие числа для дополнительных псевдонимов команд:

:set -s command-alias[100] 'sv=splitw -v'

Эта опция делает sv тем же, что и splitw -v:

:sv

Любые последующие флаги или аргументы, переданные введенной команде, будут добавлены к замененной команде. Это то же самое, что splitw -v -d:

:sv -d

tmux теперь поддерживает всплывающие окна. Вы можете вызвать всплывающее окно, используя tmux display-popup. И затем в этом всплывающем окне запустить скрипт, который вы хотите использовать.

Вы можете создать оболочечный скрипт и вызвать его с помощью псевдонима.

Вы все еще можете передавать аргументы с помощью командного приглашения.

Пример с вызовом исполняемого скрипта yourcommand и 1 аргументом:

set -s command-alias[100] 'yourcommand=command-prompt "run-shell \"yourcommand %1\"'

Пример команды для переключения на окно, которое связано с каталогом кода проекта.

WINDOW_NAME=$1
WINDOW_DIR="$HOME"/${WINDOW_NAME}
# Проверка, существует ли окно
if tmux list-windows | grep -q "$WINDOW_NAME"; then
  
  # Переключение на окно, если оно существует
  tmux select-window -t "$WINDOW_NAME"
  
else
  
  # Создание его
  # https://man.openbsd.org/tmux#new-window
  # n: имя окна
  # c: каталог
  tmux new-window \
    -c "$WINDOW_DIR" \
    -n "$WINDOW_NAME"
fi

Ответ или решение

Как создать пользовательские команды в tmux

tmux — это мощный терминальный мультиплексор, который позволяет пользователям эффективно управлять несколькими терминальными сессиями одновременно. Одной из интересных возможностей tmux является настройка пользовательских команд, которые можно вызывать через командную строку с помощью сочетания клавиш (обычно это префикс, затем двоеточие). В этой статье мы рассмотрим, как создать такие пользовательские команды и их использование.

Установка tmux

Если у вас ещё не установлен tmux, вы можете установить его с помощью пакетного менеджера вашей операционной системы. Например, на Ubuntu это можно сделать с помощью команды:

sudo apt install tmux

Создание пользовательских команд

Хотя изначально tmux не поддерживает создание собственных команд, начиная с версии 2.6, появилась возможность использовать псевдонимы команд, что существенно расширяет функциональность. Вот шаги, которые вы можете предпринять для создания пользовательских команд, подобных вашим функциям no-side-status и side-status.

  1. Редактирование конфигурационного файла tmux:

    Откройте ваш ~/.tmux.conf в текстовом редакторе:

    nano ~/.tmux.conf
  2. Добавление пользовательских команд с использованием псевдонимов:

    Вставьте следующие строки в конфигурационный файл:

    set -s command-alias[100] 'no-side-status=run-shell "tmux set status-left-length 0; tmux set status-right-length 0"'
    set -s command-alias[101] 'side-status=run-shell "tmux set status-left-length 50; tmux set status-right-length 150"'

    Эти строки создадут две пользовательские команды. no-side-status будет скрывать левые и правые статус-бары, а side-status будет восстанавливать их.

  3. Перезагрузка конфигурации tmux:

    Для применения изменений введите команду:

    tmux source-file ~/.tmux.conf
  4. Вызов пользовательских команд:

    Теперь вы можете использовать ваши пользовательские команды в tmux. Просто введите:

    Ctrl-b :

    Затем напишите no-side-status или side-status и нажмите Enter.

Альтернатива: использование внешних скриптов

Если вы хотите более сложные команды или автоматизацию, вы можете создать сценарий Shell и вызывать его из tmux. Вот как это сделать:

  1. Создайте скрипт:

    Создайте файл toggle_status.sh с содержимым:

    #!/bin/bash
    if [ "$1" == "hide" ]; then
       tmux set status-left-length 0
       tmux set status-right-length 0
    elif [ "$1" == "show" ]; then
       tmux set status-left-length 50
       tmux set status-right-length 150
    fi

    Не забудьте сделать его исполняемым:

    chmod +x toggle_status.sh
  2. Вызов скрипта в tmux:

    Теперь вы можете вызывать этот скрипт с помощью команды:

    ctrl-b :run-shell "/path/to/toggle_status.sh hide"

    или

    ctrl-b :run-shell "/path/to/toggle_status.sh show"

Этот метод предоставляет больше гибкости и возможностей для выполнения сложных последовательностей команд.

Заключение

С помощью описанных выше методов вы сможете создать свои собственные пользовательские команды в tmux, что значительно упростит и ускорит вашу работу в терминале. Не забывайте использовать псевдонимы для часто используемых команд, чтобы улучшить производительность своей среды tmux.

Оцените материал
Добавить комментарий

Капча загружается...