1 poin oleh GN⁺ 2024-05-13 | 1 komentar | Bagikan ke WhatsApp

Gambaran umum tentang manajemen jendela Emacs

Reputasi dan potensi manajemen jendela

  • Manajemen jendela Emacs memiliki reputasi yang kurang baik
  • Ini sebagian besar merupakan hasil dari gabungan sistem tata letak yang sangat fleksibel dan terperinci dengan kontrol yang kasar
  • Hal ini menyisakan ruang untuk membuat dan menggunakan alat yang menyediakan metafora dan affordance yang lebih baik untuk menangani jendela

Opsi dasar manajemen jendela

other-window dan "jendela berikutnya"

  • other-window (C-x o) memberikan pengalaman dasar untuk berpindah jendela
  • Ini diajarkan dalam tutorial Emacs, dan bekerja baik saat jumlah jendela sedikit
  • Pemilihan jendela berputar mengelilingi seluruh frame secara (kurang lebih) searah jarum jam

windmove

  • windmove adalah pustaka Emacs bawaan untuk memindahkan fokus antar jendela berdasarkan arah dan memindahkan buffer antar jendela
  • Ini adalah fungsi yang diharapkan oleh pengguna Vim, dan pengguna evil-mode kemungkinan sudah memakai Windmove
  • Biasanya digunakan dengan mengikat windmove-left, -right, -up, -down ke tombol yang terkait dengan arah

frames-only-mode

  • frames-only-mode memungkinkan penanganan jendela Emacs diserahkan ke OS
  • Jika semua buffer dibuka di frame baru, ini menjadi tugas window manager
  • Ini membuat buffer Emacs setara dengan jendela OS sehingga bisa dikelola dengan tombol yang sama

winum-mode

  • Winum adalah perkembangan alami dari usaha berpindah di antara n jendela dari O(n) (other-window) ke O(√n) (windmove), lalu ke O(1)
  • Ini menambahkan nomor jendela ke mode line sehingga jendela bisa dipilih berdasarkan nomor
  • Saat minibuffer aktif, nomor 0 selalu dialokasikan kepadanya

ace-window

  • ace-window adalah bentuk paling canggih dari kontrol jendela Emacs berbasis keyboard
  • Ini menempatkan "petunjuk" di bagian atas setiap jendela, dan saat tombol terkait ditekan, fokus berpindah ke jendela tersebut
  • Jendela "dipilih" dengan cara umum, lalu pengguna memutuskan apa yang akan dilakukan terhadap jendela itu
  • Selain operasi bawaan seperti menghapus, memindahkan atau menukar, membelah, dan menampilkan buffer, pengguna juga bisa menambahkan operasi kustom

Menggunakan mouse

  • Keuntungan menggunakan mouse untuk manajemen jendela langsung dan jelas
  • Memilih jendela adalah perpanjangan alami dari penggunaan mouse dasar, dan mengubah ukuran jendela juga sederhana
  • Dukungan menu konteks dan drag-and-drop sangat intuitif
  • Untuk mengurangi kekurangannya, jika mouse sudah digunakan untuk tugas lain, mengoperasikan Emacs dengan mouse justru bisa menjadi jalur dengan hambatan paling kecil

transpose-frame (rotate, flip, dan flop)

  • transpose-frame menyediakan perintah untuk memutar atau mencerminkan tata letak jendela dalam frame
  • rotate-frame, flip-frame, flop-frame sering digunakan dengan mengikatnya ke tombol yang sesuai

window-prefix-map

  • window-prefix-map secara default diikat ke C-x w dan mengumpulkan beberapa perintah manajemen jendela yang berguna
  • split-root-window-right dan split-root-window-below membelah jendela root dari frame
  • tab-detach dan tear-off-window adalah perintah praktis untuk memindahkan jendela ke tab baru atau frame baru

other-window-prefix

  • other-window-prefix menyediakan cara untuk memisahkan pemilihan jendela dari penampilan buffer, dan menyelesaikan tiga ketidaknyamanan terkait jendela
  • Banyak perintah Emacs menggabungkan operasi utama, buffer, dan jendela dengan sangat erat. Dengan other-window-prefix, buffer dari perintah dapat ditampilkan di jendela lain
  • Dengan other-window-prefix, jendela bisa dipilih saat mengaktifkan objek seperti tautan
  • Dengan other-window-prefix, objek "tautan" bisa dibuka secara seragam tanpa perlu menyesuaikan atau mengkustomisasi perilaku tiap penulis paket

Menyimpan dan memulihkan konfigurasi jendela

  • window-configuration-to-register adalah alat yang agak tumpul, tetapi sempurna sebagai tombol reset merah besar
  • Kapan saja, perintah ini bisa digunakan untuk menyimpan konfigurasi jendela saat ini ke register lalu memulihkannya dengan jump-to-register
  • Dengan winner-mode, Anda bisa meminta Emacs memelihara stack susunan jendela masa lalu

Penjelajahan mendalam

Cara bolak-balik

  • Terlepas dari berapa banyak jendela yang terbuka pada saat yang sama, dalam banyak kasus Anda hanya perlu berpindah di antara dua jendela
  • Perintah other-window-mru bisa digunakan untuk beralih di antara pasangan jendela

Meningkatkan other-window

  • other-window bisa dibuat untuk membelah frame jika hanya ada satu jendela
  • Jendela bisa diputar berdasarkan urutan penggunaan terakhir alih-alih urutan spasial (switchy-window package)
  • Arah perpindahan jendela bisa dibalik setiap kali dipanggil sehingga pergantian di antara dua jendela terasa alami

