1 पॉइंट द्वारा GN⁺ 4 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Emacs की डिफ़ॉल्ट सुविधाओं में ऐसे कई टूल हैं जिन्हें बिना अलग पैकेज के इस्तेमाल किया जा सकता है, लेकिन वे ज़्यादा सामने नहीं आते; और आधुनिक Emacs 28.1+ में भी 5 मिनट में सीखने लायक उपयोगी फीचर लगातार मिलते रहते हैं
  • फ़ाइल खोलना, URL इकट्ठा करना, तुलना करना, और बदलाव ट्रैक करना जैसे रोज़मर्रा के काम find-file, dired, ffap-menu, compare-windows, highlight-changes-mode से ही काफ़ी हद तक किए जा सकते हैं
  • बैकअप फ़ाइलों और version control फ़ाइलों के लिए vc-diff परिवार के commands को बढ़ाकर पिछले संस्करण से तुलना जैसे एक ही कार्य मॉडल में जोड़ा जा सकता है
  • संपादन, नेविगेशन और डिस्प्ले से जुड़े काम apropos परिवार, find-function-on-key, kmacro-edit-lossage, subword-mode, और image manipulation keymap जैसी पहले से शामिल सुविधाओं से तेज़ी से बेहतर किए जा सकते हैं
  • मुख्य takeaway यह है कि Emacs की lisp directory बहुत बड़ी न होने पर भी बिल्ट-इन सुविधाओं के सहारे workflow को और फैलाने की गुंजाइश लगातार बनी रहती है

अवलोकन और दायरा

  • Emacs सुविधाओं में discoverability की समस्या है, और यह लेख कम-ज्ञात लेकिन उपयोगी बिल्ट-इन सुविधाओं को एक-एक करके दिखाकर उस समस्या को कम करने की कोशिश है
  • यह लेख Emacs में डिफ़ॉल्ट रूप से शामिल उपयोगी लेकिन कम-ज्ञात सुविधाओं पर आधारित तीसरा लेख है
  • “कम-ज्ञात” एक व्यक्तिपरक आकलन है; मोटे तौर पर इसका मतलब वे सुविधाएँ हैं जिनका पिछले 20 वर्षों की ऑनलाइन Emacs चर्चाओं में पाँच बार से कम ज़िक्र देखा गया हो, या बिल्कुल न देखा गया हो
  • नए Emacs उपयोगकर्ताओं के लिए यहाँ से शुरू करना बेहतर नहीं है; बुनियादी अवधारणाओं और व्यापक रूप से सुझाए जाने वाले पैकेजों से परिचित होने के बाद यह सूची ज़्यादा उपयोगी होगी
  • मानदंड यह है कि बिना पैकेज के शुद्ध Emacs ही इस्तेमाल हो, सीखने की ढलान बहुत कठिन न हो, मज़ाकिया सुविधाएँ और अक्सर बताई जाने वाली सुविधाएँ बाहर रखी जाएँ, और आधुनिक Emacs 28.1+ को आधार माना जाए

माउसओवर शब्दकोश: M-x dictionary-tooltip-mode

  • dictionary-tooltip-mode चालू करने पर किसी शब्द पर माउस ले जाने से उसका अर्थ tooltip में देखा जा सकता है
  • tooltip-mode भी चालू होना चाहिए, लेकिन यह डिफ़ॉल्ट रूप से सक्रिय रहता है
  • अगर local dictionary सेट है तो उसे पहले इस्तेमाल किया जाता है, और Emacs dictionary आमतौर पर Wiktionary के ज़रिए आधुनिक शब्द और slang भी ढूँढ सकती है

