Emacs विंडो प्रबंधन का अवलोकन
विंडो प्रबंधन की प्रतिष्ठा और संभावनाएँ
- Emacs का विंडो प्रबंधन बहुत अच्छी प्रतिष्ठा नहीं रखता
- इसका कारण मुख्यतः यह है कि यह बहुत लचीले और सूक्ष्म लेआउट सिस्टम को कच्चे नियंत्रण के साथ जोड़ता है
- इससे ऐसे टूल बनाने और इस्तेमाल करने की गुंजाइश बचती है जो विंडो संभालने के लिए बेहतर रूपक और affordance प्रदान करें
बुनियादी विंडो प्रबंधन विकल्प
other-window और "next window"
other-window (C-x o) बुनियादी विंडो स्विचिंग अनुभव प्रदान करता है
- इसे Emacs tutorial में सिखाया जाता है, और जब विंडो की संख्या कम हो तो यह अच्छी तरह काम करता है
- विंडो चयन पूरे frame में (लगभग) clockwise क्रम में घूमता है
windmove
windmove दिशा के आधार पर विंडो के बीच focus ले जाने और विंडो के बीच buffer स्थानांतरित करने के लिए built-in Emacs library है
- यह Vim उपयोगकर्ताओं के लिए अपेक्षित सुविधा है, और
evil-mode उपयोगकर्ता पहले से ही Windmove का उपयोग कर रहे हैं
windmove-left, -right, -up, -down को दिशा से जुड़े keys पर bind करके उपयोग किया जाता है
frames-only-mode
frames-only-mode आपको Emacs विंडो हैंडलिंग OS पर छोड़ने देता है
- अगर हर buffer नई frame में खोला जाए, तो यह विंडो मैनेजर का काम बन जाता है
- इससे Emacs buffer, OS window के बराबर हो जाते हैं और उन्हें उन्हीं keys से प्रबंधित किया जा सकता है
winum-mode
- Winum, O(n) (
other-window) से O(√n) (windmove) और फिर O(1) तक n विंडो के बीच स्विच करने के प्रयास का स्वाभाविक विकास है
- यह mode line में विंडो नंबर जोड़ता है ताकि नंबर से विंडो चुनी जा सके
- जब minibuffer सक्रिय होता है, उसे हमेशा नंबर 0 दिया जाता है
ace-window
ace-window keyboard-आधारित Emacs विंडो नियंत्रण का शिखर है
- यह हर विंडो के ऊपर "hint" रखता है, और संबंधित key दबाने पर focus उस विंडो पर चला जाता है
- यह विंडो को सामान्य तरीके से "चुनता" है, और उसके बाद उस विंडो के साथ क्या करना है, यह उपयोगकर्ता तय करता है
- विंडो delete, move या swap, split, buffer display जैसे built-in actions के अलावा custom actions भी जोड़े जा सकते हैं
माउस का उपयोग
- विंडो प्रबंधन में माउस के उपयोग के फायदे तुरंत और स्पष्ट हैं
- विंडो चयन, बुनियादी mouse usage का स्वाभाविक विस्तार है, और विंडो resize करना आसान है
- context menu और drag and drop support बहुत सहज हैं
- कमियों को कम करने के लिए, अगर आप पहले से दूसरे कामों के लिए माउस इस्तेमाल कर रहे हैं, तो Emacs को माउस से चलाना वास्तव में सबसे कम प्रतिरोध वाला रास्ता है
transpose-frame (घुमाना, पलटना और उलटना)
- transpose-frame frame के भीतर विंडो लेआउट को rotate या mirror करने के commands देता है
rotate-frame, flip-frame, flop-frame को उपयुक्त keys पर bind करके अक्सर इस्तेमाल किया जाता है
window-prefix-map
window-prefix-map डिफ़ॉल्ट रूप से C-x w पर bind है और कुछ उपयोगी विंडो प्रबंधन commands को एक साथ रखता है
split-root-window-right और split-root-window-below frame की root window को split करते हैं
tab-detach और tear-off-window विंडो को नए tab या नई frame में ले जाने के सुविधाजनक commands हैं
other-window-prefix
other-window-prefix विंडो चयन को buffer display से अलग करने का तरीका देता है और विंडो से जुड़ी तीन असुविधाओं को हल करता है
- कई Emacs commands अपने मूल action, buffer और window को काफ़ी कसकर जोड़ते हैं।
other-window-prefix के साथ command का buffer किसी दूसरी विंडो में दिखाया जा सकता है
other-window-prefix के साथ link जैसे objects को सक्रिय करते समय विंडो चुनी जा सकती है
other-window-prefix के साथ हर package author के व्यवहार के अनुसार ढलने या custom करने की ज़रूरत के बिना "link" objects को एक समान तरीके से खोला जा सकता है
विंडो कॉन्फ़िगरेशन सहेजना और पुनर्स्थापित करना
window-configuration-to-register कुछ हद तक भोंडा tool है, लेकिन बड़े लाल reset button की तरह बिल्कुल सही है
- किसी भी समय इस command से मौजूदा विंडो configuration को register में सहेजा जा सकता है और फिर
jump-to-register से उसे restore किया जा सकता है
winner-mode का उपयोग करके Emacs से पुराने विंडो arrangement का stack बनाए रखने के लिए कहा जा सकता है
गहराई से पड़ताल
आगे-पीछे जाने का तरीका
- एक साथ कितनी भी विंडो हों, ज़्यादातर मामलों में आपको सिर्फ दो विंडो के बीच स्विच करना होता है
other-window-mru command से विंडो की जोड़ियों के बीच स्विच किया जा सकता है
other-window में सुधार
- अगर सिर्फ एक विंडो हो, तो
other-window को frame split करने के लिए बनाया जा सकता है
- इसे spatial order की जगह last-used order में विंडो घुमाने के लिए बदला जा सकता है (
switchy-window package)
- हर बार call होने पर विंडो स्विचिंग दिशा उलट दी जा सकती है, ताकि दो विंडो के बीच स्वाभाविक अदला-बदली हो सके
ace-window dispatch के साथ विंडो जादू
ace-window विंडो के लिए वही करता है जो completing-read string list के लिए करता है
aw-select किसी भी action को किसी भी विंडो पर call करने की तीन-चरणीय प्रक्रिया के पहले दो चरणों (filtering और selection) के लिए आदर्श है
ace-window-one-command के साथ ace-window से विंडो चुनकर उस विंडो में कोई भी simple command चलाया जा सकता है
ace-window-prefix other-window-prefix जैसा है, लेकिन यह अगले command का buffer किस विंडो में दिखेगा, उसे स्पष्ट रूप से चुनने देता है
क्या सचमुच विंडो स्विच करनी चाहिए?
- Avy का उपयोग करने वाली window-agnostic movement, इस सामान्य विचार का एक विशेष मामला है
- टेक्स्ट container के रूप में विंडो एक अनावश्यक abstraction हो सकती है
mark-ring और global-mark-ring आपकी गई हुई जगहों को track करते हैं, जिससे ज़रूरत पड़ने पर विंडो के पार भी जाया जा सके
point-to-register और jump-to-register के साथ बाद में जाने वाली जगहों को manually pin किया जा सकता है
- bookmark बनाना और उन पर जाना, Emacs या उपयोगकर्ता द्वारा पहचानी गई अर्थपूर्ण जगहों के आधार पर विंडो के पार navigate करने के कई विकल्प देता है
विंडो से interact किए बिना विंडो हैंडलिंग
display-buffer-alist और automatic window behavior का उपयोग करके whack-a-mole विंडो समस्या हल की जा सकती है
- Emacs में रोज़ दिखने वाले हर तरह के buffer के लिए नियम तय कर देने पर विंडो प्रबंधन का बड़ा हिस्सा हल हो जाता है
display-buffer-alist की समस्या यह नहीं है कि यह काम नहीं करता, बल्कि यह है कि इसमें बहुत काम लगता है
- Shackle package,
display-buffer-alist की विचित्रता को ढकता है और विंडो नियम तय करने के लिए सरल elisp interface देता है
- Emacs distributions आम तौर पर ऐसी settings निर्दिष्ट करने के लिए सरल interface देती हैं
Popper, Popwin, shell-pop और vterm-toggle
- Popwin और Popper इस अवलोकन पर आधारित हैं कि सभी buffers एक जैसे नहीं होते
- इन packages के साथ popup buffers को, जो auxiliary windows का उपयोग करते हैं, निर्दिष्ट किया जा सकता है और ज़रूरत के अनुसार उन विंडो को बुलाया और हटाया जा सकता है
जो हिस्सा छूट गया
window-tree
- Emacs विंडो को जिस तरह दर्शाता है और ऊपर चर्चा किए गए तरीकों से जिस तरह उन्हें manipulate किया जाता है, उनके बीच एक बुनियादी अंतर है
- frame की विंडो एक tree में व्यवस्थित होती हैं, जहाँ leaf nodes "वास्तविक" विंडो होती हैं और बाकी "आंतरिक" विंडो होती हैं
- window-tree operations के लिए commands जोड़ने से कई नई संभावनाएँ खुल सकती हैं
tiling window manager integrator
- Emacs का window-tree model, i3 या bspwm जैसे manual tiling window managers के model से लगभग समान है
- स्वाभाविक रूप से यह सवाल उठता है कि tiling window manager के भीतर दूसरा tiling window manager क्यों इस्तेमाल किया जाए
- अगर Emacs से सभी window managers के साथ integration के लिए ज़्यादा साफ़ और एकीकृत interface मिले, तो यह काफ़ी आसान हो सकता है
दृष्टिकोण
- विंडो को switch, move, skip, create, delete और manipulate करने के तरीके हैं; commands call करते समय मौके पर ही window display को नियंत्रित करने के कई तरीके हैं; और विंडो में काम करने या विंडो के बारे में बिल्कुल न सोचने के भी तरीके हैं
- विंडो प्रबंधन जटिल होने से ज़्यादा खुला है
- Emacs सामग्री और कुछ निर्देश देता है, और यह सामग्री अपने आप में एक बुनियादी भोजन की तरह इस्तेमाल की जा सकती है
- लेकिन थोड़ी-सी पकाई के साथ हम कुछ स्वादिष्ट बना सकते हैं
GN⁺ की राय
- विंडो प्रबंधन Emacs की सबसे बड़ी कमजोरियों में से एक है और user-friendly नहीं है। खासकर शुरुआती उपयोगकर्ताओं के लिए यह उलझाऊ हो सकता है।
- प्रस्तुत तरीके Emacs की विंडो प्रबंधन समस्याओं को कम कर सकते हैं, लेकिन वे मूलभूत समाधान नहीं हैं। अधिक सहज और उपयोग में आसान विंडो प्रबंधन सिस्टम की ज़रूरत है।
- Emacs का विंडो प्रबंधन बहुत
1 टिप्पणियां
Hacker News राय
नीचे Hacker News टिप्पणियों का सारांश दिया गया है:
ace-window,ace-window-display-mode,frames-only-modeजैसे पैकेज इस्तेमाल करके देखने का सुझाव दिया गया है.windmove-modeको सक्षम करके और(windmove-default-keybindings 'control)के ज़रिए Ctrl+एरो की से विंडो के बीच जाना संभव बनाने वाला टिप साझा किया गया है.zygosporeपैकेज के ज़रिएC-x 1से विंडो बंद करने के बाद, फिर सेC-x 1दबाने पर पिछला विंडो लेआउट बहाल किया जा सकता है, यह बताया गया है.hledger-balance-sheetफ़ंक्शन चलाते समय journal फ़ाइल को बाईं ओर खुला रखते हुए, दाईं ओर नतीजे को 30% आकार में split करके दिखाने के तरीके के बारे में सवाल पूछा गया है.