Emacs को कर्सर को ऑफ-स्क्रीन स्थानांतरित करने दें


23

यह प्रश्न मूल रूप से /programming/15895313/let-emacs-move-the-cursor-off-screen पर पूछा गया था , लेकिन सभी उत्तर मुझे कम या ज्यादा मिले "यह नहीं किया जा सकता है" , जो emacs के साथ मैं अभी स्वीकार नहीं करता हूं।

क्या यह संभव है कि Emacs को कर्सर को ऑफ-स्क्रीन ले जाया जाए, जैसे कि ज्यादातर GUI टेक्स्ट एडिटर काम करते हैं? यह सबसे बड़ी चीजों में से एक है जो मुझे परेशान करती है जब मैं किसी GUI संपादक पर Emacs का उपयोग करता हूं। जब मैं नीचे स्क्रॉल करता हूं, तो बफर के शीर्ष पर कर्सर "आगे बढ़ाया जाता है"।

मैंने पहले सोचा था कि यह पूरी तरह से असंभव है, क्योंकि यह Emacs की वास्तुकला में हार्ड-वायर्ड है, लेकिन फिर मैंने कई-कर्सर देखे, जो कि माध्यमिक कर्सर के लिए बिल्कुल ऐसा करता है (यह मानते हुए कि आप स्क्रॉलिंग कार्यों को द्वितीयक पर कार्य करने से रोकते हैं कर्सर)। क्या किसी छिपे हुए बफर में मुख्य कर्सर रखने के लिए कई-कर्सर का उपयोग करना संभव है, और प्रभावी कर्सर जिसे मैं वास्तव में संपादित करता हूं? या शायद कुछ और चालाक चाल? या हो सकता है कि मेरी Googling ने मुझे विफल कर दिया हो और यह वास्तव में बिना किसी जादू के पहले से ही संभव हो?

मैं टर्मिनल एमएसीएस का उपयोग करता हूं, इसलिए इसे वहां काम करना चाहिए।


ध्यान रखें कि सभी कई-शापर्स पैकेज नकली कर्सर को जोड़ रहे हैं जो वास्तविक प्रतिबंधों के अधीन नहीं हैं। मुझे उम्मीद है कि आपके पिछले प्रश्न के सुझावों के आधार पर एक उत्तर होगा।
वामासा

मुझे लगता है कि यह समस्या स्क्रॉल बार का उपयोग करने के लिए विशिष्ट है, क्या यह सही है?
nispio

1
तो आप किस स्क्रॉल कमांड का उपयोग कर रहे हैं, आप उम्मीद करेंगे कि आप कर्सर को अपने साथ नहीं लाएंगे। मेरे अनुभव में PgUp / PgDn या तीर कुंजियों का उपयोग करते समय कर्सर सभी संपादकों में आपका अनुसरण करता है ।
nispio

4
@स्पियो शायद माउस व्हील के साथ स्क्रॉल कर रहा है?
ffevotte

2
पेज अप और पेज डाउन (Cv और Mv) कर्सर को emacs में तब तक नहीं हिलाते जब तक कि कर्सर स्क्रीन से हट न जाए। स्क्रॉल करना (कर्सर) हिलाने से अलग है।
asmeurer

जवाबों:


11

जीएनयू ईएलपीए पर एक नया पैकेज उपलब्ध है जिसे scroll-restoreइस समस्या को दूर करने का प्रयास किया गया है। चुनने के लिए अलग-अलग व्यवहार होते हैं, लेकिन जिस तरह से मैंने इसे अपने लिए कॉन्फ़िगर किया है (नीचे देखें) स्क्रॉलिंग कमांड के दौरान कर्सर को अदृश्य होने का कारण बनता है, और जब मैं फिर से लिखना शुरू करता हूं, तो अपने मूल स्थान पर वापस जाएं।

अब तक, मुझे कुछ बग का सामना करना पड़ा है, लेकिन पैकेज अधिकांश भाग के लिए विज्ञापन-विज्ञापित के रूप में काम करता है। आप इसे स्थापित करके इसका परीक्षण कर सकते हैं

M-x package-install RET scroll-restore RET

पैकेज स्थापित होने के बाद, आप मामूली मोड को सक्षम कर सकते हैं

M-x scroll-restore-mode

