Emacs Pencere Yönetimi Ansiklopedisi
(karthinks.com)- Emacs’ta pencere yönetimi, buffer ile pencerenin ayrıldığı esnek bir yapının üzerine biraz kaba varsayılan işlemlerin eklenmiş hâlidir; bu yüzden kullanıcının araçları ve alışkanlıkları birleştirerek kendi iş akışını oluşturması gerekir
- Yazının odağı
display-bufferkuralları ya da sekme tabanlı çalışma alanları değil; tek bir Emacs frame’i içinde fokus taşıma, buffer yerleşimi, bölme/silme ve geçici işleri ele alan manuel işlemlerdir other-window,windmove,winum,ace-window, fare,transpose-frame,window-prefix-map,other-window-prefix,winner-mode; döngüsel geçiş, yön bazlı geçiş, numarayla seçim, ipucuyla seçim, düzen dönüşümü ve geri yükleme görevlerini paylaşırace-windowve Avy kullanıldığında belirli bir pencere seçildikten sonra komut çalıştırılabilir ya da metin konumuna doğrudan atlanarak pencere değiştirme ihtiyacının kendisi azaltılabilir- Emacs’ta pencere yönetimi karmaşık ve sabit bir sistemden çok açık bir probleme yakındır;
display-buffer-alist, Popper/Popwin, pencere ağacı işlemleri ve tiling WM entegrasyonu güçlü oldukları kadar ayar maliyeti ve boşluklar da taşır
Emacs’ta pencere yönetimi ne anlama gelir?
- Emacs’ta pencere (window), frame içindeki bir viewport ya da paneldir; buffer ise bir dosya içeriği olabilen veya olmayabilen kesintisiz bir metin parçasıdır
- Birçok IDE ve editör, bilişsel yükü azaltmak için pencere ve buffer kavramlarını fiilen birleştirir; Emacs ise daha esnek yerleşimler sağlamak için ikisini ayırır
- Aynı dosyayı iki kez görüntülemek kolaydır
- Bir dosyayla doğrudan eşleşmeyen buffer’lar da doğal biçimde ele alınabilir
- Emacs’in indirect buffers özelliği, buffer’ın tamamının “canlı” bir kopyasına yakındır
- Bu ayrık yapı yeni kullanıcıya bir maliyet getirir
- Frame içinde pencereleri istenen konuma yerleştirmek gerekir
- İstenen buffer’ı istenen pencereye koymak gerekir
- Başlarda ayrık yapının sağladığı faydalardan önce işlem yükü göze çarpar
Bu yazının kapsamadığı alanlar
display-buffer’ı tamamen denetleyen otomatik buffer gösterim kuralları ana konu değildirdisplay-bufferAPI’siwindow-parameters, slotlar ve özel pencereler gibi ayrıntılı bilgiler gerektirir- İlgili kaynaklar olarak Mickey Peterson’ın yazısı, Protesilaos Stavrou’nun videosu ve Emacs Lisp manual incelenebilir
- Sekmeler, çalışma alanları, buffer izolasyonu ve oturum kalıcılığı da temel kapsamın dışındadır
- İlgili araçlar arasında tab-bar, tabspaces, eyebrowse, tab-bookmark, desktop.el, persp-mode.el, perspective, project-tab-groups, beframe, activities.el bulunur
- Emacs içinde ayrı bir pencere yöneticisi gibi davranan radikal alternatifler de metnin dışında bırakılır
- Asıl odak manuel ve gündelik işlemlerdir
- Pencere fokusunu değiştirme
- Buffer’ları pencereler arasında taşıma
- Pencereleri bölme ve silme
- Komut çalıştırılırken hedef gösterim penceresini kontrol etme
Temel geçiş: other-window ve “sonraki pencere”
other-window, Emacs öğreticisinde öğrenilen temel pencere değiştirme komutudur; varsayılan tuşuC-x o’dur- Seçim sırası genellikle frame içinde saat yönünde döner
- Pencere sayısı az olduğunda basit ve yeterince kullanışlıdır
- Pencere sayısı arttıkça istenen konuma ulaşmak için komutu birkaç kez çağırmak gerekir
- Pratik ayarlama yöntemleri de vardır
M-ogibi basması daha kolay bir tuşa bağlanabilir- Sayısal argümanla birkaç pencere atlanabilir ya da ters yönde gidilebilir
repeat-modeaçıldığındaC-x o o o...veyaM-o o o...gibi tekrarlı giriş yapılabilir
no-other-windowpencere parametresi ayarlandığındaother-windowbelirli pencereleri atlardired-sidebarveyadirvish-sidegibi dosya yöneticisi tarzı yan pencerelerinother-windowhedeflerinden çıkarılmasının nedeni budur
- “Sonraki pencere” kavramı,
scroll-other-windowgibi başka bir pencere üzerinde işlem yapan komutların varsayılan hedefidir
Yön tabanlı geçiş: windmove
windmove, pencere fokusunu yöne göre taşıyan yerleşik bir kütüphanedir- Vim kullanıcılarının beklediği sol/sağ/yukarı/aşağı hareketine yakındır
evil-modekullanıcıları da içeride Windmove kullanır
windmove-left,windmove-right,windmove-up,windmove-down;WASD,HJKL, yön tuşları vb. tuşlara bağlanarak kullanılabilirwindmove-swap-states-left/right/up/downkomutları, yöne göre pencerelerin buffer’larını takas eder- Bu sırada fokus buffer ile birlikte hareket eder
windmove-delete-*ailesiyle belirli bir yöndeki pencereyi silmek de mümkündür; ancak metin aşağıda diğer yöntemleri daha fazla ele alır- Tiling WM ortamlarında, aynı tuşlarla Emacs içi pencereler ile OS pencereleri arasında geçiş yapacak şekilde entegrasyon sağlanabilir
- Emacs+i3wm entegrasyonu örneği olarak i3 integration bulunur
- qtile için ayar örneği emacs-wm.el dosyasında görülebilir
Emacs pencerelerini OS pencerelerine bırakmak
- frames-only-mode, tüm buffer’ları Emacs penceresi yerine yeni frame’de açarak OS pencere yöneticisinin yönetmesine bırakır
- Bu yaklaşım Emacs buffer’larını OS pencereleriyle aynı düzeyde ele almayı sağlar; böylece ikisi de aynı tuşlarla yönetilebilir
- Avy,
winum,ace-window,scroll-other-windowgibi araçlar yalnızca pencerelere değil, tüm frame’lere de uygulanabilir - Bazı Emacs komutları frame’i serbestçe bölebileceğini varsaydığından istisnai durumlar ortaya çıkabilir
- Özellikle org-mode komutlarında böyle bir eğilim vardır
- Wayland compositor üzerinde
frames-only-modekullanma deneyimim yok
Numara ve ipuçlarıyla anında seçim yapmak
- winum, mode line’da pencere numaralarını gösterir ve pencereleri numarayla seçmeyi sağlar
other-windowO(n)’ye yakın çalışıyor vewindmovemekânsal yerleşime dayanıyorsa,winumnumarayı bildiğinizde O(1) erişime yakındır- Seçim komutunu negatif prefix argümanıyla çağırırsanız ilgili pencereyi siler
- Minibuffer etkinleştiğinde her zaman 0 numarasını alır
- Emacs frame’leri arasında çalışır
- Varsayılan
C-x w <n>tuşu uzun gelebileceğinden, pencere seçimi içinM-0’danM-9’a kadar kullanmayı gösteren bir yapılandırma örneği vardır - ace-window, klavye tabanlı Emacs pencere denetimi için güçlü bir araç olarak ele alınır
- Her pencerenin üzerinde ipuçları gösterir ve ilgili tuşa basarak seçim yapılır
ace-window-display-modeaçılırsa, winum gibi ipuçlarını mode line’da sürekli gösterebilir?tuşuna basınca dispatch menüsü açılır
ace-window’ın güçlü yanı, basit seçimden çok pencereyi seçtikten sonra bir aksiyon çalıştırmaktır- Pencere silme
- Pencere taşıma ve takas etme
- Pencere bölme
- Belirli bir buffer’ı gösterme
- Seçili pencereden ayrılmadan başka bir pencereye işlem uygulama
Fare ve yerleşim dönüşümü
- Emacs’te fare; pencere seçimi, boyutlandırma, bağlam menüleri ve sürükle-bırak için doğal biçimde uygundur
context-menu-modeve menü çubuğu keşfedilebilirliği artırır
- Eliniz zaten klavyeden ayrılmışsa Emacs’i fareyle kullanmak en düşük dirençli yol olabilir
- Fare jestleriyle yapılabilecek işler de vardır
- Frame’i dikey/yatay bölme
- Pencere silme
- Pencere içindeki buffer’lar arasında dolaşma
- Pencereleri sağa/sola takas etme
- Tek bir pencerede son iki buffer arasında geçiş yapma
mouse-autoselect-windowayarlanırsa focus-follows-mouse davranışı açılabilir- transpose-frame, frame’in pencere yerleşimini döndürmeye veya ters çevirmeye yarayan komutlar sağlar
rotate-frame,flip-frame,flop-framesık kullanılabilecek komutlar olarak sayılırtranspose-frame’in kendisi ana köşegene göre transpozisyon yaptığı için pratik kullanımının düşük olduğu değerlendirilir
window-prefix-map ve pencere ağacı
window-prefix-map, Emacs’in varsayılanC-x wtuşuna bağlı pencere yönetimi komutları kümesidirsplit-root-window-rightvesplit-root-window-below, frame’in kök penceresini böler- Sırasıyla
C-x w 3veC-x w 2tuşlarına bağlıdır - Normal bölme komutları geçerli pencereyi daha da parçalarken, bunlar ayrı bir çalışma alanı oluştururken kullanışlıdır
- Sırasıyla
- Emacs pencereleri ağaç yapısı halinde yerleştirilir
- Gerçek pencereler leaf düğümlerdir
- Bölme işlemi bir leaf’i iki pencerenin ebeveyn düğümüne dönüştürür
- i3 veya bspwm gibi manuel tiling pencere yöneticilerinin yerleşimine benzer
tab-window-detachvetear-off-window, geçerli pencereyi yeni bir sekmeye veya yeni bir frame’e taşır- Varsayılan tuşların sırasıyla
C-x w ^ tveC-x w ^ folduğu ve uzun sayıldığı belirtilir ace-windowdispatch aksiyonlarıyla veya fare bağlarıyla ikame edilebilir
- Varsayılan tuşların sırasıyla
other-window-prefix: Bir sonraki komutun gösterim yerini değiştirmek
other-window-prefix,C-x 4 4’e bağlı yerleşik bir komuttur ve bir sonraki komutun göstereceği buffer’ı sonraki pencerede gösterir- Bu komut, dosya açma, buffer değiştirme, yer imine atlama gibi buffer gösteren komutlarla hedef pencere seçimini birbirinden ayırır
find-file-other-window,find-file-other-tab,find-file-other-framegibi komut ailelerini her seferinde ezberleme ihtiyacını azaltırfind-file,find-file-read-only,switch-to-buffergibi temel komutların önüne prefix koyarak yalnızca gösterim yerini değiştirebilirsiniz
- Forge örneğinde, issue listesindeyken
RET’e basıldığında geçerli pencerenin üzerine yazılması sorunuother-window-prefixile önlenebilir - Magit, Org mode, Notmuch, Elfeed, EWW gibi paketlerde “başka pencerede açma” yöntemleri farklı olduğunda da tek tip bir davranış sağlar
- İlgili prefix’ler de vardır
same-window-prefix, bir sonraki komutun buffer’ını geçerli pencerede göstermeyi zorlarother-frame-prefix, yeni frame’de açtırırother-tab-prefix, yeni sekmede açtırır
Pencere yapılandırmasını kaydetme ve geri alma
window-configuration-to-register, geçerli pencere yapılandırmasını register’a kaydeden varsayılan komuttur; varsayılan tuşuC-x r w’dirjump-to-register, kayıtlı yapılandırmayı geri yükler; varsayılan tuşuC-x r j’dir- Elisp düzeyinde
current-window-configurationsonucunu bir değişkende saklayıpset-window-configurationile uygulayabilirsinizprin1,persist,multisessiongibi yöntemlerle diske kaydedilirse oturumlar arası geri yükleme işlevinin tohumu olur- Ancak her pencerenin imleç konumunun da geri yüklenmesi genellikle istenmeyen bir davranış olabilir
- Geçmiş yapılandırmaları otomatik olarak biriktiren “oops” seçenekleri de vardır
winner-mode: Sekme kullanmıyorsanızwinner-undo,winner-redoile pencere yapılandırması değişikliklerini geri alır veya yeniden uygulartab-bar-history-mode: Her sekme için ayrı bir geçmiş yığını sağlarundelete-frame-modevetab-undo: Yanlışlıkla kapatılan frame veya sekmeleri kurtarır
winner-undo’yu, Emacs bir buffer’ı alakasız bir yerde açtıktan sonra her seferinde toparlamak için kullanmak geçici çözüme yakındır- Temel sorun, buffer gösterim kurallarının istenen şekilde yakalanmamış olmasıdır
Sık gidip gelinen iki pencereye göre optimize etmek
- Gerçek çalışmada ekranda birden fazla pencere olsa da çoğunlukla iki pencere arasında sık gidip gelinir
- Code & REPL
- Code & Grep
- Prose & Notes
- Listing & Item
- Diğer pencereler; dokümanlar, debug bilgisi, loglar, komut çıktısı, içindekiler, dosya gezgini, önizleme gibi sık bakılan ama neredeyse hiç geçiş yapılmayan referans alanları olabilir
get-mru-windowkullanarak en son kullanılan pencereye geçiş yapanother-window-mruörneği vardır- İkinci pencereyi fare,
ace-window,winumvb. herhangi bir yöntemle seçseniz de sonrasında hızlıca gidip gelebilirsiniz
- İkinci pencereyi fare,
other-window’ın kendisini iyileştirme yöntemleri de vardır- Yalnızca bir pencere varsa otomatik olarak bölmesini sağlamak
- switchy-window gibi son kullanım sırasına göre dolaşmak
other-window-alternatinggibi, ardışık çağrı olmadığında her seferinde yönü ters çevirerek iki pencere arasında gidip gelmeyi doğal hale getirmek
ace-window’u komut çalıştırma temelli genişletmek
ace-window,aw-selectaracılığıyla belirli bir pencereyi seçme aşamasını ayrı olarak kullanabiliraw-select’in döndürdüğü pencere üzerinde istediğiniz işlemi gerçekleştirirseniz “pencere seç → işlem çalıştır → özgün pencereyi koru” kalıbını oluşturabilirsiniz- Örnek komutlar şunlardır
ace-tear-off-window:ace-windowile seçilen pencereyi yeni bir frame olarak ayırırace-tab-window-detach: Seçilen pencereyi yeni bir sekmeye taşır
ace-window-one-command, seçilen pencerede rastgele tek bir komut çalıştırmayı sağlar- Önce
ace-windowile pencere seçilir - Tuş dizisi okunup ilgili komut çalıştırılır
- Özgün seçili pencereyi değiştirmeden başka bir pencereye işlem uygulanabilir
- Önce
ace-window-prefix,other-window-prefix’in daha doğrudan bir sürümü gibi davranır- Bir sonraki komutun göstereceği buffer için hedef pencereyi
ace-windowile doğrudan seçer - Gerekirse
ace-windowaksiyonuyla anında yeni pencere oluşturup orada gösterebilir - Önerilen tuş bağı
C-x 4 o’dur
- Bir sonraki komutun göstereceği buffer için hedef pencereyi
Pencereyi mutlaka değiştirmek gerekir mi
- Pencere değiştirmenin amacı genel olarak ikiye ayrılır
- Switch and stay: hedef pencerede düzenlemeye veya çalışmaya devam etmek
- Switch and return: kısa süreliğine kaydırma, arama, kopyalama, silme gibi işler yapıp özgün konuma dönmek
- İlk durumda Avy, pencere değiştirmeyi ve imleç hareketini tek bir işlemde birleştirebilir
avy-goto-char-timer, ekranda görünen birden çok Emacs penceresini ve frame’i tek bir atlama adayı havuzu gibi ele alır- Belirli bir dizgeye veya karakter konumuna atlarken pencere de otomatik olarak değişir
- Avy pencereler ve frame’ler arasında geçmiyorsa
avy-all-windowsayarını kontrol etmek gerekir
pop-global-mark, önceki konuma dönmenin bir yoludur; gerekirse pencere değişimi de beraberinde gerçekleşebilir- Varsayılan olarak mevcut pencerede buffer değiştirdiği için,
pop-to-bufferkullanmasını sağlayan bir advice vardır
- Varsayılan olarak mevcut pencerede buffer değiştirdiği için,
- İkinci durumda “değiştir → eylem yap → geri dön” akışı bir komutla sarılıp otomatikleştirilebilir
ace-window-one-commandbunun genel amaçlı bir yoludur- Belirli eylemler özel komutlar veya makrolar olarak yapılabilir
Başka pencerede kaydırma, arama ve buffer değiştirme
scroll-other-windowvescroll-other-window-down, mevcut pencereden ayrılmadan başka bir pencereyi kaydırır- Varsayılan hedef, mevcut pencereden saat yönündeki “sonraki pencere”dir
- Üç veya daha fazla pencere varsa beklenen referans penceresi yerine başka bir pencere kaydırılabilir
other-window-scroll-defaultayarlanarak kaydırma hedefini seçme kuralı değiştirilebilirget-lru-windowkullanılırsa en uzun süredir kullanılmayan pencere kaydırılırget-mru-windowkullanılırsa son kullanılan pencere hedef alınabilir
other-window-scroll-bufferayarlanırsa belirli bir buffer’ın gösterildiği pencere kaydırma hedefi olarak belirtilebilir- Bu çoğunlukla paket yazarları için yararlı bir seçenek olarak ele alınır
isearch-other-windowörneği, kaydırma hedefi olan pencerede aramayı başlatıp arama bittikten sonra özgün pencereye dönme biçimindedir- Shell ve Man buffer’ını birlikte kullanan bir örnek vardır
next-buffer,previous-buffer,switch-to-bufferda prefix argümanı ileother-window-for-scrollingbirleştirilerek başka pencerede çalışacak şekilde genişletilebilirrepeat-modeiçin bir keymap yapılırsan,p,bile başka penceredeki buffer’lar art arda döndürülebilir veya seçilebilir
master-mode, scroll-all-mode, with-other-window
master-mode, mevcut buffer’ı “master”, başka bir buffer’ı “slave” olarak belirleyip mevcut konumdan ayrılmadan slave buffer’a eylem gönderebilir- Varsayılan olarak yukarıdaki
other-window-scroll-defaultyöntemine göre daha az şeffaf bir alternatif olarak değerlendirilir master-saysüzerinden slave buffer’darecentergibi isteğe bağlı eylemleri çalıştıran tuşlar yapılabilir
- Varsayılan olarak yukarıdaki
scroll-all-mode, frame içindeki tüm pencerelerin kaydırma davranışını birbirine bağlar- Birden çok pencere görünümünü senkronize ederek görmek istendiğinde yararlıdır
with-other-windowmakrosu,other-window-for-scrollingtarafından seçilen pencerede gövde kodunu çalıştıran bir Elisp yardımcı aracıdırisearch-other-window,isearch-other-window-backwardsgibi komutlar kolayca yapılabilir- Etkileşimli
ace-window-one-commandin Elisp karşılığı gibi kullanılır
Pencere sayısını azaltma stratejisi
- Modern editör arayüzleri genellikle tek bir ana pencere, üstte tab bar, solda dizin veya içindekiler yan paneli, isteğe bağlı sağ panel ve altta terminal düzenine yakınsar
- Emacs’ta da böyle bir düzen yapılabilir; ancak ekranı tek bir buffer’a odaklayıp pencere değiştirmeyi buffer değiştirmeyle ikame etmek de mümkündür
- Yalnızca iki pencereye kadar gevşetilirse, basitliğin büyük kısmı korunurken ikinci pencere canlı referans materyali olarak kullanılabilir
- Emacs varsayılan ayarları,
scroll-other-windowgibi komutlarla bu kalıbı oldukça iyi destekler
- Emacs varsayılan ayarları,
- Pencereleri yalnızca metin kapsayıcıları olarak görüp yok sayma stratejisi de vardır
- Avy ile ekrandaki metin konumuna doğrudan atlanır
mark-ring,global-mark-ringile önceki konumların izi geri sürülür- dogears daha ayrıntılı bir geri izleme arayüzü sağlayabilir
- Elle konum sabitlemek için
point-to-registervejump-to-registerkullanılabilir; daha kalıcı kayıtlar içinbookmark-setvebookmark-jumpkullanılabilir
Otomatik gösterim kuralları ve popup yönetimi
display-buffer-alist, Elisp kodu bir buffer’ı göstermeye çalıştığında buffer ile kuralları eşleştirip gösterim biçimini belirleyen değişkendir- Teoride, her gün görülen her buffer türü için boyut, konum, rol ve odak kuralları yapılırsa pencere yönetiminin önemli bir kısmı çözülür
- Sorun ayar maliyetidir
- Buffer ve mod predicate’leri
- Pencere türü ve slot
- display-buffer action fonksiyonu
- Pencere parametreleri
- “Pencere düzenime dokunma” gibi basit bir niyeti kolayca ifade etmek zordur
- Yardımcı araçlar da vardır
- Shackle,
display-buffer-alistkarmaşıklığını örter ve basit bir Elisp arayüzü sunar - Doom Emacs,
set-popup-rule!gibi kolaylık komutları sağlar
- Shackle,
- Popwin ve Popper, tüm buffer’ların aynı olmadığı gözleminden yola çıkar
- Ana çalışma buffer’ları ile geçici popup buffer’larını ayırır
- Belgeler, shell, iş durumu, derleme sonuçları, arama sonuçları, mesajlar vb. küçük yardımcı pencerelerde açılıp kolayca kapatılabilir veya aralarında dolaşılabilir hale getirilir
- Popper, belirlenmiş popup buffer’larını tek tuşla yukarı kaldırıp indirmeye odaklanır
- Popwin daha eski ve kapsamlı bir uygulamadır, ancak kendi
display-bufferayarlarını da birlikte paketler - Yalnızca shell’i hızlıca açıp kapatmak istiyorsanız shell-pop veya vterm-toggle yeterli olabilir
Eksik parça: pencere ağacı işlemleri
- Emacs, frame içindeki pencereleri ağaç olarak temsil eder; ancak çoğu kullanıcı komutu ağaç yapısına değil yalnızca uzamsal konuma bakarak çalışır
- Bu uyumsuzluk nedeniyle bölme/silme sırasında beklenenden farklı davranışlar ortaya çıkabilir veya oluşturulabilecek bölme yapıları kısıtlanabilir
window-treegibi varsayımsal bir paket olsaydı iç düğüm düzeyinde işlemler mümkün olabilirdi- Frame’in yalnızca bir bölümünü bölme, transpoze etme, aynalama
- Birden çok pencereyi kısmi yapı olarak seçme
- Seçilen bölümü tab’a veya frame’e aktarma
- Kısmi yapıyı çoğaltma veya kaydetme
- Belirli bir ağaç branch’ini
display-bufferailesi komutlardan koruma
- Halihazırda var olan Elisp öğeleri de vardır
window-tree, ağacın kendisini döndürürframe-root-window, kökü döndürürwindow-parent,window-child,window-*-siblingvardırwalk-window-tree,walk-windowsile dolaşılabilir
- Eksik noktalar da açıktır
- Genel split/delete dışında ağacı dönüştüren temel fonksiyon yoktur
- İç pencereyi seçme kavramı olmadığından bunun arayüzde simüle edilmesi gerekir
Eksik parça: döşemeli WM entegrasyonu
- Emacs’in pencere ağacı modeli, i3 veya bspwm gibi manuel döşemeli pencere yöneticilerine çok benzer
- i3, bspwm ya da tmux içinde Emacs kullanıyorsanız, aynı tuş atamalarıyla Emacs içindeki ve dışındaki pencereler arasında doğal biçimde gidip gelmek istersiniz
- Mevcut örnekler arasında Pavel Korytov’un i3-integration çalışması ve qtile için emacs-wm.el bulunur
- Daha temiz bir entegrasyon arayüzü için şu unsurlar gerekir
- Pencere yöneticisi etkin pencere sınıfını tanımlayabilmeli ve pencere taşıma/manipülasyon işlemlerini programatik olarak sunmalı
- İletişim yöntemi shell komutları, soket, sunucu tabanlı IPC veya Linux’taki D-Bus olabilir
- Emacs tarafında, pencere yöneticisi tarzı işlemleri taklit eden, iletişim yönteminden bağımsız bir arayüze ihtiyaç vardır
- OS pencereleri arasında geçiş yaparken etkin pencerenin Emacs olup olmadığı kontrol edilir; gerekirse Emacs işlemi kendi iç frame’inde ele alır
Sonuç
- Emacs pencere yönetimi,
other-windowdanace-window, Avy, Popper vedisplay-buffer-aliste kadar farklı katmanlarda seçenekler sunar - Tüm yöntemleri kullanmak gerekmez; aynı sorunu çözen çok sayıda alternatif olduğu için birini seçip kalanları yok sayabilirsiniz
- Yerleşik temel araçların uzun süre korunma olasılığı yüksektir, ancak üçüncü taraf paketlerin durumu geliştirme, terk edilme veya sahipsiz kalma durumlarına göre değişebilir
- Emacs’in pencere yönetimi, karmaşık ve sabit bir sistemden çok, malzemeler ve tarifler sunan açık bir yapıya benzer
- Az ayarla bile temel bir kullanım mümkündür; biraz kombinasyon ve Elisp ayarıyla çok daha özelleştirilmiş bir çalışma akışı oluşturabilirsiniz
1 yorum
Hacker News yorumları
Yazı güzel, açıklamalar ve yönergeler de harika. Eşit bölünmüş pencereler bazen yetmediği için aşağıdaki fonksiyonu
init.eliçine koyupC-x 7tuşuna bağlayarak mevcut pencereyi ve eşleşen pencereyi dikeyde %70/%30 boyutlarına ayarlıyorumYatay yön için de aynı şeyi
C-x 8bağlamasıyla yapıyorum(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))))Güzel bir incelemeydi. Şu an mobildeyim, o yüzden hemen deneyemiyorum ama ace-window,
ace-window-display-modeveframes-only-mode'u yakında denemek istiyorumDürüst olmak gerekirse Emacs'i yaklaşık 40 yıldır kullanmama rağmen çoğunlukla
next-window, alta ya da yana yeni pencere açma ve uzak sunucularda çalışırkentmuxkullanma düzeyinde kaldımC-x 1/2/3veC-x okullandımAma bunlar aslında epey güçlü ve benim kullanımım için yeterli; hatta çeşitli tiling pencere yöneticilerinin de tam bu kadarını yapmasını isterdim
C-x obiraz zahmetli geldiği için aşağıdaki ayarı yaptım ama bu ek paketlerin gerçekten gerekli olduğunu hissetmiyorum(global-set-key (kbd "M-o") #'other-window)Yine de böyle derinlikli bir başvuru yazısının olması güzel; Karthik'in yazıları her zaman öğretici ve ilgi çekici oluyor
Karthink'in
windmove-modenotuna ek olarak,windmove-default-keybindingsayarlayarak pencereler arasındaCtrl-<yön tuşu>ile geçiş yapabilirsiniz(windmove-default-keybindings 'control)Bunu kendi yapılandırmama da ekledim, minimalist başlangıç kitime de koydum; gerçekten oyun değiştirici
https://codeberg.org/ashton314/emacs-bedrock
.emacsdosyama baktım, ben de birebir aynı şeyi kullanıyormuşum.C-x O'ya göre bir tuşa daha az basılıyor ve daha esnek olduğu için tercih ediyorumEmacs'in bir frame'i birden çok pencereye bölmesini engelleyecek şekilde ayarladım. Bu, web tarayıcısının tarayıcı penceresini birden fazla viewport'a bölmemesine benziyor
Benim Emacs'im ikinci bir frame de oluşturmuyor. Eski yöntemler artık çalışmaz hale geldikçe bunun nasıl yapılacağı yıllar içinde değişti
Şu anki yöntemde örneğin Emacs
*Completions*buffer'ını göstermek istediğinde olduğu gibi bazı durumlarda frame bölünüyor, ama hatırladığım kadarıyla ikinci pencereyi kaldırmak için elledelete-windowçağırmam gerekmiyordu; hep kendiliğinden kayboluyorduBen çok pencereli frame'leri oldukça sık kullanıyorum. Güncel macOS ve güncel Emacs'te bazen çok pencereli bir frame klavye ya da trackpad'e yanıt vermiyormuş gibi donuyor ve birkaç kez
Ctrl-Gbasmak da işe yaramıyorAma
C-x 5 2ile yeni bir frame oluşturmak çalışıyor, ardından donmuş frame'e geri dönüpC-x 5 0ile o frame'i kapatabiliyordumYazı çok derinlikli ve yazarın iyi şemalar çizmek için zaman harcamış olmasını gerçekten takdir ettim
Güzel bir yazı; birlikte kullanmak için harika bir paketi de paylaşmak istiyorum. Benim için zygospore vazgeçilmez olmuştu
“zygospore,
C-x 1(delete-other-window) işlemini tekrarC-x 1basarak geri almanızı sağlar”https://github.com/LouisKottmann/zygospore.el
https://www.emacswiki.org/emacs/WinnerMode
undoolması gerekmez miydi?Garip olurdu belki ama
C-u C-x 1tutarlı görünüyorYazar bunu görürse, Acme editor'a yapılan küçük göndermeyi görmekten memnun olduğumu iletmek isterim
hledger-balance-sheetçağrıldığında mevcut.hledger.journaldosyasının yerine geçmesini değil, sağda %30 genişlikte açılmasını istiyorumSolda
.hledger.journalaçık ve seçili olarak kalmalı