emacs, क्षेत्र की प्रतिलिपि कैसे बनाएं, और इसे हाइलाइट किया गया छोड़ें?


9

मैं डिफ़ॉल्ट Mw के साथ काफी खुश हूं (kill-ring-save)जो कमांड चलाने पर क्षेत्र के हाइलाइटिंग को खो देता है। मैं इसके व्यवहार में बदलाव नहीं करना चाहता, लेकिन मैं <C-insert>एक समान कार्रवाई करने और क्षेत्र के हाइलाइटिंग को बनाए रखने के लिए फिर से बाध्य करना चाहता हूं ।

मैंने कोशिश की है (संयुक्त राष्ट्र) transient-mark-modeसीधे और एक समारोह के माध्यम से सेटिंग , लेकिन क्षेत्र अभी भी अपनी हाइलाइटिंग खो देता है।

केवल (kill-ring-save (region-beginning) (region-end))एक इंटरेक्टिव फ़ंक्शन में चलना उम्मीद के मुताबिक काम करता है, अर्थात। यह हाइलाइटिंग खो देता है।

केवल (exchange-point-and-mark) (exchange-point-and-mark)एक इंटरेक्टिव फ़ंक्शन में चलना उम्मीद के मुताबिक काम करता है, अर्थात। यह इस क्षेत्र को फिर से उजागर करता है और इसके मूल / सही स्थान पर बिंदु / पत्ते डालता है।

हालाँकि जब मैं एक समारोह में उन सभी को एक साथ रखता हूं, तो यह इस क्षेत्र को फिर से उजागर नहीं करता है। यहां गैर-कामकाज फ़ंक्शन और बाध्यकारी है:

(defun kill-ring-save-keep-highlight ()
  (interactive)
  (kill-ring-save (region-beginning) (region-end))
  (exchange-point-and-mark) (exchange-point-and-mark)
)
(global-unset-key (kbd "<C-insert>"))
(global-set-key   (kbd "<C-insert>") 'kill-ring-save-keep-highlight)

उपयोग करना: Ubuntu 10.04.3 में GNU Emacs 23.1.1

जवाबों:


8

रनिंग kill-ring-saveसीधे निशान को निष्क्रिय नहीं है, लेकिन केवल चर सेट deactivate-markकरने के लिए tआदेश में के लिए छोड़ना किया जाना बाद में । इसे रोकने के लिए, निष्क्रिय करने deactivate-markसे nil पहले रीसेट करें ।

(defun kill-ring-save-keep-highlight (beg end)
  "Keep the region active after the kill"
  (interactive "r")
  (prog1 (kill-ring-save beg end)
    (setq deactivate-mark nil)))

(global-set-key (kbd "<C-insert>") 'kill-ring-save-keep-highlight)

0

क्षेत्र को हाइलाइट किया गया है क्योंकि निशान "सक्रिय" है - इसलिए स्पष्ट रूप से निशान को सक्रिय करना चाल करता है। नोट: मुझे पूरा यकीन नहीं है कि बिंदु / चिह्न का आदान-प्रदान क्यों नहीं होता है। यहां एक अद्यतन फ़ंक्शन है, मैंने तर्कों में भरने के लिए इंटरैक्टिव का उपयोग करने के लिए भी इसे अपडेट किया।

(defun kill-ring-save-keep-highlight (beg end)
  "Keep the region active after the kill"
  (interactive "r")
  (kill-ring-save beg end)
  (activate-mark))

इंटरैक्टिव आर्ग्स पर संकेत के लिए धन्यवाद और activate-mark, लेकिन यह अभी भी काम नहीं करता है। मैंने .emacsइस फ़ंक्शन के एकमात्र कोड के साथ उबंटू 11.04 का एक क्लीन-स्लेट वीएम भी स्थापित किया , लेकिन यह अभी भी निशान को सक्रिय नहीं करता है, फिर भी हाइलाइटिंग को बहाल करने के C-x C-xतुरंत बाद मैन्युअल रूप से आवेदन C-insertकरता है ...
पीटर.ओ.

@ यदि आपने इसे Emacs w / out .emacs में आज़माया है? यानी emacs -qकोड के साथ चलाएं और देखें कि क्या यह काम करता है।
ट्रे जैक्सन

मैंने इसे (अनजाने में) इस एक फ़ंक्शन के अलावा~/.emacs और बिना कुछ के बिना चलाया था ~/.emacs.d/, और जैसा कि उल्लेख किया गया है, एक ब्रांड नए वीएम में एमएसीएस की एक नई स्थापना में भी .... मैंने अब इस कमांड की कोशिश की है, लेकिन यह भी काम नहीं करता है: /usr/bin/emacs --no-init-file --no-site-file --eval '(defun kill-ring-save-keep-highlight (beg end) (interactive "r") (kill-ring-save beg end) (activate-mark))'... क्या फ़ंक्शन foryou काम करता है?
पीटर।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.