Наразі немає прямого способу відновити прив’язку ключа до його за замовчуванням; ініціалізація прив'язки за замовчуванням (in key_bindings_init()
) робиться один раз, коли tmux- сервер вперше запускається (in server_start()
), і немає механізму для скидання одного ключа.
Для потрібного сценарію , в якому ви хочете акт пошуку файлу конфігурації , щоб відновити значення за замовчуванням прив'язки , який раніше був перевизначений звичаї зв'язування , який з тих пір був видалений з файлу конфігурації, метод , який ви розробили розумно (хоча , до жаль , багатослівний): unbind-key -a
, потім відновіть всі прив’язки "за замовчуванням", а потім встановіть власні прив'язки (деякі з яких можуть замінити прив'язку "за замовчуванням").
Поточні прив'язки сервера можуть бути вилучені list-keys
командою * ; це може допомогти генерувати / підтримувати запропонований .tmux.reset.conf
файл, але вам потрібен спосіб витягнути прив'язки за замовчуванням , а не поточні прив’язки.
* Є деякі ситуації, коли вихідний list-keys
момент наразі не використовується безпосередньо: прив’язка для крапки з комою потрібна, щоб його крапка з комою була усунена зворотною косою рисою, щоб запобігти інтерпретації її як розділювач команд tmux , а також будь-які прив'язки, які мали аргументи, які використовували подвійні лапки всередині одиничного лапки (жодна з прив’язок за замовчуванням не є такою) вийдуть у вигляді подвійних лапок всередині подвійних котирувань .
Щоб отримати прив'язки за замовчуванням, вам потрібен тимчасовий сервер з мінімальною конфігурацією (тобто відсутні спеціальні прив’язки), щоб ви могли захопити його list-keys
вихід. Немає обмеження в кількості серверів tmux, які можна запустити, але кожен повинен використовувати інше ім'я шляху socket; параметри -L
і -S
tmux можуть використовуватися для вказування імені сокета (у $TMPDIR/tmux-$UID
або повній назві сокета. Отже, щоб поговорити з (або запустити) новий сервер на сокеті з іменем temp
, ви використовуєте це:
tmux -L temp …
Щоб переконатися, що він не використовує ваш .tmux.conf
, ви використовуєте -f
його, щоб прочитати /dev/null
(спеціальний файл, який завжди порожній):
tmux -f /dev/null -L temp …
Примітка : це не перешкоджає обробці /etc/tmux.conf
, якщо такий файл існує; шлях до цього «файлу конфігурації системи» жорстко закодований, і немає можливості обходити його (окрім виправлення коду).
Зазвичай вам потрібна new-session
команда, щоб фактично запустити сервер, але ми не хочемо жодних сеансів, просто ініціалізований сервер для запиту. start-server
Команда робить тільки що: запускає сервер без створення будь - яких сеансів.
tmux -f /dev/null -L temp start-server …
Тепер нам просто потрібно додати нашу команду «запит» ( list-keys
у цьому випадку):
tmux -f /dev/null -L temp start-server \; list-keys
Примітка : крапку з комою потрібно уникати або цитувати, щоб оболонка не розглядала її як роздільник команд оболонки, оскільки ми хочемо, щоб вона була роздільником команд tmux .
Оскільки немає сеансів для підтримки, сервер автоматично завершиться після завершення виконання list-keys
команди.
Таким чином, ви можете використовувати таку команду, щоб генерувати основну частину вашої, .tmux.reset.conf
не турбуючись про тимчасове видалення .tmux.conf
файлу (щоб ви могли бачити лише прив’язки за замовчуванням) та без необхідності закривати будь-які існуючі сервери.
Якщо run-shell
команда була синхронною, ви можете вбудувати подібний виклик у свій файл конфігурації (захоплення у тимчасовий файл, який ви потім оброблятимете source-file
), а не статичний файл (ваш .tmux.reset.conf
). Це дозволить вам завжди використовувати прив'язки за замовчуванням з вашої поточної версії tmux (прив'язки за замовчуванням періодично змінюються). На жаль, завершення run-shell
команди в даний час є асинхронним щодо наступних команд (команди, що надходять після run-shell
команди, зазвичай виконуються до того, як процес, породжений яким run-shell
був шанс закінчити).