1 poin oleh GN⁺ 2024-05-13 | 1 komentar | Bagikan ke WhatsApp
  • 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-buffer atau 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, dan winner-mode masing-masing berbagi peran untuk perpindahan siklik, perpindahan arah, pemilihan nomor, pemilihan lewat hint, transformasi layout, dan pemulihan
  • Dengan memanfaatkan ace-window dan 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-buffer bukanlah topik utama
  • Tab, workspace, isolasi buffer, dan persistensi sesi juga berada di luar cakupan inti
  • Alternatif radikal yang berperilaku seperti window manager tersendiri di dalam Emacs juga dikesampingkan dari isi utama
    • Edwina memaksakan layout auto-tiling bergaya master-and-stack ala DWM
    • HyControl menyediakan panel kontrol aksi layout jendela, fitur tampilan grid merata, dan sebagainya
  • 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-window adalah perintah perpindahan jendela dasar yang dipelajari di tutorial Emacs, dengan tombol bawaan C-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-mode diaktifkan, input berulang seperti C-x o o o... atau M-o o o... menjadi mungkin
  • Jika parameter jendela no-other-window diatur, other-window akan melewati jendela tertentu
    • Inilah alasan jendela samping bergaya file manager seperti dired-sidebar atau dirvish-side dikeluarkan dari target other-window
  • Konsep “jendela berikutnya” juga menjadi target bawaan bagi perintah yang bekerja pada jendela lain, seperti scroll-other-window

Perpindahan berbasis arah: windmove

  • windmove adalah library bawaan yang memindahkan fokus jendela berdasarkan arah
    • Ini mirip dengan perpindahan kiri·kanan·atas·bawah yang diharapkan pengguna Vim
    • Pengguna evil-mode juga memakai Windmove secara internal
  • windmove-left, windmove-right, windmove-up, dan windmove-down dapat diikat ke WASD, HJKL, tombol panah, dan sebagainya
  • Perintah windmove-swap-states-left/right/up/down menukar 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

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, dan scroll-other-window dapat 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-mode pada compositor Wayland

Memilih secara instan dengan nomor dan hint

  • winum menampilkan nomor jendela di mode line dan memungkinkan memilih jendela berdasarkan nomor
    • Jika other-window mendekati O(n) dan windmove bergantung pada tata letak spasial, winum mendekati 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
  • Tombol bawaan C-x w <n> bisa terasa panjang, sehingga ada contoh konfigurasi yang memakai M-0 hingga M-9 untuk 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-mode diaktifkan, hint dapat terus ditampilkan di mode line seperti winum
    • Menekan ? akan membuka menu dispatch
  • Kekuatan ace-window bukan 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-mode dan 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, dan flop-frame disebut sebagai perintah yang cukup sering berguna
    • transpose-frame sendiri dinilai kurang praktis karena merupakan transposisi terhadap diagonal utama

window-prefix-map dan pohon jendela

  • window-prefix-map adalah kumpulan perintah manajemen jendela yang terikat ke tombol bawaan Emacs C-x w
  • split-root-window-right dan split-root-window-below membagi root window dari frame
    • Masing-masing di-bind ke C-x w 3 dan C-x w 2
    • Berbeda dari perintah split biasa yang memecah lagi jendela saat ini, ini berguna saat membuat ruang kerja terpisah
  • 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-detach dan tear-off-window memindahkan jendela saat ini ke tab baru atau frame baru
    • Tombol bawaannya, masing-masing C-x w ^ t dan C-x w ^ f, dinilai panjang
    • Dapat diganti dengan aksi dispatch ace-window atau binding mouse

other-window-prefix: mengubah lokasi tampilan perintah berikutnya

  • other-window-prefix adalah perintah bawaan yang terikat ke C-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, dan find-file-other-frame
    • Cukup tambahkan prefix di depan perintah dasar seperti find-file, find-file-read-only, atau switch-to-buffer untuk mengubah lokasi tampilannya saja
  • Dalam contoh Forge, masalah jendela saat ini tertimpa saat menekan RET pada daftar issue dapat dihindari dengan other-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-prefix memaksa buffer dari perintah berikutnya ke jendela saat ini
    • other-frame-prefix membuatnya terbuka di frame baru
    • other-tab-prefix membuatnya terbuka di tab baru

