1 puan yazan GN⁺ 2024-05-13 | 1 yorum | WhatsApp'ta paylaş

Emacs pencere yönetimine genel bakış

Pencere yönetiminin itibarı ve potansiyeli

  • Emacs'in pencere yönetiminin itibarı pek iyi değildir
  • Bunun büyük kısmı, son derece esnek ve ayrıntılı bir yerleşim sistemi ile kaba kontrolün birleşmesinden kaynaklanır
  • Bu da pencereleri ele almak için daha iyi metaforlar ve affordance'lar sunan araçlar geliştirmek ve kullanmak için alan bırakır

Temel pencere yönetimi seçenekleri

other-window ve "sonraki pencere"

  • other-window (C-x o), temel bir pencere değiştirme deneyimi sunar
  • Bu, Emacs eğitiminde öğretilir ve pencere sayısı az olduğunda iyi çalışır
  • Pencere seçimi tüm frame boyunca (kabaca) saat yönünde döner

windmove

  • windmove, yönlere göre pencereler arasında odağı taşımak ve tamponları pencereler arasında taşımak için yerleşik bir Emacs kütüphanesidir
  • Vim kullanıcılarının beklediği türden bir özelliktir ve evil-mode kullanıcıları zaten Windmove kullanmaktadır
  • windmove-left, -right, -up, -down, yönlerle ilişkilendirilmiş tuşlara bağlanarak kullanılır

frames-only-mode

  • frames-only-mode, Emacs pencere işlemesini işletim sistemine bırakmanıza olanak tanır
  • Tüm tamponları yeni frame'lerde açarsanız iş pencere yöneticisine kalır
  • Bu, Emacs tamponlarını işletim sistemi pencereleriyle eşdeğer hale getirir ve aynı tuşlarla yönetilmesini sağlar

winum-mode

  • Winum, n pencere arasında geçiş için gereken çabanın O(n) (other-window) seviyesinden O(√n) (windmove) ve ardından O(1) seviyesine doğal evrimidir
  • Mod satırına pencere numaraları ekler, böylece numarayla pencere seçebilirsiniz
  • Minibuffer etkin olduğunda her zaman 0 numarası atanır

ace-window

  • ace-window, klavye tabanlı Emacs pencere kontrolünün zirvesidir
  • Her pencerenin üst kısmına birer "ipucu" yerleştirir ve ilgili tuşa bastığınızda odak o pencereye geçer
  • Pencereyi genel bir yöntemle "seçersiniz" ve o pencereyle ne yapacağınıza kullanıcı karar verir
  • Pencere silme, taşıma veya değiştirme, bölme, tampon gösterme gibi yerleşik işlemlerin yanı sıra özel işlemler de eklenebilir

Fare kullanımı

  • Pencere yönetiminde fare kullanmanın avantajları anında ve açıktır
  • Pencere seçimi temel fare kullanımının doğal bir uzantısıdır ve pencere yeniden boyutlandırma basittir
  • Bağlam menüleri ve sürükle-bırak desteği oldukça sezgiseldir
  • Dezavantajlarını hafifletmek adına, zaten başka işler için fare kullanıyorsanız Emacs'i fareyle kullanmak pratikte en az dirençli yoldur

transpose-frame (döndürme, çevirme ve yansıtma)

  • transpose-frame, bir frame içindeki pencere yerleşimini döndürmek veya yansıtmak için komutlar sunar
  • rotate-frame, flip-frame, flop-frame uygun tuşlara bağlanarak sık kullanılır

window-prefix-map

  • window-prefix-map, varsayılan olarak C-x w kısayoluna bağlıdır ve bazı kullanışlı pencere yönetimi komutlarını bir araya toplar
  • split-root-window-right ve split-root-window-below, frame'in kök penceresini böler
  • tab-detach ve tear-off-window, pencereyi yeni bir sekmeye veya yeni bir frame'e taşımak için kullanışlı komutlardır