व्यक्तिगत रूप से, मैं इसे Scroll Lockकुंजी के लिए बाध्य कर रहा हूं क्योंकि यह बहुत अविश्वसनीय रूप से एप्रोपोस लगता है! यह मैं अपनी इनिट फ़ाइल में जोड़ रहा हूँ:

(require 'scroll-restore)
(scroll-restore-mode 1)
;; Allow scroll-restore to modify the cursor face
(setq scroll-restore-handle-cursor t)
;; Make the cursor invisible while POINT is off-screen
(setq scroll-restore-cursor-type nil)
;; Jump back to the original cursor position after scrolling
(setq scroll-restore-jump-back t)
;; Toggle scroll-restore-mode with the Scroll Lock key
(global-set-key (kbd "<Scroll_Lock>") 'scroll-restore-mode)

1
यदि आपके पास इसके लिए एक कुंजी है, तो मुझे लगता है कि आप इसे कभी-कभी अक्षम करना चाहते हैं। क्या यह मोड सामान्य संपादन के लिए कष्टप्रद है?
टी। वेरॉन

1
@ T.Verron अभी यह बहुत छोटी गाड़ी लगती है, और इसका एक विफलता मोड एक क्षेत्र में अपने कर्सर को "फंसाना" है और इसे छोड़ना नहीं है। एकमात्र तरीका जो मैंने अपने कर्सर को फिर से मुक्त करने के लिए पाया है वह है मोड को अक्षम करना। एक बार जब सभी कीड़े बाहर काम कर रहे हैं, तो मैं हर समय इसका उपयोग करने से बुरा नहीं मानूंगा।
nispio

2
यह कैसे काम करना है? मैं कुछ भी करने के लिए इसे पाने के लिए प्रतीत नहीं कर सकता।
asmeurer

5

जिस विधि का मैं हमेशा उपयोग करता हूं वह उस चिह्न को सेट करना है जहां मैं वापस कूदना चाहता हूं, और फिर जब मुझे बफर का उपयोग करने के लिए किया जाता है, तो मैं उपयोग करने वाले चिह्न को पॉप करता हूं C-u C-SPC। यहां तक ​​कि जब मैं भटकने से पहले निशान सेट करना भूल जाता हूं, तो मुझे पता चलता है कि निशान को पॉप करने से आमतौर पर मुझे बहुत करीब से जमीन मिलती है जहां मैं आया था। यह आंशिक रूप से इस तथ्य के कारण है कि कुछ कमांड ( isearchउदाहरण के लिए) आपके बिना भी साकार होने के निशान को निर्धारित करते हैं। इसलिए अपने संपादन के दौरान, आप अनजाने में ब्रेडक्रंब का थोड़ा सा निशान छोड़ रहे हैं।

प्रलेखन से:

set-mark-command is an interactive compiled Lisp function in `simple.el'.

It is bound to C-@, C-SPC.

(set-mark-command ARG)

....

With prefix argument (e.g., C-u C-SPC), jump to the mark, and set the mark
from position popped off the local mark ring (this does not affect the global
mark ring).  Use C-x C-@ to jump to a mark popped off the global mark ring
(see `pop-global-mark').

मैं लगभग कभी भी बुकमार्क या रजिस्टर सेट करने से परेशान नहीं होता, लेकिन मैं लगभग हमेशा अपना रास्ता ढूंढ सकता हूं, जहां मैं जल्दी से C-u C-SPCया तो इस्तेमाल करके आया था pop-global-mark


सच कहूँ तो, मुझे लगता है कि मुख्य कारण लोग चाहते हैं कि कर्सर ऑफ़-स्क्रीन को स्थानांतरित करने में सक्षम हो, क्योंकि वे संपादकों के लिए उपयोग किए जाते हैं जिनके पास कर्सर पदों का उचित इतिहास नहीं है। आप इसे ऐसा भी बना सकते हैं scroll-upऔर scroll-downस्वचालित रूप से चिह्न सेट कर सकते हैं, ताकि यह C-u C-SPCसुनिश्चित हो जाए कि आप वापस वहीं आ जाएं जहां से आप आए थे।
रेडन रोसबोरो

0

माउस व्हील स्क्रॉल के बाद वापस कूदने के लिए निम्न कोड पर्याप्त है:

(advice-add 'mwheel-scroll :before (lambda (arg) (if (not (eq last-command 'mwheel-scroll)) (setq point-before-mwheel-scroll (window-point)))))
(defun jump-back () (goto-char point-before-mwheel-scroll))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.