- Manajemen jendela di Emacs dibangun di atas struktur fleksibel yang memisahkan buffer dan jendela, dengan operasi bawaan yang agak kaku di atasnya, sehingga pengguna perlu menggabungkan alat dan kebiasaan untuk membentuk alur kerja sendiri
- Fokus tulisan ini bukan pada aturan
display-bufferatau workspace berbasis tab, melainkan pada operasi manual di dalam satu frame Emacs untuk menangani perpindahan fokus, penataan buffer, pemisahan dan penghapusan jendela, serta pekerjaan sementara other-window,windmove,winum,ace-window, mouse,transpose-frame,window-prefix-map,other-window-prefix, danwinner-modemasing-masing berbagi peran untuk perpindahan siklik, perpindahan arah, pemilihan nomor, pemilihan lewat hint, transformasi layout, dan pemulihan- Dengan memanfaatkan
ace-windowdan Avy, Anda bisa memilih jendela tertentu lalu menjalankan perintah, atau langsung melompat ke posisi teks sehingga perpindahan jendela itu sendiri bisa dikurangi - Manajemen jendela Emacs lebih dekat pada masalah terbuka daripada sistem tetap yang rumit;
display-buffer-alist, Popper·Popwin, manipulasi tree jendela, dan integrasi tiling WM memang kuat, tetapi biaya konfigurasinya besar dan masih punya celah
Manajemen jendela dalam pengertian Emacs
- Jendela (window) di Emacs adalah viewport atau panel di dalam frame, sedangkan buffer adalah potongan teks berurutan yang bisa saja merupakan isi file, tetapi bisa juga bukan
- Banyak IDE dan editor pada praktiknya menggabungkan konsep jendela dan buffer untuk mengurangi beban kognitif, tetapi Emacs memisahkan keduanya agar penataan menjadi lebih fleksibel
- Melihat file yang sama dua kali menjadi mudah
- Buffer yang tidak berkorespondensi langsung dengan file juga bisa ditangani secara alami
- indirect buffers di Emacs mirip dengan salinan “live” dari keseluruhan buffer
- Struktur terpisah ini memberi biaya bagi pengguna baru
- Harus menempatkan jendela di posisi yang diinginkan di dalam frame
- Harus memasukkan buffer yang diinginkan ke jendela yang diinginkan
- Pada tahap awal, beban operasionalnya lebih dulu terasa daripada manfaat dari struktur terpisah tersebut
Area yang tidak dibahas tulisan ini
- Aturan penampilan buffer otomatis yang sepenuhnya mengendalikan
display-bufferbukanlah topik utama- API
display-buffermenuntut pengetahuan detail sepertiwindow-parameters, slot, dan jendela khusus - Sebagai materi terkait, Anda bisa merujuk ke tulisan Mickey Peterson, video Protesilaos Stavrou, dan Emacs Lisp manual
- API
- Tab, workspace, isolasi buffer, dan persistensi sesi juga berada di luar cakupan inti
- Alat terkait mencakup tab-bar, tabspaces, eyebrowse, tab-bookmark, desktop.el, persp-mode.el, perspective, project-tab-groups, beframe, dan activities.el
- Alternatif radikal yang berperilaku seperti window manager tersendiri di dalam Emacs juga dikesampingkan dari isi utama
- Fokus sebenarnya adalah operasi manual sehari-hari
- Berpindah fokus jendela
- Memindahkan buffer antarjendela
- Membagi dan menghapus jendela
- Mengendalikan jendela target tampilan saat menjalankan perintah
Perpindahan dasar: other-window dan “jendela berikutnya”
other-windowadalah perintah perpindahan jendela dasar yang dipelajari di tutorial Emacs, dengan tombol bawaanC-x o- Urutan seleksinya umumnya berputar searah jarum jam di dalam frame
- Saat jumlah jendela sedikit, ini sederhana dan cukup layak dipakai
- Semakin banyak jendela, semakin sering perintah harus dipanggil untuk mencapai posisi yang diinginkan
- Ada juga cara penyesuaian yang praktis
- Bisa diikat ke tombol yang lebih mudah ditekan, seperti
M-o - Bisa memakai argumen angka untuk melompati beberapa posisi atau bergerak ke arah sebaliknya
- Jika
repeat-modediaktifkan, input berulang sepertiC-x o o o...atauM-o o o...menjadi mungkin
- Bisa diikat ke tombol yang lebih mudah ditekan, seperti
- Jika parameter jendela
no-other-windowdiatur,other-windowakan melewati jendela tertentu- Inilah alasan jendela samping bergaya file manager seperti
dired-sidebarataudirvish-sidedikeluarkan dari targetother-window
- Inilah alasan jendela samping bergaya file manager seperti
- Konsep “jendela berikutnya” juga menjadi target bawaan bagi perintah yang bekerja pada jendela lain, seperti
scroll-other-window
Perpindahan berbasis arah: windmove
windmoveadalah library bawaan yang memindahkan fokus jendela berdasarkan arah- Ini mirip dengan perpindahan kiri·kanan·atas·bawah yang diharapkan pengguna Vim
- Pengguna
evil-modejuga memakai Windmove secara internal
windmove-left,windmove-right,windmove-up, danwindmove-downdapat diikat keWASD,HJKL, tombol panah, dan sebagainya- Perintah
windmove-swap-states-left/right/up/downmenukar buffer jendela berdasarkan arah- Pada saat itu, fokus ikut berpindah bersama buffer
- Jendela pada arah tertentu juga bisa dihapus dengan keluarga
windmove-delete-*, tetapi tulisan ini membahas metode lain lebih lanjut di bawah - Dalam lingkungan tiling WM, perpindahan antara jendela internal Emacs dan jendela OS bisa diintegrasikan agar memakai tombol yang sama
- Contoh integrasi Emacs+i3wm dapat dilihat di i3 integration
- Contoh konfigurasi untuk qtile tersedia di emacs-wm.el
Menyerahkan jendela Emacs sebagai jendela OS
- frames-only-mode membuka semua buffer sebagai frame baru, bukan sebagai jendela Emacs, sehingga dikelola oleh window manager OS
- Pendekatan ini membuat buffer Emacs ditangani pada lapisan yang sama dengan jendela OS, sehingga keduanya bisa dikelola dengan tombol yang sama
- Alat seperti Avy,
winum,ace-window, danscroll-other-windowdapat diterapkan bukan hanya ke jendela, tetapi juga ke seluruh frame - Sebagian perintah Emacs mengasumsikan frame dapat dibagi sesuka hati, sehingga bisa muncul kasus pengecualian
- Kecenderungan ini terutama terlihat pada perintah org-mode
- Belum ada pengalaman mencoba
frames-only-modepada compositor Wayland
Memilih secara instan dengan nomor dan hint
- winum menampilkan nomor jendela di mode line dan memungkinkan memilih jendela berdasarkan nomor
- Jika
other-windowmendekati O(n) danwindmovebergantung pada tata letak spasial,winummendekati akses O(1) saat nomornya diketahui - Jika perintah pemilihan dipanggil dengan argumen prefix negatif, jendela tersebut akan dihapus
- Saat minibuffer aktif, ia selalu mendapat nomor 0
- Bekerja lintas frame Emacs
- Jika
- Tombol bawaan
C-x w <n>bisa terasa panjang, sehingga ada contoh konfigurasi yang memakaiM-0hinggaM-9untuk memilih jendela - ace-window dibahas sebagai alat yang kuat untuk kontrol jendela Emacs berbasis keyboard
- Menampilkan hint di atas tiap jendela, lalu memilihnya dengan menekan tombol terkait
- Jika
ace-window-display-modediaktifkan, hint dapat terus ditampilkan di mode line seperti winum - Menekan
?akan membuka menu dispatch
- Kekuatan
ace-windowbukan sekadar memilih, melainkan menjalankan aksi setelah memilih jendela- Menghapus jendela
- Memindahkan dan menukar jendela
- Membagi jendela
- Menampilkan buffer tertentu
- Menerapkan pekerjaan ke jendela lain tanpa meninggalkan jendela yang dipilih
Mouse dan transformasi layout
- Di Emacs, mouse cocok secara alami untuk memilih jendela, mengubah ukuran, menu konteks, serta drag and drop
context-menu-modedan menu bar meningkatkan kemudahan penemuan fitur
- Jika tangan sudah terlepas dari keyboard, mengoperasikan Emacs dengan mouse bisa menjadi jalur dengan hambatan paling kecil
- Ada juga operasi yang dapat dilakukan dengan gesture mouse
- Membagi frame secara vertikal atau horizontal
- Menghapus jendela
- Menggilir buffer di dalam jendela
- Menukar jendela ke kanan atau kiri
- Toggle dua buffer terakhir dalam satu jendela
- Dengan mengatur
mouse-autoselect-window, perilaku focus-follows-mouse dapat diaktifkan - transpose-frame menyediakan perintah untuk memutar atau membalik layout jendela dalam frame
rotate-frame,flip-frame, danflop-framedisebut sebagai perintah yang cukup sering bergunatranspose-framesendiri dinilai kurang praktis karena merupakan transposisi terhadap diagonal utama
window-prefix-map dan pohon jendela
window-prefix-mapadalah kumpulan perintah manajemen jendela yang terikat ke tombol bawaan EmacsC-x wsplit-root-window-rightdansplit-root-window-belowmembagi root window dari frame- Masing-masing di-bind ke
C-x w 3danC-x w 2 - Berbeda dari perintah split biasa yang memecah lagi jendela saat ini, ini berguna saat membuat ruang kerja terpisah
- Masing-masing di-bind ke
- Jendela-jendela Emacs ditata dalam struktur pohon
- Jendela nyata adalah node leaf
- Split mengubah leaf menjadi node induk dari dua jendela
- Mirip dengan tata letak window manager tiling manual seperti i3 atau bspwm
tab-window-detachdantear-off-windowmemindahkan jendela saat ini ke tab baru atau frame baru- Tombol bawaannya, masing-masing
C-x w ^ tdanC-x w ^ f, dinilai panjang - Dapat diganti dengan aksi dispatch
ace-windowatau binding mouse
- Tombol bawaannya, masing-masing
other-window-prefix: mengubah lokasi tampilan perintah berikutnya
other-window-prefixadalah perintah bawaan yang terikat keC-x 4 4, dan membuat buffer yang ditampilkan oleh perintah berikutnya terlihat di jendela berikutnya- Perintah ini memisahkan perintah yang menampilkan buffer, seperti membuka file, berpindah buffer, atau melompat ke bookmark, dari pemilihan jendela tujuan tampilan
- Mengurangi kebutuhan untuk selalu menghafal keluarga perintah seperti
find-file-other-window,find-file-other-tab, danfind-file-other-frame - Cukup tambahkan prefix di depan perintah dasar seperti
find-file,find-file-read-only, atauswitch-to-bufferuntuk mengubah lokasi tampilannya saja
- Mengurangi kebutuhan untuk selalu menghafal keluarga perintah seperti
- Dalam contoh Forge, masalah jendela saat ini tertimpa saat menekan
RETpada daftar issue dapat dihindari denganother-window-prefix - Ini juga menyediakan perilaku yang seragam ketika setiap paket memiliki cara berbeda untuk “membuka di jendela lain”, seperti Magit, Org mode, Notmuch, Elfeed, dan EWW
- Ada juga prefix terkait
same-window-prefixmemaksa buffer dari perintah berikutnya ke jendela saat iniother-frame-prefixmembuatnya terbuka di frame baruother-tab-prefixmembuatnya terbuka di tab baru
Menyimpan dan memulihkan konfigurasi jendela
window-configuration-to-registeradalah perintah bawaan untuk menyimpan konfigurasi jendela saat ini ke register, dengan tombol bawaanC-x r wjump-to-registermemulihkan konfigurasi yang tersimpan, dengan tombol bawaanC-x r j- Pada level Elisp, hasil
current-window-configurationdapat disimpan ke variabel lalu diterapkan denganset-window-configuration- Jika disimpan ke disk dengan cara seperti
prin1,persist, ataumultisession, ini menjadi benih fitur pemulihan lintas sesi - Namun, fakta bahwa posisi kursor tiap jendela ikut dipulihkan biasanya bisa menjadi perilaku yang tidak diinginkan
- Jika disimpan ke disk dengan cara seperti
- Ada juga opsi “oops” yang otomatis menumpuk konfigurasi lama
winner-mode: saat tidak memakai tab, membatalkan atau menerapkan ulang perubahan konfigurasi jendela denganwinner-undodanwinner-redotab-bar-history-mode: menyediakan stack riwayat terpisah untuk tiap tabundelete-frame-modedantab-undo: memulihkan frame atau tab yang tidak sengaja ditutup
- Menggunakan
winner-undosebagai cara membereskan setiap kali Emacs menampilkan buffer di tempat yang keliru lebih mirip solusi sementara- Masalah dasarnya adalah aturan tampilan buffer belum diatur sesuai keinginan
Mengoptimalkan untuk dua jendela yang sering bolak-balik
- Dalam pekerjaan nyata, meskipun ada banyak jendela di layar, sebagian besar perpindahan sering terjadi di antara dua jendela
- Code & REPL
- Code & Grep
- Prose & Notes
- Listing & Item
- Jendela lainnya bisa menjadi area referensi yang sering dilihat tetapi jarang dialihkan, seperti dokumentasi, informasi debug, log, output perintah, daftar isi, file explorer, atau pratinjau
- Ada contoh
other-window-mruyang memakaiget-mru-windowuntuk berpindah ke jendela yang paling baru digunakan- Setelah memilih jendela kedua dengan cara apa pun, seperti mouse,
ace-window, atauwinum, selanjutnya bisa bolak-balik dengan cepat
- Setelah memilih jendela kedua dengan cara apa pun, seperti mouse,
- Ada juga cara memperbaiki
other-windowitu sendiri- Membuatnya otomatis membagi jendela jika hanya ada satu jendela
- Menggilir berdasarkan urutan penggunaan terbaru seperti switchy-window
- Membuat bolak-balik dua jendela terasa alami seperti
other-window-alternating, yang membalik arah setiap kali bukan pemanggilan beruntun
Memperluas ace-window berbasis eksekusi perintah
ace-windowdapat memakaiaw-selectuntuk menggunakan hanya tahap pemilihan jendela tertentu secara terpisah- Jika melakukan operasi yang diinginkan terhadap jendela yang dikembalikan oleh
aw-select, pola “pilih jendela → jalankan operasi → pertahankan jendela semula” dapat dibuat - Contoh perintahnya adalah sebagai berikut
ace-tear-off-window: melepaskan jendela yang dipilih denganace-windowke frame baruace-tab-window-detach: memindahkan jendela yang dipilih ke tab baru
ace-window-one-commandmemungkinkan menjalankan satu perintah arbitrer di jendela yang dipilih- Pertama memilih jendela dengan
ace-window - Membaca urutan tombol lalu menjalankan perintah tersebut
- Dapat menerapkan pekerjaan ke jendela lain tanpa mengubah jendela pilihan semula
- Pertama memilih jendela dengan
ace-window-prefixberperilaku seperti versi yang lebih langsung dariother-window-prefix- Memilih langsung jendela tujuan untuk buffer yang akan ditampilkan oleh perintah berikutnya dengan
ace-window - Jika perlu, dapat membuat jendela baru saat itu juga lewat aksi
ace-windowdan menampilkannya di sana - Binding tombol yang diusulkan adalah
C-x 4 o
- Memilih langsung jendela tujuan untuk buffer yang akan ditampilkan oleh perintah berikutnya dengan
Apakah benar-benar perlu berpindah jendela?
- Tujuan berpindah jendela secara umum terbagi menjadi dua
- Switch and stay: terus mengedit atau bekerja di jendela tujuan
- Switch and return: melakukan hal singkat seperti menggulir, mencari, menyalin, atau menghapus, lalu kembali ke posisi semula
- Untuk kasus pertama, Avy dapat menggabungkan perpindahan jendela dan perpindahan kursor menjadi satu
avy-goto-char-timermemperlakukan beberapa jendela dan frame Emacs yang terlihat di layar seperti satu kumpulan kandidat lompatan- Saat melompat ke string atau posisi karakter tertentu, jendela juga otomatis ikut berubah
- Jika Avy tidak melintasi jendela dan frame, periksa pengaturan
avy-all-windows
pop-global-markadalah cara untuk kembali ke posisi sebelumnya, dan jika perlu perpindahan jendela juga dapat terjadi bersamaan- Secara default ia mengganti buffer di jendela saat ini, jadi ada advice yang membuatnya menggunakan
pop-to-buffer
- Secara default ia mengganti buffer di jendela saat ini, jadi ada advice yang membuatnya menggunakan
- Untuk kasus kedua, alur “berpindah → bertindak → kembali” dapat dibungkus sebagai perintah dan diotomatisasi
ace-window-one-commandadalah salah satu cara yang bersifat umum- Tindakan tertentu dapat dibuat sebagai perintah khusus atau macro
Menggulir, mencari, dan mengganti buffer di jendela lain
scroll-other-windowdanscroll-other-window-downmenggulir jendela lain tanpa meninggalkan jendela saat ini- Target defaultnya adalah “jendela berikutnya” searah jarum jam dari jendela saat ini
- Jika ada tiga jendela atau lebih, yang tergulir bisa saja bukan jendela referensi yang diharapkan, melainkan jendela lain
- Anda dapat mengatur
other-window-scroll-defaultuntuk mengubah aturan pemilihan target gulir- Jika memakai
get-lru-window, jendela yang paling lama tidak digunakan akan digulir - Jika memakai
get-mru-window, jendela yang baru-baru ini digunakan dapat dijadikan target
- Jika memakai
- Dengan mengatur
other-window-scroll-buffer, Anda dapat menetapkan jendela yang menampilkan buffer tertentu sebagai target gulir- Ini umumnya diperlakukan sebagai opsi yang berguna bagi pembuat paket
- Contoh
isearch-other-windowmemulai pencarian di jendela target gulir, lalu kembali ke jendela semula setelah pencarian selesai- Ada contoh penggunaan shell bersama buffer Man
next-buffer,previous-buffer, danswitch-to-bufferjuga dapat diperluas agar berjalan di jendela lain dengan mengombinasikan argumen prefix danother-window-for-scrolling- Jika membuat keymap untuk
repeat-mode, Anda dapat terus memutar atau memilih buffer di jendela lain dengann,p, danb
- Jika membuat keymap untuk
master-mode, scroll-all-mode, with-other-window
master-modemenetapkan buffer saat ini sebagai “master” dan buffer lain sebagai “slave”, sehingga Anda dapat mengirim aksi ke buffer slave tanpa meninggalkan posisi saat ini- Secara default ini dinilai sebagai alternatif yang kurang transparan dibanding pendekatan
other-window-scroll-defaultdi atas - Melalui
master-says, Anda dapat membuat tombol yang menjalankan aksi arbitrer sepertirecenterdi buffer slave
- Secara default ini dinilai sebagai alternatif yang kurang transparan dibanding pendekatan
scroll-all-modemengikat perilaku gulir semua jendela di dalam frame- Berguna ketika ingin melihat beberapa tampilan jendela secara tersinkronisasi
- Macro
with-other-windowadalah helper Elisp yang menjalankan kode isi di jendela yang dipilih olehother-window-for-scrolling- Perintah seperti
isearch-other-windowdanisearch-other-window-backwardsdapat dibuat dengan sederhana - Dipakai seperti padanan Elisp dari
ace-window-one-commandyang interaktif
- Perintah seperti
Strategi mengurangi jumlah jendela
- UI editor modern umumnya mengerucut ke satu jendela utama, tab bar di atas, sidebar direktori atau daftar isi di kiri, panel kanan opsional, dan terminal di bawah
- Di Emacs pun layout seperti itu dapat dibuat, tetapi Anda juga bisa memusatkan layar pada satu buffer dan mengganti perpindahan jendela dengan perpindahan buffer
- Jika hanya dilonggarkan sampai dua jendela, sebagian besar kesederhanaan tetap terjaga sambil memakai jendela kedua sebagai referensi live
- Pengaturan bawaan Emacs mendukung pola ini dengan cukup baik melalui perintah seperti
scroll-other-window
- Pengaturan bawaan Emacs mendukung pola ini dengan cukup baik melalui perintah seperti
- Ada juga strategi menganggap jendela hanya sebagai kontainer teks dan mengabaikannya
- Langsung melompat ke posisi teks di layar dengan Avy
- Menelusuri kembali posisi sebelumnya dengan
mark-ringdanglobal-mark-ring - dogears dapat menyediakan UI penelusuran kembali yang lebih terperinci
- Untuk penetapan posisi manual, Anda dapat memakai
point-to-registerdanjump-to-register; untuk catatan yang lebih permanen, Anda dapat memakaibookmark-setdanbookmark-jump
Aturan tampilan otomatis dan manajemen popup
display-buffer-alistadalah variabel yang menentukan cara menampilkan buffer dengan mencocokkan buffer dan aturan ketika kode Elisp hendak menampilkan buffer- Secara teori, jika Anda membuat aturan ukuran, posisi, peran, dan fokus untuk setiap jenis buffer yang dilihat setiap hari, sebagian besar manajemen jendela akan terselesaikan
- Masalahnya adalah biaya konfigurasi
- Predicate buffer dan mode
- Jenis dan slot jendela
- Fungsi action
display-buffer - Parameter jendela
- Sulit mengekspresikan niat sederhana seperti “jangan ganggu susunan jendela saya”
- Ada juga alat bantu
- Shackle menutupi kompleksitas
display-buffer-alistdan menyediakan antarmuka Elisp yang sederhana - Doom Emacs menyediakan perintah praktis seperti
set-popup-rule!
- Shackle menutupi kompleksitas
- Popwin dan Popper berangkat dari pengamatan bahwa tidak semua buffer itu sama
- Membedakan buffer kerja utama dan buffer popup sementara
- Menampilkan dokumentasi, shell, status pekerjaan, hasil kompilasi, hasil pencarian, pesan, dan sebagainya sebagai jendela bantu kecil, lalu memudahkan untuk menutup atau memutarnya
- Popper berfokus pada menaikkan dan menurunkan buffer popup yang ditentukan dengan satu tombol
- Popwin adalah implementasi yang lebih lama dan lebih komprehensif, tetapi juga menyertakan pengaturan
display-buffermiliknya sendiri - Jika hanya ingin membuka dan menutup shell dengan cepat, shell-pop atau vterm-toggle bisa sudah cukup
Potongan yang hilang: manipulasi tree jendela
- Emacs merepresentasikan jendela di dalam frame sebagai tree, tetapi sebagian besar perintah pengguna bekerja berdasarkan posisi spasial, bukan struktur tree
- Karena ketidakselarasan ini, saat membelah atau menghapus jendela hasilnya bisa berbeda dari yang diharapkan, atau struktur pembelahan yang dapat dibuat menjadi terbatas
- Jika ada paket hipotetis seperti
window-tree, manipulasi pada tingkat node internal bisa menjadi mungkin- Membelah, mentransposisi, atau mencerminkan hanya sebagian frame
- Memilih beberapa jendela sebagai konfigurasi parsial
- Memindahkan bagian yang dipilih ke tab atau frame
- Menduplikasi atau menyimpan konfigurasi parsial
- Melindungi branch tree tertentu dari perintah keluarga
display-buffer
- Sudah ada juga elemen Elisp yang tersedia
window-treemengembalikan tree itu sendiriframe-root-windowmengembalikan root- Ada
window-parent,window-child, danwindow-*-sibling - Traversal dapat dilakukan dengan
walk-window-treedanwalk-windows
- Kekurangannya juga jelas
- Tidak ada fungsi bawaan untuk mengubah tree selain split/delete umum
- Tidak ada konsep memilih jendela internal, sehingga harus disimulasikan lewat UI
Bagian yang hilang: integrasi WM tiling
- Model pohon jendela Emacs sangat mirip dengan manajer jendela tiling manual seperti i3 atau bspwm
- Jika memakai Emacs di dalam i3, bspwm, atau tmux, wajar jika ingin berpindah secara mulus antara jendela di dalam dan di luar Emacs dengan keybinding yang sama
- Contoh yang sudah ada meliputi i3-integration dari Pavel Korytov dan emacs-wm.el untuk qtile
- Untuk antarmuka integrasi yang lebih rapi, diperlukan elemen-elemen berikut
- Manajer jendela harus dapat mengidentifikasi kelas jendela aktif dan menyediakan perpindahan serta manipulasi jendela secara terprogram
- Metode komunikasinya bisa berupa perintah shell, socket, IPC berbasis server, D-Bus di Linux, dan sebagainya
- Di sisi Emacs, diperlukan antarmuka independen dari metode komunikasi yang meniru operasi ala manajer jendela
- Saat beralih jendela OS, perlu diperiksa apakah jendela aktif adalah Emacs; jika perlu, Emacs menangani operasi tersebut di dalam frame internalnya
Kesimpulan
- Manajemen jendela Emacs menyediakan pilihan di berbagai lapisan, mulai dari
other-windowhinggaace-window, Avy, Popper, dandisplay-buffer-alist - Tidak perlu memakai semua metode; karena ada banyak alternatif untuk memecahkan masalah yang sama, Anda bisa memilih satu dan mengabaikan sisanya
- Alat bawaan dasar kemungkinan besar akan dipertahankan lama, tetapi status paket pihak ketiga dapat berubah tergantung pengembangan, penelantaran, atau menjadi tanpa pengelola
- Manajemen jendela Emacs bukanlah sistem tetap yang rumit, melainkan lebih dekat dengan struktur terbuka yang menyediakan bahan dan resep
- Dengan sedikit konfigurasi pun penggunaan dasar sudah memadai, dan dengan sedikit kombinasi serta penyesuaian Elisp, Anda dapat membuat alur kerja yang jauh lebih disesuaikan
1 komentar
Pendapat Hacker News
Tulisannya bagus, penjelasan dan panduannya juga sangat baik. Kadang jendela yang dibagi rata saja tidak cukup, jadi saya memasukkan fungsi berikut ke
init.eldan mengikatnya keC-x 7untuk mengatur jendela saat ini dan jendela pasangannya secara vertikal menjadi ukuran 70%/30%Arah horizontal juga ditangani dengan cara yang sama melalui binding
C-x 8(defun partial-size-window ()"Set the two split windows to 70% and 30% vertically."(interactive)(let ((size (- (truncate (* .70 (frame-height))) (window-height))))(if (> size 0)(enlarge-window size))))(defun partial-size-window-h ()"Set the two split windows to 70% and 30% horizontally."(interactive)(let ((size (- (truncate (* .70 (frame-width))) (window-width))))(if (> size 0)(enlarge-window-horizontally size))))Eksplorasi yang bagus. Saat ini saya sedang di mobile jadi belum bisa langsung mencobanya, tetapi saya ingin segera mencoba ace-window,
ace-window-display-mode, danframes-only-modeKalau boleh jujur, meski sudah memakai Emacs sekitar 40 tahun, umumnya saya hanya memakai
next-window, membuat jendela baru di bawah atau di samping, dan mengandalkantmuxsaat bekerja di server jarak jauhC-x 1/2/3danC-x oNamun sebenarnya itu cukup kuat dan mencukupi untuk kebutuhan saya, sampai-sampai saya berharap berbagai tiling window manager juga cukup sebatas itu saja
C-x oagak merepotkan, jadi saya memang sudah menyiapkan pengaturan berikut, tetapi saya tidak merasa paket-paket tambahan seperti ini benar-benar diperlukan(global-set-key (kbd "M-o") #'other-window)Meski begitu, senang ada tulisan referensi sedalam ini, dan tulisan Karthik selalu edukatif dan menarik
Menambahkan catatan pada memo Karthink tentang
windmove-mode, Anda bisa mengaturwindmove-default-keybindingsagar dapat berpindah antarjendela denganCtrl-<tombol panah>(windmove-default-keybindings 'control)Saya juga memasukkannya ke konfigurasi saya, dan juga menyertakannya di starter kit minimalis; ini benar-benar game changer
https://codeberg.org/ashton314/emacs-bedrock
.emacssaya dan ternyata saya memakai persis cara yang sama. Saya lebih menyukainya karena perlu satu tekanan tombol lebih sedikit daripadaC-x Odan lebih fleksibelSaya mengatur Emacs agar tidak membagi frame menjadi beberapa jendela. Mirip seperti cara browser web tidak memecah jendela browser menjadi beberapa viewport
Emacs saya juga tidak membuat frame kedua. Cara implementasinya berubah setiap tahun karena cara lama tidak lagi berfungsi
Dengan cara sekarang, frame memang terbagi dalam situasi tertentu, misalnya ketika Emacs menampilkan buffer
*Completions*, tetapi seingat saya saya tidak perlu memanggildelete-windowsecara manual untuk menghilangkan jendela kedua, dan jendela itu selalu hilang sendiriSaya cukup sering memakai frame dengan banyak jendela. Di macOS terbaru dan Emacs terbaru, kadang frame multijendela tampak berhenti merespons keyboard atau trackpad, dan beberapa kali menekan
Ctrl-Gpun tidak berhasilNamun membuat frame baru dengan
C-x 5 2tetap berfungsi, lalu saya bisa kembali ke frame yang macet dan menutup frame itu denganC-x 5 0Tulisannya sangat mendalam, dan saya sangat suka bahwa penulis meluangkan waktu untuk membuat diagram yang bagus
Tulisan yang bagus, dan saya ingin berbagi paket hebat yang cocok dipakai bersamanya. Bagi saya, zygospore adalah alat yang tak tergantikan
“zygospore membuat
C-x 1(delete-other-window) bisa dikembalikan dengan menekanC-x 1lagi”https://github.com/LouisKottmann/zygospore.el
https://www.emacswiki.org/emacs/WinnerMode
undo?Memang akan terasa aneh, tetapi
C-u C-x 1tampaknya konsistenJika penulis melihat ini, saya ingin menyampaikan bahwa saya senang melihat sedikit penyebutan tentang Acme editor
Saat memanggil
hledger-balance-sheet, saya ingin itu tidak menggantikan.hledger.journalyang sudah ada, melainkan terbuka di kanan dengan lebar 30%Saya ingin
.hledger.journaltetap terbuka di kiri dan tetap berada dalam keadaan terpilih