tmux - Вставте вікно у вказаному положенні


14

tmux має команду "move-window", за допомогою якої можна перемістити вікно до вказаного порожнього індексу, наприклад:

move-window -t 3

Однак якщо індекс 3 вже прийнятий, ви не зможете перенести своє поточне вікно в положення 3.

Я шукаю варіант, який дозволить мені перемістити (вставити) моє вікно в позицію 3, навіть якщо воно вже прийняте, а потім збільшити номери вікон для інших наступних вікон (наприклад, те, що спочатку було в 3, зараз бути 4, наступне буде 5 тощо)

tmux 

Відповіді:


2

Сценарій нижче дозволить вам робити те, що ви хочете. Ви можете запустити його з підказки оболонки або зробити:

:run "ins-move 2 5"

Цей приклад переміщує вікно два до положення перед вікном п'ятим.

#!/bin/bash
for ((i=$1; i<$2-1; i++))
do
    tmux swap-window -s :$i -t :$((i+1))
done

Спасибі! Працює чудово - хоча мені доведеться адаптувати його до роботи навіть для таких випадків, як "5 2". Принаймні зараз я знаю, як це робиться.

@Andrei: Я радий, що зміг тебе розпочати. Будь ласка, не забудьте позначити відповіді прийнятими та піднести внесок, коли вважаєте, що це доречно.
Призупинено до подальшого повідомлення.

Я вже схвалив вашу відповідь. Раніше цього не можна було зробити, тому що я щойно отримав достатньо балів репутації.

25

Спробуйте: new-window -a

Використовуючи параметр -a при створенні нового вікна, ви можете вставити нове саме в наступний індекс, тоді як усі інші наступні індекс вікна автоматично збільшаться.


Виглядає як краще рішення, ніж @DennisWilliamson, вибачте Dennis :-) Я бігаю tmux 1.9a, можливо, ця функція не була доступна в попередніх версіях.
Соня Гамільтон

Дивовижно. Не впевнений, як я пропустив це. Ти врятував мене від 4 років у минулому, мандрівник у часі! Спасибі!
rld.

Не працює, якщо потрібно нове вікно в індексі 0.
nccc

1

У мене є рішення без необхідності зовнішніх скриптів. Помістіть у своєму .tmux.conf:

bind i command-prompt -p 'Insert window at:' 'run-shell "if tmux select-window -t %1; then tmux new-window -a; tmux swap-window -s %1 -t \$((%1+1)); else tmux new-window; tmux move-window -t %1; fi; tmux select-window -t #I; tmux select-window -t %1;"'

Натисніть [PREFIX] -i та вкажіть потрібне місце вставки. Останні 2 команди вибору вікон переконайтеся, що попереднє вікно встановлено як очікувалося, і ви переходите до вставленого вікна.

РЕДАКТ: добре, я говорив занадто рано. Мені довелося змінити , #Iщоб , #{window_id}так як індекс вікна змінюється для деяких вікон при вставці. Нова функція (з новими рядками для читабельності):

bind i command-prompt -p 'Insert window at:' '      \
    run-shell "                                     \
        if tmux select-window -t %1; then           \
            tmux new-window -a;                     \
            tmux swap-window -s %1 -t \$((%1+1));   \
        else                                        \
            tmux new-window;                        \
            tmux move-window -t %1;                 \
        fi;                                         \
        tmux select-window -t #{window_id};         \
        tmux select-window -t %1;                   \
    "'                                               

Я почав використовувати спрощену версію, через дві наступні команди в .tmux.conf:

 bind i command-prompt -p 'Insert window at:' 'new-window -a -t %1; swap-window -t -1'
 bind I command-prompt -p 'New window at:'    'new-window -t %1'

Префікс-i вставляє нове вікно у позицію x, коли вікно х існує, і переміщує вікна над цим. Префікс-I створює нове вікно в позиції x, коли вікно x не існує.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.