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.)

tmux 

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

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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.