Menyimpan dan memulihkan konfigurasi jendela

  • window-configuration-to-register adalah perintah bawaan untuk menyimpan konfigurasi jendela saat ini ke register, dengan tombol bawaan C-x r w
  • jump-to-register memulihkan konfigurasi yang tersimpan, dengan tombol bawaan C-x r j
  • Pada level Elisp, hasil current-window-configuration dapat disimpan ke variabel lalu diterapkan dengan set-window-configuration
    • Jika disimpan ke disk dengan cara seperti prin1, persist, atau multisession, ini menjadi benih fitur pemulihan lintas sesi
    • Namun, fakta bahwa posisi kursor tiap jendela ikut dipulihkan biasanya bisa menjadi perilaku yang tidak diinginkan
  • Ada juga opsi “oops” yang otomatis menumpuk konfigurasi lama
    • winner-mode: saat tidak memakai tab, membatalkan atau menerapkan ulang perubahan konfigurasi jendela dengan winner-undo dan winner-redo
    • tab-bar-history-mode: menyediakan stack riwayat terpisah untuk tiap tab
    • undelete-frame-mode dan tab-undo: memulihkan frame atau tab yang tidak sengaja ditutup
  • Menggunakan winner-undo sebagai 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-mru yang memakai get-mru-window untuk berpindah ke jendela yang paling baru digunakan
    • Setelah memilih jendela kedua dengan cara apa pun, seperti mouse, ace-window, atau winum, selanjutnya bisa bolak-balik dengan cepat
  • Ada juga cara memperbaiki other-window itu 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-window dapat memakai aw-select untuk 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 dengan ace-window ke frame baru
    • ace-tab-window-detach: memindahkan jendela yang dipilih ke tab baru
  • ace-window-one-command memungkinkan 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
  • ace-window-prefix berperilaku seperti versi yang lebih langsung dari other-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-window dan menampilkannya di sana
    • Binding tombol yang diusulkan adalah C-x 4 o

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-timer memperlakukan 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-mark adalah 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
  • Untuk kasus kedua, alur “berpindah → bertindak → kembali” dapat dibungkus sebagai perintah dan diotomatisasi
    • ace-window-one-command adalah 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-window dan scroll-other-window-down menggulir 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-default untuk 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
  • 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-window memulai pencarian di jendela target gulir, lalu kembali ke jendela semula setelah pencarian selesai
    • Ada contoh penggunaan shell bersama buffer Man
  • next-buffer, previous-buffer, dan switch-to-buffer juga dapat diperluas agar berjalan di jendela lain dengan mengombinasikan argumen prefix dan other-window-for-scrolling
    • Jika membuat keymap untuk repeat-mode, Anda dapat terus memutar atau memilih buffer di jendela lain dengan n, p, dan b

master-mode, scroll-all-mode, with-other-window

  • master-mode menetapkan 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-default di atas
    • Melalui master-says, Anda dapat membuat tombol yang menjalankan aksi arbitrer seperti recenter di buffer slave
  • scroll-all-mode mengikat perilaku gulir semua jendela di dalam frame
    • Berguna ketika ingin melihat beberapa tampilan jendela secara tersinkronisasi
  • Macro with-other-window adalah helper Elisp yang menjalankan kode isi di jendela yang dipilih oleh other-window-for-scrolling
    • Perintah seperti isearch-other-window dan isearch-other-window-backwards dapat dibuat dengan sederhana
    • Dipakai seperti padanan Elisp dari ace-window-one-command yang interaktif

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
  • 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-ring dan global-mark-ring
    • dogears dapat menyediakan UI penelusuran kembali yang lebih terperinci
  • Untuk penetapan posisi manual, Anda dapat memakai point-to-register dan jump-to-register; untuk catatan yang lebih permanen, Anda dapat memakai bookmark-set dan bookmark-jump

Aturan tampilan otomatis dan manajemen popup

  • display-buffer-alist adalah 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-alist dan menyediakan antarmuka Elisp yang sederhana
    • Doom Emacs menyediakan perintah praktis seperti set-popup-rule!
  • 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-buffer miliknya 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-tree mengembalikan tree itu sendiri
    • frame-root-window mengembalikan root
    • Ada window-parent, window-child, dan window-*-sibling
    • Traversal dapat dilakukan dengan walk-window-tree dan walk-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-window hingga ace-window, Avy, Popper, dan display-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

 
GN⁺ 2024-05-13
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.el dan mengikatnya ke C-x 7 untuk 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))))

    • golden-ratio juga bisa dipakai untuk tujuan seperti ini
  • 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, dan frames-only-mode
    Kalau boleh jujur, meski sudah memakai Emacs sekitar 40 tahun, umumnya saya hanya memakai next-window, membuat jendela baru di bawah atau di samping, dan mengandalkan tmux saat bekerja di server jarak jauh

    • Saya juga mirip. Selama 30 tahun, hampir semuanya hanya C-x 1/2/3 dan C-x o
      Namun sebenarnya itu cukup kuat dan mencukupi untuk kebutuhan saya, sampai-sampai saya berharap berbagai tiling window manager juga cukup sebatas itu saja
    • Saya juga mirip. C-x o agak 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 mengatur windmove-default-keybindings agar dapat berpindah antarjendela dengan Ctrl-<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

    • Saya cek .emacs saya dan ternyata saya memakai persis cara yang sama. Saya lebih menyukainya karena perlu satu tekanan tombol lebih sedikit daripada C-x O dan lebih fleksibel
  • Saya 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 memanggil delete-window secara manual untuk menghilangkan jendela kedua, dan jendela itu selalu hilang sendiri

    • Browser web juga sebenarnya bisa membagi jendela seperti itu jika browsernya memungkinkan melihat beberapa halaman sekaligus, seperti Vivaldi
    • Saya penasaran apakah mencegah frame dibagi menjadi beberapa jendela dimaksudkan untuk menyelesaikan masalah tertentu
      Saya 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-G pun tidak berhasil
      Namun membuat frame baru dengan C-x 5 2 tetap berfungsi, lalu saya bisa kembali ke frame yang macet dan menutup frame itu dengan C-x 5 0
  • Tulisannya 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 menekan C-x 1 lagi”
    https://github.com/LouisKottmann/zygospore.el

    • Jika ingin mengulang atau membatalkan semua perubahan konfigurasi jendela, winner mode layak dilihat
      https://www.emacswiki.org/emacs/WinnerMode
    • Idealnya, bukankah itu seharusnya undo?
      Memang akan terasa aneh, tetapi C-u C-x 1 tampaknya konsisten
  • Jika 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.journal yang sudah ada, melainkan terbuka di kanan dengan lebar 30%
    Saya ingin .hledger.journal tetap terbuka di kiri dan tetap berada dalam keadaan terpilih