Menggunakan sihir jendela dengan dispatch ace-window

  • ace-window melakukan terhadap jendela hal yang sama seperti completing-read terhadap daftar string
  • aw-select ideal untuk dua dari tiga langkah pertama (pemfilteran dan pemilihan) saat memanggil semua operasi pada semua jendela
  • ace-window-one-command memungkinkan memilih jendela dengan ace-window lalu menjalankan perintah sederhana apa pun pada jendela tersebut
  • ace-window-prefix mirip dengan other-window-prefix, tetapi memungkinkan pemilihan eksplisit jendela tempat buffer dari perintah berikutnya akan ditampilkan

Apakah perlu berpindah jendela?

  • Perpindahan yang tidak terikat pada jendela dengan Avy adalah kasus khusus dari gagasan yang lebih umum
  • Sebagai kontainer teks, jendela mungkin merupakan abstraksi yang tidak perlu
  • mark-ring dan global-mark-ring melacak lokasi yang telah dikunjungi sehingga memungkinkan perpindahan melintasi jendela bila perlu
  • Dengan point-to-register dan jump-to-register, Anda bisa menyematkan secara manual lokasi yang ingin dikunjungi nanti
  • Membuat bookmark dan berpindah ke sana memberi banyak opsi untuk menjelajah lintas jendela ke lokasi bermakna yang dikenali oleh Emacs atau oleh pengguna

Menangani jendela agar tidak perlu berinteraksi dengan jendela

  • display-buffer-alist dan perilaku jendela otomatis bisa digunakan untuk menyelesaikan masalah jendela yang muncul-tenggelam seperti permainan whack-a-mole
  • Menetapkan aturan untuk semua jenis buffer yang Anda lihat setiap hari di Emacs akan menyelesaikan sebagian besar manajemen jendela
  • Masalah dengan display-buffer-alist bukan karena tidak berfungsi, melainkan karena membutuhkan banyak pekerjaan
  • Paket Shackle menutupi keanehan display-buffer-alist dan menyediakan antarmuka elisp yang disederhanakan untuk menentukan aturan jendela
  • Distribusi Emacs umumnya menyediakan antarmuka sederhana untuk menentukan pengaturan semacam ini

Popper, Popwin, shell-pop, dan vterm-toggle

  • Popwin dan Popper didasarkan pada pengamatan bahwa tidak semua buffer diciptakan setara
  • Paket-paket ini memungkinkan Anda menetapkan buffer popup yang menggunakan jendela sekunder, lalu memanggil dan menutup jendela itu sesuai kebutuhan

Bagian yang hilang

window-tree

  • Ada perbedaan mendasar antara cara Emacs merepresentasikan jendela dan cara pendekatan yang dibahas di atas memanipulasinya
  • Jendela dalam sebuah frame disusun sebagai pohon, dengan node daun sebagai jendela "nyata" dan sisanya sebagai jendela "internal"
  • Menambahkan perintah untuk operasi window-tree akan membuka banyak kemungkinan baru

Integrator window manager tiling

  • Model window-tree Emacs hampir identik dengan model window manager tiling manual seperti i3 atau bspwm
  • Secara alami muncul pertanyaan mengapa harus menggunakan window manager tiling lain di dalam window manager tiling
  • Menyediakan antarmuka yang lebih bersih dan terpadu di Emacs untuk integrasi dengan semua window manager dapat membuat hal ini jauh lebih mudah

Prospek

  • Ada banyak cara untuk berpindah, bergerak, melewati, membuat, menghapus, dan memanipulasi jendela, berbagai cara untuk mengendalikan tampilan jendela secara langsung saat memanggil perintah, serta cara untuk bekerja di dalam jendela dan bahkan sama sekali tidak memikirkan jendela
  • Manajemen jendela bukan rumit, melainkan terbuka
  • Emacs menyediakan bahan dan beberapa petunjuk, dan bahan-bahan itu sendiri bisa dipakai sebagai hidangan dasar
  • Namun dengan sedikit olahan, kita bisa membuat sesuatu yang lezat

Pendapat GN⁺

  • Manajemen jendela adalah salah satu kelemahan terbesar Emacs dan tidak ramah pengguna. Terutama bagi pemula, hal ini bisa membingungkan.
  • Metode-metode yang disajikan dapat meringankan masalah manajemen jendela Emacs, tetapi tidak menjadi solusi mendasar. Diperlukan sistem manajemen jendela yang lebih intuitif dan lebih mudah digunakan.
  • Manajemen jendela Emacs sangat

1 komentar

 
GN⁺ 2024-05-13
Komentar Hacker News

Berikut rangkuman komentar di Hacker News:

  • Memperkenalkan cara menyesuaikan dua jendela ke ukuran 70% berbanding 30% melalui fungsi Elisp kustom. Kode Lisp juga disertakan.
  • Menyarankan untuk mencoba paket seperti ace-window, ace-window-display-mode, dan frames-only-mode.
  • Ada juga pendapat untuk menggunakan Emacs dalam mode jendela tunggal, dan meskipun beberapa jendela terpaksa dibuat, jendela tersebut akan ditutup secara otomatis.
  • Dibagikan tip untuk mengaktifkan windmove-mode dan memungkinkan perpindahan jendela dengan Ctrl+tombol arah melalui (windmove-default-keybindings 'control).
  • Diperkenalkan bahwa dengan paket zygospore, setelah menutup jendela dengan C-x 1, menekan C-x 1 lagi dapat memulihkan tata letak jendela sebelumnya.
  • Ada juga komentar yang memuji penyebutan editor Acme.
  • Ada pertanyaan tentang cara saat menjalankan fungsi hledger-balance-sheet, file journal tetap dibuka di sebelah kiri, lalu hasilnya ditampilkan di sebelah kanan dalam panel terpisah berukuran 30%.