Saya sedang mencari cara untuk menambahkan split jendela tinggi penuh baru ke konfigurasi jendela yang sudah ada (terpecah). Karena saya tidak tahu bagaimana menjelaskannya dengan benar, saya hanya akan memposting beberapa grafik ASCII yang menunjukkan perilaku yang diinginkan untuk dua contoh konfigurasi jendela:
from to +-------------------------+ +---------------------+---+ | | | | | | | | | | | A | => | A | E | | | | | | | | | | | +-------------------------+ +---------------------+---+ +------------+------------+ +----------+----------+---+ | | B | | | B | | | A +------------+ | A +----------+ | | | C | => | | C | E | +------------+------------+ +----------+----------+ | | D | | D | | +-------------------------+ +---------------------+---+
dimana fungsi menerima lebar yang diinginkan dari jendela baru E
dan menyusut lebar dari A
, B
, C
, dan D
sesuai. Sunting2 : Perhatikan bahwa dua gambar di atas adalah contoh perilaku yang diharapkan untuk kasus konkret. Saya mencari fungsi umum yang melakukan ini secara independen dari konfigurasi di kolom from (yaitu jumlah windows [splits] di kolom from harus arbitrer).
Saya juga mencari fungsi ini di sisi kiri dan di bagian atas dan bawah bingkai.
Sunting: Dari komentar @ Nsukami_ saya menyadari bahwa fungsionalitas yang saya cari adalah kasus khusus dari masalah yang lebih abstrak. Jadi saya akan mengutarakan masalah itu:
Bagaimana Anda menyimpan konfigurasi jendela (terdiri dari sejumlah jendela dan buffer) dan "menempelkan" konfigurasi tersimpan ke jendela yang ada?
The "paste" maka harus melestarikan ukuran jendela relatif dan membelah; secara alami konfigurasi yang disisipkan adalah salinan skala.
split-window-right
sebagaiC-u -width C-x 3
. Ubahwidth
ke apa pun yang Anda inginkan dan perhatikan tanda negatif.A
,B
,C
, danD
) dan kemudian memasukkan tata letak ini ke jendela baru? Maka masalah saya dapat diselesaikan dengan 1) menyimpan konfigurasi jendela saat ini, 2) mengubah tata letak untuk hanya menampilkan satu jendela yang kemudian dipisah secara horizontal [pada dasarnya membentuk jendela untukE
dan jendela pengganti untuk yang lain, sebut sajaZ
], 3 ) akhirnya penyisipan tata letak asli ke jendela kiri (Z
)Jawaban:
Fungsi berikut harus melakukan apa yang Anda inginkan. Caranya adalah dengan membagi jendela root dari frame saat ini.
Panggil fungsi dengan arah di mana Anda untuk membagi jendela dan ukuran jendela baru. Di atas mengembalikan jendela yang baru dibuat. Konsep dan jendela dan bingkai dijelaskan dengan sangat baik dalam Manual Referensi GNU Emacs Lisp .
sumber
Tidak yakin apakah solusi terbaik, karena tidak cukup abstrak, saya sebenarnya hanya menyelesaikan satu kasus penggunaan. Caranya adalah menulis fungsi untuk beralih dari layoutX ke layoutY, dan yang lain untuk beralih dari layoutY ke layoutX
Saya harap solusi itu akan membantu
Baru saja menemukan paket bernama layout.el , saya belum pernah menggunakannya tetapi sepertinya itu yang Anda cari, Anda akan memberi tahu kami jika ok.
EDIT:
Mencoba menemukan solusi yang lebih umum, tampaknya Anda dapat menggunakan
M-x switch-to-buffer-other-frame
untuk beralih dari buffer dalam sebuah frame, katakanlah dengan layout X, ke buffer lain di frame lain dengan layout Y.Anda juga dapat berada dalam tata letak X, menyimpan tata letak ini dalam register
C-x r f
(frame-configuration-to-register), pergi ke tata letak lain, dan bila perlu, kembali ke yang sebelumnya, memanggil apa yang ada di dalam register denganC-x r j
(lompat- mendaftar)sumber
layout.el
melakukan hal yang sama sepertiwinner
: (kembali) menyimpan konfigurasi jendela dari bingkai lengkap, tidak menyimpan konfigurasi lengkap dan mengembalikannya ke jendela yang ada. Fungsi yang Anda tulis di sisi lain memang bukan solusi umum yang saya cari. Mereka memecahkan contoh kedua saya, yang tidak dimaksudkan sebagai masalah nyata tetapi hanya sebuah contoh. Saya mencari solusi yang berfungsi dalam kasus umum.switch-to-buffer-other-frame
jika 'dari' adalah bingkai dan 'ke' adalah bingkai lain