find-file और dired में wildcard

  • find-file और dired को interactive तरीके से इस्तेमाल करते समय भी wildcard का उपयोग किया जा सकता है
  • find-file में *foo*.txt जैसा pattern इस्तेमाल करने पर कई फ़ाइलें एक साथ खोली जा सकती हैं
  • Dired में directory खोलते समय filename wildcard देने पर केवल चुनी हुई फ़ाइलों की custom list बनाई जा सकती है
  • उदाहरण workflow में */*_region_* pattern से subdirectory के AucTeX temporary files ढूँढे जाते हैं, फिर Dired में उन्हें चुनकर हटाया जाता है, और उसके बाद wildcard से subdirectory की कई TeX फ़ाइलें खोली जाती हैं
  • यह सुविधा function signature के हिसाब से programming call में दिखती है, लेकिन interactive उपयोग में भी उपलब्ध है—यह बात पूरी docstring पढ़ने पर ही आसानी से समझ आती है
  • Dired की wildcard सुविधा consult-find और embark-export से बने आधुनिक Dired workflow के सामने दब सकती है, लेकिन यह डिफ़ॉल्ट स्थिति में तुरंत काम करती है

buffer के अंदर URI सूची: M-x ffap-menu

  • ffap एक find-file-at-point सुविधा है जो देखती है कि cursor की जगह कोई वैध file path या URL है या नहीं, और फिर उसे खोलने देती है
  • ffap-menu पूरे buffer को स्कैन करके file path या URL जैसे दिखने वाले आइटमों की सूची देता है
  • क्योंकि यह completing-read interface का उपयोग करता है, इसलिए filtered candidate list को buffer में export किया जा सकता है, या कुछ/सभी आइटम कॉपी, खोल, या Embark के साथ प्रोसेस किए जा सकते हैं
  • properties वाले links की सूची बनाना

    • EWW जैसे Emacs applications कभी-कभी URL को सामान्य text link की जगह text property के रूप में रखते हैं, और ffap-menu इन्हें छोड़ देता है
    • इसे पूरा करने के लिए ffap-menu से प्रेरित किसी custom command में shr-url text property भी इकट्ठा की जा सकती है
    • उदाहरण command my/search-occur-browse-url सामान्य URL regex और shr-url property दोनों को ढूँढकर completion candidates बनाता है, और चुने गए URL को browse-url या browse-url-generic से खोलने के लिए सेट किया जा सकता है

विंडो तुलना: M-x compare-windows

  • Emacs में diff, diff-buffers, diff-backup, dired-diff, vc-diff, और कई ediff-* commands जैसे बहुत से comparison commands मौजूद हैं
  • compare-windows दो विंडो की cursor position से टेक्स्ट की तुलना शुरू करता है, अगली असमानता पर रुकता है, और उसकी रिपोर्ट देता है
  • तुलना के लिए active window और other-window द्वारा चुनी गई window इस्तेमाल होती है; इसमें Ediff या diff की तुलना में कम फीचर हैं, लेकिन इसे चलाना ज़्यादा आसान और तेज़ है
  • यह buffer के प्रकार, संशोधन स्थिति, फ़ाइल, या version control स्थिति से परे, केवल दोनों विंडो में दिख रहे वास्तविक टेक्स्ट की तुलना करता है
  • अगर एक ही buffer के अलग-अलग हिस्से दो विंडो में दिखाए जाएँ, तो उसी buffer के दो text fragments की भी तुलना की जा सकती है
  • directory listings की भी तुलना की जा सकती है, और उदाहरण में file modification time पहली असमानता के रूप में पकड़ा जाता है
  • prefix argument देने पर whitespace के फ़र्क को नज़रअंदाज़ किया जा सकता है

Dired से directory तुलना: M-x dired-compare-directories

  • dired-compare-directories Dired में तुलना के लिए directory पूछता है, और दो Dired सूचियों में अलग नाम वाली फ़ाइलों को चिह्नित करता है
  • यह तरीका directory comparison के सबसे आम उपयोग मामलों को संभाल सकता है
  • क्योंकि यह file-level comparison है, इसलिए file properties जैसे modification time या size सहित custom matching conditions दिए जा सकते हैं
  • (> mtime2 mtime1) शर्त हाल में बदली गई फ़ाइलों को चिह्नित कर सकती है
  • (/= size1 size2) शर्त समान नाम लेकिन अलग size वाली फ़ाइलों को चिह्नित कर सकती है
  • अगर अधिक interactive comparison चाहिए, तो ediff-directories भी इस्तेमाल किया जा सकता है

buffer बदलाव हाइलाइट: M-x highlight-changes-mode

  • highlight-changes-mode फ़ाइल में बदलाव वाले हिस्सों को हाइलाइट करने की सुविधा है, और इसे diff-buffer-with-file जैसे diff commands के “live” विकल्प के रूप में इस्तेमाल किया जा सकता है
  • इसका डिफ़ॉल्ट व्यवहार mode चालू होने से लेकर बंद होने तक के बदलावों को हाइलाइट करना है; यह अपने-आप केवल unsaved changes को ही हाइलाइट नहीं करता
  • before-save-hook और after-save-hook का उपयोग करके, save से पहले highlighting बंद कर और save के बाद फिर चालू कर, ऐसा workflow बनाया जा सकता है जो केवल save से पहले के बदलावों को हाइलाइट करे
  • उदाहरण code text-mode-hook में file buffer के लिए highlight-changes-mode चालू करता है, और save से पहले/बाद के hooks से highlighting की स्थिति नियंत्रित करता है
  • इसे अलग highlight-unsaved-mode के रूप में बनाया जाए तो यह एक minor mode बन जाता है जो save होने तक सभी बदलावों को हाइलाइट करता है
  • highlight-changes-next-change और highlight-changes-previous-change से अगले/पिछले बदलाव वाले स्थान पर जाया जा सकता है
  • highlight-changes-remove-highlight से दृश्य हाइलाइट हटाकर केवल change-tracking आधारित navigation का उपयोग किया जा सकता है

बैकअप फ़ाइलों को वास्तव में उपयोगी बनाना: vc-diff परिवार

  • Emacs बैकअप की समस्या

    • Emacs डिफ़ॉल्ट रूप से उन फ़ाइलों के बैकअप समय-समय पर बनाता है जिन्हें आप संपादित और सेव करते हैं
    • इस बैकअप सिस्टम का ज़िक्र अक्सर ऐसी परेशान करने वाली सुविधा के रूप में होता है जिसे make-backup-files से बंद कर देना चाहिए
    • संवेदनशील फ़ाइलों के डिस्क पर किसी दूसरी जगह कॉपी हो जाने को लेकर सुरक्षा संबंधी चिंता हो सकती है
    • इसके अलावा, समस्या मुख्यतः यह है कि बैकअप working directory में बिखर जाते हैं, और बैकअप फ़ाइलों को देखना या संभालना आसान बनाने वाला UI कमज़ोर है
    • backup-directory-alist, kept-old-versions, kept-new-versions जैसे user options से बैकअप का स्थान और रखी जाने वाली कॉपियों की संख्या समायोजित की जा सकती है
    • बाहरी पैकेज backup-walker बैकअप को time travel की तरह ब्राउज़ करने का इंटरफ़ेस देता है
  • VC इंटरफ़ेस का विस्तार

    • Emacs का built-in VC पैकेज version-controlled फ़ाइलों के पुराने versions देखने का इंटरफ़ेस देता है
    • vc-diff फ़ाइल का diff पिछले version या किसी निर्दिष्ट version से करता है
    • vc-ediff फ़ाइल के पिछले version या किसी निर्दिष्ट version के साथ Ediff चलाता है
    • vc-revision-other-window पिछले या निर्दिष्ट पुराने version को मौजूदा फ़ाइल के बगल में दिखाता है
    • यह इंटरफ़ेस सिर्फ Git तक सीमित नहीं है, लेकिन version control में न होने वाली फ़ाइलों पर काम नहीं करता
    • इन तीन VC commands को overload करने पर unsaved buffers, version-controlled फ़ाइलें, और version control में न होने वाली फ़ाइलों के बैकअप—सबको “पिछले version से तुलना” के एक ही मॉडल में जोड़ा जा सकता है
    • unsaved फ़ाइलों में vc-diff और vc-ediff buffer और फ़ाइल की तुलना करते हैं
    • version-controlled फ़ाइलों में मूल vc-diff, vc-ediff, vc-revision-other-window वैसे ही चलते हैं
    • version control में न होने वाली फ़ाइलों में सबसे नए numbered backup, या prefix argument से चुने गए numbered backup, से तुलना या प्रदर्शन किया जाता है

apropos परिवार

  • describe-key यानी C-h k एक बहुत उपयोगी help key है, क्योंकि इससे सीधे देखा जा सकता है कि कोई key input किस function को कॉल करता है
  • दूसरी help feature के रूप में apropos बहुत ताकतवर है, और जब यह न पता हो कि क्या खोजना है, तब यह Emacs की सुविधाओं की बनावट समझने का प्रवेशद्वार बनता है
  • apropos सिर्फ एक command नहीं, बल्कि apropos-library, apropos-function, apropos-command, apropos-variable, apropos-user-option, apropos-documentation, info-apropos जैसे कई specialized search commands का परिवार है
  • उदाहरण configuration इन commands को C-h a के नीचे एक keymap में बाँधकर apropos को replace करती है
  • which-key जैसे prompter के बिना भी C-h a prefix key के बाद C-h दबाकर उपलब्ध commands की सूची देखी जा सकती है
  • customize-apropos खोज शब्द से मेल खाने वाले options, faces, और groups को इकट्ठा कर एक customized customize buffer बनाता है

find-func टूल्स: M-x find-function-on-key, M-x find-function

  • जब कोई keybinding पसंद न आए या उसका behavior समझना हो, तो उस key द्वारा कॉल किए गए command की definition पर जाकर उसके काम को पढ़ा या बदला जा सकता है
  • सामान्य flow यह है कि पहले describe-key या C-h k से यह देखा जाए कि key कौन-सा command चलाती है, फिर s दबाकर source पर जाया जाए
  • find-function-on-key इस दूसरे step को घटाकर keybinding से सीधे function source पर ले जाता है
  • उदाहरण configuration help-map में C-h M-k को find-function-on-key से bind करती है

copy-from-above-command और duplicate-dwim

  • हाल में Emacs में कई users द्वारा बहुत पहले से इस्तेमाल किए जा रहे text duplication commands जोड़े गए हैं
  • copy-from-above-command मौजूदा लाइन के ऊपर की पहली non-empty लाइन से text कॉपी करता है, और यह Vim के C-y जैसा है
  • duplicate-dwim मौजूदा लाइन या active region को वर्तमान लाइन के नीचे कॉपी करता है, और यह Vim के yy<N>p जैसा है
  • copy-from-above-command prefix argument के अनुसार ऊपर की लाइन से characters कॉपी करता है, लेकिन उदाहरण advice C-u prefix argument को “ऊपर की पूरी लाइन कॉपी करो और उसे comment कर दो” वाले behavior में बदल देती है
  • numeric prefix argument C-<N> का उपयोग करने पर पहले की तरह ऊपर से निर्धारित संख्या में characters कॉपी किए जा सकते हैं
  • duplicate-dwim में duplication के बाद cursor को original पर रखना है या duplicate पर, यह चुनना पड़ता है, और इसे user option से तय किया जा सकता है
  • उदाहरण configuration duplicate-region-final-position और duplicate-line-final-position को -1 पर सेट करती है ताकि cursor और region duplicated text पर चले जाएँ

key input history को macro बनाना: M-x kmacro-edit-lossage

  • Emacs keyboard macros सिर्फ text transformation ही नहीं, बल्कि mouse clicks सहित Emacs की हर action sequence को capture और replay कर सकती हैं
  • keyboard macros शक्तिशाली हैं, लेकिन recording शुरू करने से पहले दोहराव की संभावना का अनुमान लगाना पड़ता है, और गलती-रहित generalized action करनी होती है, इसलिए cognitive load बढ़ता है
  • Vim का . command और Emacs का dot-mode पैकेज editing repetition की समस्या को कुछ कम करते हैं, लेकिन उनका दायरा full keyboard macros से अलग है
  • view-lossage(C-h l) हाल की लगभग 300 key inputs की history दिखाता है
  • kmacro-edit-lossage इस key input history से कभी भी macro बनाने देता है
  • lossage वास्तव में editable होता है, इसलिए macro बनाते समय रिकॉर्ड में नए commands भी डाले जा सकते हैं
  • पहले से परिभाषित macro को edit-kbd-macro(C-x C-k e) से अधिक नियमित रूप से संपादित किया जा सकता है, लेकिन kmacro-edit-lossage उन दुर्लभ स्थितियों में उपयोगी है जहाँ अभी-अभी किए गए जटिल काम को repeatable बनाना हो
  • generalized macro बनाने के लिए अक्सर kbd-macro-query call को lossage में डालना पड़ता है

subword-mode, superword-mode, शब्द grammar

  • Emacs के word-based movement और editing commands major mode के हिसाब से syntax table का उपयोग करते हैं, और किसे एक शब्द माना जाए यह user समायोजित कर सकता है
  • subword-mode में CamelCase symbols के हर component को अलग शब्द माना जाता है
  • उदाहरण के लिए GtkWindow को Gtk और Window, EmacsFrameClass को Emacs, Frame, Class, और NSGraphicsContext को NS, Graphics, Context में बाँटा जाता है
  • superword-mode में this_is_a_symbol जैसे snake_case symbols को एक ही शब्द माना जाता है
  • व्यावहारिक उपयोग में symbols को संभालने के लिए *-sexp commands पहले से अच्छी तरह समर्थित हैं, इसलिए superword-mode, subword-mode की तुलना में कम उपयोगी है
  • major mode की syntax table में बस कुछ मिनट का बदलाव भी structural movement में होने वाली असुविधा को कम कर सकता है
  • Lisp जैसे संदर्भों में : को word constituent character बना देने से :foo जैसे keywords को backward-kill-word से संभालना आसान हो जाता है
  • Org mode में = और ~ delimiters को word constituent characters की तरह माना जा सकता है
  • character syntax निर्दिष्ट करने का तरीका describe-syntax(C-h s) और modify-syntax-entry में देखा जा सकता है

image display को manipulate करना

  • Emacs जहाँ भी image दिखाता है, लगभग हर जगह image पर cursor रखकर i दबाने से display को manipulate किया जा सकता है
  • Org mode के image link previews और Elfeed item buffers की images में भी यही controls इस्तेमाल किए जा सकते हैं
  • i + और i - zoom in/out के लिए उपयोगी हैं, और i r image को 90 डिग्री घुमाता है
  • i c से image crop भी की जा सकती है, और विस्तृत keys M-x describe-keymap RET image-map में देखी जा सकती हैं
  • browser और दूसरे applications में परिचित C-<wheel> shortcut भी इस्तेमाल किया जा सकता है
  • repeat-mode का उपयोग करने पर पहली call के बाद i prefix के बिना सिर्फ +, -, r दोहराए जा सकते हैं
  • यह सुविधा image पर रखे गए keymap के रूप में मिलती है, और अलग से enable करने की ज़रूरत नहीं होती
  • इसमें बदला जाने वाला हिस्सा डिस्क पर मौजूद image file नहीं, सिर्फ display state होता है
  • web pages और rendered HTML buffers में z(shr-zoom-image) image को कई क्षैतिज पट्टियों में बाँटकर उसका आकार चक्रित करता है, जिससे बड़ी images के display limits कुछ कम हो जाते हैं

सारा टेक्स्ट दिखाएँ: M-x visible-mode

  • Emacs बफ़र टेक्स्ट को चुनिंदा रूप से अदृश्य बना सकता है, और यही फीचर Magit section, Outline mode, Org mode जैसी folding behavior की बुनियाद है
  • folding फीचर देने वाले modes आम तौर पर fold state बदलने के लिए keybinding देते हैं, और TAB अक्सर काम करता है
  • अगर mode-specific keybindings याद रखना मुश्किल हो या आप उन्हें पर्याप्त बार इस्तेमाल न करते हों, तो visible-mode से सारा छिपा हुआ टेक्स्ट देखा जा सकता है
  • visible-mode पूरे बफ़र में text invisibility को बंद कर देता है, और दोबारा चलाने पर पहले की invisibility state बहाल कर देता है
  • dynamic folding UI वाले बफ़र में visible-mode चालू रहने के दौरान स्क्रीन टूटी-फूटी दिख सकती है
  • यह फीचर अस्थायी उपाय या debugging tool के ज़्यादा करीब है, लेकिन एक कमांड से बफ़र का सारा टेक्स्ट एक समान तरीके से दिखा सकता है

अदृश्य टेक्स्ट को नज़रअंदाज़ करें: isearch-toggle-invisible

  • Isearch जैसे कुछ Emacs commands डिफ़ॉल्ट रूप से text invisibility को नज़रअंदाज़ करते हैं, ताकि पूरे असली दस्तावेज़ में आसानी से खोजा जा सके
  • जब दिख रहा बफ़र state navigation guide की तरह काम कर रहा हो, तब fold किए गए टेक्स्ट को अपने-आप खोल देने वाली search उम्मीद के उलट व्यवहार कर सकती है
  • जब Isearch को search से ज़्यादा navigation tool की तरह इस्तेमाल किया जाता है, तब folded region के match पर जाना समस्या बन सकता है
  • Isearch के दौरान M-s i पर bound isearch-toggle-invisible से अदृश्य टेक्स्ट में search करनी है या नहीं, यह बदला जा सकता है
  • उदाहरण में Org document की आख़िरी heading पर जाने के लिए zero खोजा गया, लेकिन search folded region के match पर कूद गई; फिर दोबारा search करते हुए M-s i दबाकर केवल दिख रहे टेक्स्ट के matches पर जाया गया
  • Isearch behavior बदलने वाली keys, C-s की default binding से मेल खाने वाले M-s keymap के नीचे होती हैं

रूलर: M-x ruler-mode

  • Emacs में पुराने WYSIWYG word processing फीचर्स की विरासत के रूप में center-* commands जैसी चीज़ें अब भी मौजूद हैं
  • center-* commands line, paragraph, और region को fill-column के आधार पर बीच में align करते हैं, और code के decorative comments जैसे कामों में इस्तेमाल हो सकते हैं
  • display margin और fringe की चौड़ाई स्क्रीन स्पेस है जिसमें कई फीचर्स समा सकते हैं, लेकिन display margin की चौड़ाई सीधे बदलना आसान नहीं है
  • set-left-margin और set-right-margin, display margin की चौड़ाई बदलने वाले commands नहीं हैं; ये असली बफ़र टेक्स्ट को indent करने वाले center परिवार के commands की तरह काम करते हैं
  • display margin settings के लिए कोई सीधा command नहीं है, और एक समस्या यह है कि window के दोबारा display होने तक असर लागू नहीं होता
  • ruler-mode चालू करने पर header-line के ऊपर tooltip में इसका इस्तेमाल देखा जा सकता है
  • S-<mouse-1> और S-<mouse-3> से बफ़र के बाएँ और दाएँ margin सेट किए जा सकते हैं
  • <mouse-2> drag करके fill-column भी सेट किया जा सकता है
  • अगर preset width toggle करने के बजाय तुरंत margin बदलना हो, तो visual-fill-column या olivetti जैसे packages की तुलना में ruler-mode ज़्यादा user-friendly हो सकता है

टेक्स्ट को फिर से fill करें: M-x refill-mode

  • Emacs टेक्स्ट fill करने के लिए कई fill-* commands और typing के दौरान line break संभालने के लिए auto-fill-mode देता है
  • auto-fill-mode को Emacs tutorial में काफ़ी शुरुआती चरण में कवर किया जाता है, जिससे पता चलता है कि text filling को एक महत्वपूर्ण editing फीचर माना जाता है
  • auto-fill-mode वास्तव में पूरी तरह automatic नहीं है; यह सिर्फ़ मौजूदा line को wrap करता है, और paste वगैरह से बिगड़े पुराने paragraph alignment को हाथ से ठीक करना पड़ता है
  • refill-mode Emacs का असली automatic text filling फीचर है, जो document को fill-column के अनुसार बनाए रखता है
  • M-x refill-mode चलाने पर यह behavior इस्तेमाल किया जा सकता है

सभी windows को साथ में scroll करें: M-x scroll-all-mode

  • scroll-other-window बिना focus बदले किसी दूसरी, unselected window को scroll करने देता है, और यह तब उपयोगी है जब आप मौजूदा window में काम करते हुए अगली window के reference material को देखना चाहते हों
  • follow-mode एक buffer को कई windows में लगातार देखने का फीचर है
  • scroll-all-mode कम जाना-पहचाना है, लेकिन यह frame की सभी windows को एक साथ scroll करता है
  • यह उन buffers को देखने में उपयोगी है जिन्हें sync में देखकर तुलना करनी हो; उदाहरण में इसका इस्तेमाल Ediff session में जाए बिना किसी फ़ाइल के दो versions को आँखों से compare करने के लिए किया गया है
  • उदाहरण का flow यह है: मौजूदा फ़ाइल का कोई खास पुराना backup vc-revision-other-window से खोलें, scroll-all-mode चालू करें, फिर सामान्य तरह से scroll करें और सभी windows साथ चलें
  • दूसरी window को scroll करना और master-mode

    • अगर स्क्रीन पर दो से ज़्यादा windows हों और जिस window को scroll करना हो वह Emacs द्वारा चुनी गई next-window न हो, तो समस्या हो सकती है
    • built-in master-mode पहले से या तुरंत यह तय करने देता है कि किस buffer को दूसरी window से scroll किया जा सके
    • इससे भी ज़्यादा सीधा तरीका है scroll की जाने वाली window खोजने की strategy सेट करना
    • (setq other-window-scroll-default #'get-lru-window) हमेशा सबसे लंबे समय से इस्तेमाल न हुई window को scroll करता है
    • यह तब उपयोगी है जब आप ऐसी window को scroll करना चाहते हों जिसमें reference material हो और जिसे आप शायद ही चुनते हों
    • अगर कई windows में अक्सर edit की जाने वाली दो windows हों, तो lambda function सेट करके सबसे हाल में इस्तेमाल हुई window को other window की तरह scroll कराया जा सकता है
    • ऐसी settings का मेल scroll-other-window को इच्छित window scroll कराने में मदद करता है

बंद होने से इनकार: M-x emacs-lock-mode

  • जब unsaved files हों, Emacs तब तक बंद होने से मना करता है जब तक आप हर फ़ाइल के साथ क्या करना है इसका जवाब न दे दें
  • emacs-lock-mode इस विचार को बढ़ाकर user को मनचाहे buffers lock करने देता है
  • lock हटने तक वह buffer kill होने से मना करेगा और Buffer "*scratch*" is locked and cannot be killed जैसा संदेश दिखाएगा
  • अगर कोई locked buffer मौजूद हो, तो Emacs भी बंद होने से मना करेगा और Emacs cannot exit because buffer "*scratch*" is locked जैसा संदेश देगा
  • यह उन जानकारियों को गलती से खोने से बचाने में उपयोगी है जो किसी visited file में नहीं हैं, या यह याद दिलाने में कि उस buffer में अभी काम बाकी है
  • Org-capture के बाद पहली समस्या अब कम होती है, लेकिन shell·compilation buffers, websites, और दूसरी special applications के output या state को न खोने के लिए यह अब भी उपयोगी है

फ्रेम को वापस लाएँ: M-x undelete-frame-mode, M-x undelete-frame

  • अगर आपने मेहनत से सेट किया गया Emacs frame गलती से बंद कर दिया हो, तो undelete-frame से उसे वापस लाया जा सकता है
  • यह फीचर इस्तेमाल करने के लिए undelete-frame-mode चालू होना चाहिए
  • यह frames के लिए वही काम करता है जो built-in winner और tab-bar-history windows के लिए करते हैं
  • अगर undelete-frame-mode को Emacs के साथ हमेशा चालू रखा जाए, तो frame बंद हो जाने की चिंता कम हो सकती है
  • हटाए गए ज़्यादा से ज़्यादा 16 frames बहाल किए जा सकते हैं

बाकी फीचर्स और छोड़ी गई चीज़ें

  • पिछले 6 साल में सामने आए फीचर्स में से 2026 की Emacs उपयोग-हक़ीक़त में टिके रहने वाले फीचर्स 20 हैं
  • संयोग से मिले कई Emacs libraries, आम users की ज़रूरतों के लिए स्थिर समाधान से ज़्यादा एक तरह की software archaeology जैसी दिलचस्पी रखती थीं
  • allout-mode Org mode जैसा किसी समानांतर दुनिया का outline manager है, जिसमें Org के speed-key और subtree-wise encryption जैसी क्षमताएँ हैं
  • shadowfile Emacs के भीतर unison लागू करता है, लेकिन इसकी उपयोगिता संदिग्ध है
  • double-mode quail से पहले का, key conversion आधारित non-keyboard character input तरीका है
  • bs library, ज़्यादा smart list-buffers command बनाने की कोशिश थी, लेकिन ibuffer बेहतर होने के कारण इसे इस्तेमाल करने की वजह नहीं बची
  • electric-pair-mode से region को delimiters में wrap करने जैसी ऊपर से उपयोगी दिखने वाली चीज़ें भी उनकी जटिलता के मुक़ाबले कम फ़ायदेमंद होने के कारण शामिल नहीं की गईं
  • ऐसे कामों के लिए wrap-region, smartparens, embrace जैसे external packages बेहतर हैं
  • appt जैसी Org और Org-adjacent built-in libraries दिलचस्प हैं, लेकिन उन पर अलग लेख चाहिए क्योंकि उनका दायरा बड़ा है
  • thunk जैसी libraries, जो मुख्यतः Elisp developers के लिए उपयोगी हैं, उनकी भी अलग से समीक्षा चाहिए
  • Emacs के साथ आने वाली lisp directory बहुत बड़ी नहीं है, लेकिन उपयोगी default फीचर्स आगे भी मिलते रहने की गुंजाइश है

1 टिप्पणियां

 
GN⁺ 4 시간 전
Lobste.rs की राय
  • find-file(C-x C-f) में *foo*.txt की तरह wildcard से कई files खोलना अक्सर गलती से हो जाता है, इसलिए wildcard इस्तेमाल होने पर find-file तुरंत dired खोले, इसके लिए find-file-noselect पर advice-add लगाया हुआ है
    जब file-expand-wildcards का result 2 या उससे ज़्यादा हो, तो उसे dired-noselect को दे दिया जाता है, नहीं तो मूल find-file-noselect को कॉल किया जाता है

  • ruler-mode वाकई मज़ेदार है। मुझे बिल्कुल पता नहीं था कि Emacs में ऐसी WYSIWYG feature भी है, और Emacs सच में अजीब लेकिन आनंददायक software है

  • मुझे लगता था कि सिर्फ सामान्य Emacs इस्तेमाल करते हुए मैं लगभग सब देख चुका हूँ, लेकिन खोजने के लिए अभी बहुत कुछ बाकी था। ruler-mode लिखने के लिए काफ़ी बढ़िया है

    • हैरानी इस बात की है कि ऐसी सुविधाएँ Emacs में खुद शामिल हैं। यह मान लेना आसान है कि Emacs सिर्फ ऐसा elisp API देता है जिससे ये चीज़ें बनाई जा सकती हैं, लेकिन मैं बहुत से default tools मिस कर रहा था
      पहले मैं Magit बहुत ज़्यादा इस्तेमाल करता था, लेकिन अब built-in vc-mode और diff tools पर आ गया हूँ, और दोनों बहुत अच्छी तरह काम करते हैं, इसलिए संतुष्ट हूँ
  • मुझे ऐसे लेख पसंद हैं। Emacs या Neovim जैसे जटिल और customize किए जा सकने वाले editor इस्तेमाल करते समय, अक्सर लोग पहले यह समझने से पहले कि base editor क्या कर सकता है, bloated distribution इंस्टॉल कर लेते हैं और बहुत जल्दी आगे बढ़ने लगते हैं
    समय हो तो manual पढ़ना और शुरुआत से अपनी configuration बनाना काफ़ी संतोषजनक होता है। Emacs का एक कम-ज्ञात function finder-list-keywords है; इसे चलाने पर ऐसा menu खुलता है जिससे Emacs की वे सुविधाएँ खोजी जा सकती हैं जिन्हें ढूँढना मुश्किल होता है। उदाहरण के लिए, क्या तुम्हें पता था कि इसमें built-in games 24 हैं?