2013-04-14 5 views
5

मैं ब्लिंकिंग के लिए और ब्लिंकिंग बंद करने के लिए अलग-अलग अंतराल सेट करना चाहता हूं। मेरा मतलब है, मैं चाहता हूं कि कर्सर एक सेकंड के लिए दृश्यमान रहें और 0.2 सेकंड के लिए बंद हो। मैंने कर्सर प्रलेखन को पढ़ा लेकिन मुझे सबसे नज़दीक मिला है जो ब्लिंक-कर्सर-अंतराल है जो चालू और बंद दोनों को बदलता है।Emacs - कर्सर ब्लिंकिंग के लिए अलग-अलग अंतराल सेट करें

Emacs में इसे अनुकूलित करने का सबसे अच्छा तरीका क्या है?

उत्तर

3

ऐसा कोई Emacs में निर्मित कार्यक्षमता है, लेकिन आप अपने .emacs को निम्नलिखित लाइनों को जोड़कर यह हैक कर सकते हैं दायर:

(defvar blink-cursor-interval-visible 1) 
(defvar blink-cursor-interval-invisible 0.2) 

(defadvice internal-show-cursor (before unsymmetric-blink-cursor-interval) 
    (when blink-cursor-timer 
    (setf (timer--repeat-delay blink-cursor-timer) 
      (if (internal-show-cursor-p) 
       blink-cursor-interval-visible 
      blink-cursor-interval-invisible)))) 
(ad-activate 'internal-show-cursor) 

Emacs नामक एक टॉगल समारोह के साथ कर्सर की निमिष लागू करता है एक टाइमर द्वारा। प्रत्येक बार जब फ़ंक्शन कहा जाता है, तो यह कर्सर को छुपाता है यदि यह वर्तमान में दिखाई दे रहा है, या यह अदृश्य है तो इसे दिखाता है। दुर्भाग्यवश, टाइमर इस फ़ंक्शन को एक निश्चित अंतराल पर कॉल करता है।

कर्सर की स्थिति के आधार पर विभिन्न देरी के समय का एहसास करने के लिए, उपरोक्त कोड advises आंतरिक फ़ंक्शन जो कर्सर को दिखाता या छुपाता है। जब भी फ़ंक्शन को कॉल किया जाता है, तो सलाह टाइमर के विलंब समय को या तो 1 या 0.2 में बदल देती है, इस पर निर्भर करता है कि कर्सर दिखाई दे रहा है या नहीं। यही है, हर बार कर्सर छुपा या दिखाया जाता है, टाइमर का देरी का समय बदल जाता है।

काफी हैकिश, लेकिन यह चाल है।

+1

क्या आप यह समझाएंगे कि यह कैसे काम करता है? मुझे काफी रूचि है। –

+0

उत्तर के लिए धन्यवाद। यदि आप ब्लिंक-कर्सर-मोड को कॉल करते हैं तो यह टूट जाता है लेकिन अपेक्षित काम करता है :) – Jesse

+0

क्या आप ब्रेक होने पर विस्तार से ध्यान देंगे? – Thomas

2

मैं जो चाहता हूं उसका समर्थन करने के लिए blink-cursor-timer-function फ़ंक्शन को संशोधित करने में सक्षम था।

सबसे पहले, आप .2

को blink-cursor-interval का मूल्य संशोधित करने के लिए तो यह कोड चाल करना चाहिए की आवश्यकता होगी: blink-cursor-timer-function हर blink-cursor-interval सेकंड कहा जाता है। तो इस फ़ंक्शन को प्रत्येक 2 सेकंड कहा जाएगा, यह कर्सर को 5 कॉल के लिए चालू रखेगा और फिर इसे 1 के लिए बंद कर देगा। इसलिए 5 कॉल पर 2 कॉल प्रति कॉल आपको 1 सेकंड का समय देगा, फिर केवल .2 बंद समय के सेकंड।

;; change the interval time to .2 
(setq blink-cursor-interval .2) 

;; create a variable that counts the timer ticks 
(defvar blink-tick-counter 0) 

;; this function will be called every .2 seconds 
(defun blink-cursor-timer-function() 
    "Timer function of timer `blink-cursor-timer'." 
    (if (internal-show-cursor-p) 
     (progn 
    (if (> blink-tick-counter 4) 
     (progn 
      (internal-show-cursor nil nil) 
      (setq blink-tick-counter 0)) 
     (setq blink-tick-counter (1+ blink-tick-counter)))) 
    (internal-show-cursor nil t))) 
+0

आपका समाधान ठीक काम करता है, लेकिन दूसरा उत्तर क्लीनर दिखता है और मैं केवल एक ही चुन सकता हूं। वैसे भी, आपको भी धन्यवाद – Jesse

संबंधित मुद्दे