Наразі немає прямого способу відновити прив’язку ключа до його за замовчуванням; ініціалізація прив'язки за замовчуванням (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був шанс закінчити).