other-window-prefix

  • other-window-prefix, pencere seçimini tampon gösteriminden ayırmanın bir yolunu sunar ve pencereyle ilgili üç can sıkıcı durumu çözer
  • Birçok Emacs komutu varsayılan eylem, tampon ve pencereyi sıkı şekilde birbirine bağlar. other-window-prefix ile komutun tamponunu başka bir pencerede gösterebilirsiniz
  • other-window-prefix, bağlantılar gibi nesneleri etkinleştirirken pencere seçmenizi sağlar
  • other-window-prefix, her paket yazarının çalışma biçimine uyum sağlamaya veya özelleştirme yapmaya gerek kalmadan "bağlantı" türü nesneleri tekdüze biçimde açmanızı sağlar

Pencere yapılandırmasını kaydetme ve geri yükleme

  • window-configuration-to-register biraz hantal bir araçtır ama büyük kırmızı bir sıfırlama düğmesi olarak mükemmeldir
  • İstediğiniz zaman bu komutla geçerli pencere yapılandırmasını bir register'a kaydedip ardından jump-to-register ile geri yükleyebilirsiniz
  • winner-mode ile Emacs'in geçmiş pencere düzenlerinin bir yığınını tutmasını sağlayabilirsiniz

Derinlemesine inceleme

İleri geri gitme yöntemleri

  • Aynı anda kaç pencere açık olursa olsun, çoğu durumda sadece iki pencere arasında geçiş yapmanız gerekir
  • other-window-mru komutunu kullanarak pencere çiftleri arasında geçiş yapabilirsiniz

other-window iyileştirmeleri

  • Tek bir pencere varsa other-window komutunu frame'i bölecek şekilde ayarlayabilirsiniz
  • Pencereleri mekânsal sıralama yerine son kullanım sırasına göre döndürecek şekilde değiştirebilirsiniz (switchy-window paketi)
  • Her çağrılışta pencere değiştirme yönünü tersine çevirerek iki pencere arasında doğal biçimde sırayla geçiş yapmasını sağlayabilirsiniz

ace-window dispatch ile pencere büyüsü

  • ace-window, pencereler için completing-read'in dize listeleri için yaptığı işleve benzer bir rol oynar
  • aw-select, her türlü işlemi her türlü pencerede çağırmak için gereken üç adımın ilk ikisi olan filtreleme ve seçim için idealdir
  • ace-window-one-command, ace-window ile bir pencere seçmenizi ve ardından o pencerede herhangi bir basit komutu çalıştırmanızı sağlar
  • ace-window-prefix, other-window-prefix'e benzer ama bir sonraki komutun tamponunu gösterecek pencereyi açıkça seçmenizi sağlar

Gerçekten pencere değiştirmek gerekiyor mu?

  • Avy ile pencereden bağımsız gezinme, daha genel bir fikrin özel bir örneğidir
  • Metin kapsayıcıları olarak pencereler gereksiz bir soyutlama olabilir
  • mark-ring ve global-mark-ring, gezindiğiniz yerleri izleyerek gerektiğinde pencereler arasında dolaşmanıza olanak tanır
  • point-to-register ve jump-to-register ile daha sonra gidilecek konumları elle sabitleyebilirsiniz
  • Yer imleri oluşturup onlara gitmek, Emacs'in ya da kullanıcının anlamlı bulduğu konumlar arasında pencereden bağımsız gezinmek için birçok seçenek sunar

Pencerelerle etkileşime girmemek için pencere işleme

  • display-buffer-alist ve otomatik pencere davranışları kullanılarak köstebek vurma benzeri pencere sorunu çözülebilir
  • Her gün Emacs'te gördüğünüz her tür tampon için kurallar tanımlarsanız pencere yönetiminin büyük kısmı çözülür
  • display-buffer-alist ile ilgili sorun çalışmaması değil, çok fazla emek gerektirmesidir
  • Shackle paketi, display-buffer-alist'in tuhaflıklarını örter ve pencere kurallarını belirtmek için sadeleştirilmiş bir elisp arayüzü sunar
  • Emacs dağıtımları genellikle bu tür ayarları tanımlamak için basit arayüzler sağlar

