लिस्प-इंटरैक्शन-मोड क्यों मौजूद है, और क्या हमें कभी इसकी आवश्यकता है?


20

क्यू: क्यों lisp-interaction-modeमौजूद है, और इसके बजाय इसका उपयोग करने के लिए कोई कारण हैं emacs-lisp-mode?

मैनुअल कहा गया है कि emacs-lisp-modeऔर lisp-interaction-modeकि बाद बांध को छोड़कर समान हैं C-jकरने के लिए eval-print-last-sexp। इसके अलावा, "लिस्प इंटरैक्शन मोड में अन्य सभी कमांड Emacs लिस्प मोड की तरह ही हैं।" जहां तक ​​मैं बता सकता हूं, केवल *scratch*बफर बाद वाले मोड का उपयोग करता है।

यह मुझे अजीब लगता है कि एक पूरी विधा है जो केवल एक कीबाइंडिंग द्वारा दूसरे से भिन्न होती है, इसलिए मुझे लगता है कि मैं कुछ इतिहास या संदर्भ याद कर रहा हूं।

इसलिए:

  • क्यों lisp-interaction-modeमौजूद है?
  • C-jकीबाइंडिंग की गिनती नहीं , क्या ऐसी कोई परिस्थितियां हैं जिनमें यह बेहतर होगा emacs-lisp-mode?
  • क्या बफर के मोड को बदलने के*scratch*emacs-lisp-mode लिए कोई अप्रत्याशित परिणाम होंगे ?

इस प्रश्न के लिए प्रेरणा यह है कि, अभी, मैं दो बार (दो मोड में) बाइंडिंग कुंजी हूं ताकि मेरा *scratch*बफर *.elफाइलों पर आने वाले भैंस की तरह व्यवहार करे । अगर lisp-interaction-modeआसपास रखने का कोई व्यावहारिक कारण नहीं है , तो मैं बस (setq initial-major-mode 'emacs-lisp-mode)और इसके साथ ही रहूंगा ।


1
हो सकता है कि आप अपने हर प्रश्न को " Q: " :)
nicael

आप अपनी पसंद के किसी भी प्रमुख मोड का उपयोग कर सकते हैं *scratch*
स्टीफन

3
@nicael: प्रश्न: क्या नहीं करने के बारे में की तरह है क्यू ? तुम मुझे जख्मी करो, सर! ;)
दान

जवाबों:


13

जब तक आप C-jव्यवहार से नफ़रत करते हैं (और मुझे यकीन है कि अधिकांश अति सुंदर लेखकों को यह आसान लगता है), बस चीजों को उसी तरह रखें जैसे वे हैं।

lisp-mode-shared-mapमोड-विशिष्ट कीमैप के लिए उन्हें डुप्लिकेट करने के बजाय अपनी कुंजियों को परिभाषित करें ।

सब के सब lisp-mode-map, emacs-lisp-mode-mapहै, और lisp-interaction-mode-mapहै lisp-mode-shared-mapउनके माता पिता कीमैप के रूप में।


15

एक नया व्युत्पन्न मोड सस्ता है: से lisp-interaction-modeविरासत में मिला emacs-lisp-mode, इसका कार्यान्वयन कोड की एक दर्जन लाइनें या तो है। यह emacs-lisp-modeसिर्फ निम्नलिखित तरीकों से अलग है:

  • इसका एक अलग नाम है;
  • इसका एक अलग कीमैप है;
  • इसकी एक अलग वाक्य रचना तालिका है;
  • इसमें एक अतिरिक्त हुक है।

दूसरी ओर, यह अपनी संक्षिप्त तालिका के साथ साझा करता है emacs-lisp-mode

संपादित करें: जैसा कि उनके जवाब में @phils द्वारा उल्लेख किया गया है (जो देखते हैं), एक आम माता-पिता की कुंजी emacs-lisp-modeऔर lisp-interaction-modeशेयर lisp-mode-shared-map। इसलिए कीबाइंडिंग को डुप्लिकेट करने का कोई कारण नहीं है - बस उन्हें परिभाषित करें lisp-mode-shared-mapऔर वे दोनों मोड पर लागू होंगे (और lisp-modeबहुत, लेकिन यह ठीक है)।

क्या *scratch*बफर के मोड को बदलने के लिए कोई अप्रत्याशित परिणाम होंगे emacs-lisp-mode?

सबसे स्पष्ट परिणाम यह होगा कि lisp-interaction-mode-hookअब *scratch*बफर में नहीं चलाया जाएगा ।


3
इसमें एक अतिरिक्त हुक है। emacs-lisp-mode-hookइस lisp-interaction-modeकारण से चलता है कि कैसे व्युत्पन्न मोड काम करते हैं । यह करता है एक अलग कीमैप है, लेकिन दोनों elisp मोड ही मूल कीमैप का हिस्सा ( lisp-mode-shared-map)। इसमें एक अलग सिंटैक्स तालिका है, लेकिन यह इसके मूल मोड के समान है (क्योंकि यह इसे स्थापित करने के लिए माता-पिता के लिए ख़राब है)।
फिल्स

डार, तुम सही हो। उम्मीद है कि अब सही होगा।
21

4

एफडब्ल्यूआईडब्ल्यू, मैं स्वयं बफर emacs-lisp-modeमें उपयोग करता *scratch*हूं। अगर मैं किसी चीज का मूल्यांकन करना चाहता हूं, तो मैं बस जरूरत पड़ने पर C-x C-eएक C-uउपसर्ग के साथ करता हूं । मैं इस प्रथा के लिए कोई नकारात्मक पहलू नहीं देखता।

जैसे कि मोड क्यों है, यह लिस्प कोड की सिर्फ कुछ पंक्तियाँ है elisp-mode.el, और यह हमेशा की तरह वहाँ रहा है , इसलिए इसे हटाने से यह बेकार लगता है।


मैं इस पहले, क्योंकि मैं चाहता था अपने आप उम्र करना शुरू कर दिया C-jकरने के लिए बाध्य newline-and-indentहै, लेकिन इन दिनों, के रूप में खरोज अधिक अपने आप होता है, यह एक गंभीर चिंता का विषय है अब और है। इसलिए अगर मैंने पहले ही यह बदलाव नहीं किया होता, तो मैं अब इससे परेशान नहीं होता।
हराल्ड हैन्च-ऑलसेन

मुझे भी, जो इसके लायक है - लंबे समय से ऐसा किया है। या मैं एक फेंक *.elफ़ाइल बफर का उपयोग करें ।
आकर्षित किया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.