tmux - Masukkan jendela pada posisi yang ditentukan

13

tmux memiliki perintah "move-window" yang dengannya Anda dapat memindahkan jendela ke indeks kosong yang ditentukan seperti:

move-window -t 3

Namun, jika indeks 3 sudah diambil, Anda tidak akan dapat memindahkan jendela Anda saat ini ke posisi 3.

Saya mencari opsi yang memungkinkan saya untuk memindahkan (menyisipkan) jendela saya di posisi 3 meskipun sudah diambil dan kemudian menambah nomor jendela untuk jendela berikutnya lainnya (misalnya yang semula di 3 sekarang akan menjadi 4, berikut ini akan menjadi 5 dll.)


sumber

Jawaban:

2

Script di bawah ini akan memungkinkan Anda untuk melakukan apa yang Anda inginkan. Anda dapat menjalankannya dari prompt shell atau Anda dapat melakukannya:

:run "ins-move 2 5"

Contoh itu memindahkan jendela dua ke posisi sebelum jendela lima.

#!/bin/bash
for ((i=$1; i<$2-1; i++))
do
    tmux swap-window -s :$i -t :$((i+1))
done
Dijeda sampai pemberitahuan lebih lanjut.
sumber
Terima kasih! Bekerja sangat baik - meskipun saya harus menyesuaikannya agar berfungsi bahkan untuk kasus seperti "5 2". Setidaknya sekarang saya tahu bagaimana melakukannya.
@Andrei: Saya senang saya bisa membantu Anda memulai. Tolong jangan lupa untuk menandai jawaban yang diterima dan untuk memperbaiki ketika Anda merasa itu tepat.
Dijeda sampai pemberitahuan lebih lanjut.
Saya membatalkan jawaban Anda sekarang. Tidak dapat melakukannya sebelumnya karena saya baru saja mendapat poin reputasi yang cukup.
25

Mencoba: new-window -a

menggunakan opsi -a saat membuat jendela baru dapat memasukkan yang baru tepat di indeks berikutnya, sementara semua indeks jendela berikutnya akan meningkat secara otomatis.

rwxrwxrwx
sumber
Sepertinya solusi yang lebih baik daripada @DennisWilliamson, maaf Dennis :-) Saya menjalankan tmux 1.9a, mungkin fitur ini tidak tersedia di versi sebelumnya.
Sonia Hamilton
Luar biasa. Tidak yakin bagaimana saya melewatkan itu. Anda menyelamatkan saya dari 4 tahun yang lalu, penjelajah waktu! Terima kasih!
rld.
Tidak berfungsi jika Anda menginginkan jendela baru di indeks 0.
nccc
1

Saya sudah mendapat solusi tanpa perlu skrip eksternal. Masukkan yang berikut ini di .tmux.conf Anda:

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;"'

Tekan [PREFIX] -i dan berikan lokasi yang diinginkan. 2 perintah pilih-jendela terakhir pastikan jendela 'sebelumnya' diatur seperti yang diharapkan dan Anda pergi ke jendela yang dimasukkan.

EDIT: ok, saya berbicara terlalu cepat. Aku harus mengubah #Ike #{window_id}karena indeks jendela perubahan untuk beberapa jendela pada penyisipan. Fungsi baru (dengan menambahkan baris baru untuk keterbacaan):

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;                   \
    "'                                               

Saya mulai menggunakan versi yang disederhanakan, melalui 2 perintah berikut di .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'

Awalan-i menyisipkan jendela baru pada posisi x ketika jendela x ada, dan memindahkan jendela di atasnya. Awalan-I membuat jendela baru pada posisi x ketika jendela x tidak ada.

Injil
sumber