Popper, Popwin, shell-pop ve vterm-toggle

  • Popwin ve Popper, tüm tamponların eşit yaratılmadığı gözlemine dayanır
  • Bu paketlerle yardımcı pencere kullanan açılır tamponları tanımlayabilir ve gerektiğinde bu pencereleri çağırıp kapatabilirsiniz

Eksik parçalar

window-tree

  • Emacs'in pencereleri temsil etme biçimi ile yukarıda tartışılan yaklaşımlarla pencereleri işleme biçimi arasında temel bir fark vardır
  • Bir frame içindeki pencereler ağaç yapısında düzenlenir; yaprak düğümler "gerçek" pencereler, diğerleri ise "iç" pencerelerdir
  • Pencere ağacı işlemleri için komutlar eklemek birçok yeni olasılığın önünü açar

Döşemeli pencere yöneticisi bütünleştiricisi

  • Emacs'in pencere-ağacı modeli, i3 veya bspwm gibi manuel döşemeli pencere yöneticilerinin modeliyle neredeyse aynıdır
  • Döşemeli bir pencere yöneticisinin içinde neden başka bir döşemeli pencere yöneticisi kullanıldığı doğal olarak sorgulanır
  • Emacs'te tüm pencere yöneticileriyle entegrasyon için daha temiz ve birleşik bir arayüz sunmak işleri çok daha kolaylaştırabilir

Görünüm

  • Pencereleri değiştirme, taşıma, atlama, oluşturma, silme ve işleme yöntemleri; komut çağırırken anında pencere gösterimini kontrol etmenin çeşitli yolları; pencerelerde çalışmanın ve pencereleri hiç düşünmemenin yolları vardır
  • Pencere yönetimi karmaşıktan ziyade açıktır
  • Emacs malzemeleri ve bazı yönlendirmeleri sunar; bu malzemeler kendi başına temel bir öğün olarak kullanılabilir
  • Ancak biraz pişirme ile lezzetli bir şey ortaya çıkarabiliriz

GN⁺ görüşü

  • Pencere yönetimi, Emacs'in en büyük zayıflıklarından biridir ve kullanıcı dostu değildir. Özellikle yeni başlayanlar için kafa karıştırıcı olabilir.
  • Sunulan yöntemler Emacs'in pencere yönetimi sorunlarını hafifletebilir, ancak temel bir çözüm değildir. Daha sezgisel ve kullanımı kolay bir pencere yönetim sistemine ihtiyaç vardır.
  • Emacs'in pencere yönetimi çok

1 yorum

 
GN⁺ 2024-05-13
Hacker News görüşü

Aşağıda Hacker News yorumlarının özeti yer alıyor:

  • İki pencereyi %70'e %30 oranında yeniden boyutlandırmak için özel bir Elisp fonksiyonunun nasıl kullanılacağı anlatılıyor. Lisp kodu da veriliyor.
  • ace-window, ace-window-display-mode, frames-only-mode gibi paketlerin kullanılabileceği öneriliyor.
  • Emacs'i tek pencere modunda kullandığını ve kaçınılmaz olarak birden fazla pencere oluşsa bile bunların otomatik olarak kapandığını söyleyen bir görüş de var.
  • windmove-modeu etkinleştirip (windmove-default-keybindings 'control) ile Ctrl+yön tuşları üzerinden pencere geçişi yapılabilmesini sağlayan bir ipucu paylaşılıyor.
  • zygospore paketi sayesinde C-x 1 ile pencereyi kapattıktan sonra, tekrar C-x 1e basarak önceki pencere düzeninin geri yüklenebileceği anlatılıyor.
  • Acme editöründen bahsedilmesini öven bir yorum da var.
  • hledger-balance-sheet fonksiyonu çalıştırıldığında journal dosyasını solda açık tutup, sonucu sağda %30 boyutunda bölerek göstermenin bir yolu soruluyor.