सभी मोड लाइनों के बजाय सक्रिय मोड लाइन में कुछ दिखाएं


10

मैंने इसके साथ मोड लाइन में एक ऑर्ग-टाइमर इंडिकेटर सेट किया।

(setq-default
 mode-line-format
 (quote
  (
   ;; org-timer
   (:eval
    (unless (not org-timer-countdown-timer)
      (propertize (let* ((rtime (decode-time
                                 (time-subtract
                                  (timer--time org-timer-countdown-timer)
                                  (current-time))))
                         (rmins (nth 1 rtime))
                         (rsecs (nth 0 rtime)))
                    (format "🕔 %d:%d" rmins rsecs))
                  'face '(:foreground "cyan" :weight bold)
                  'help-echo "org-timer")))

   )))

मैं चाहता हूं कि यह ऑर्ग-टाइमर संकेतक सभी मोड लाइनों के बजाय केवल सक्रिय मोड लाइन में दिखाया जाए । यह कैसे करना है?



@lawlist आपके कोड को नहीं समझ सकती। पता नहीं कैसे मेरे मामले पर लागू करने के लिए।
स्टारडाइवर

1
redisplayइंजन कुछ निश्चित परिस्थितियों में प्रत्येक विंडो की जाँच करने में सक्षम है (उदाहरण के लिए, जब मोड लाइन स्वाभाविक रूप से ताज़ा किया जाता है, या जब यह ताज़ा करने के लिए मजबूर किया जाता है)। जब mode-line-formatफंक्शन (selected-window)सम्‍मिलित होता है , तो एक अलग विंडो लौटा दी जाएगी, क्योंकि विभिन्न विंडो पर रिडिजेल्‍प विजिट करता है। उस मान की तुलना पहले से रिकॉर्ड किए गए मूल्य से की post-command-hookजा सकती है - उदाहरण के लिए, अंतिम ज्ञात को रिकॉर्ड करने के लिए इस्तेमाल किया जा सकता है selected-windowऔर बाद में एक फ़ंक्शन के साथ उस मूल्य की तुलना की जा सकती है mode-line-format। इसलिए, मैं पीसीएच को रिकॉर्ड / स्टोर करने के लिए उपयोग करता हूं selected-window
4

@lawlist मैंने आपके कोड की जाँच की है, लेकिन मेरे मामले के लिए सामान्य उपयोग नहीं पाया है। अगर मैं इसके बजाय दूसरी चीज़ में बदलूं org-timer। मुझे क्या करना चाहिए? मुझे और अधिक सामान्य तरीके की उम्मीद है। यहां तक ​​कि इसने मुझे प्रेरित किया। क्या आप मुझे अधिक सटीक कोड उदाहरण दे सकते हैं? क्योंकि मुझे लगा कि यह अलग है 'face, लेकिन मुझे डिस्प्ले स्ट्रिंग बदलने की जरूरत है।
स्टारडाइवर

मैंने यह कोशिश नहीं की है, लेकिन यह प्रश्न इस तरह दिखता है: emacs.stackexchange.com/q/13842/115
कौशल मोदी

जवाबों:


7

निम्नलिखित उदाहरण में, "सक्रिय" शब्द विंडो की मोड-लाइन में दिखाई देगा जो सक्रिय है, और अन्य सभी विंडो मोड-लाइन में "INACTIVE" शब्द प्रदर्शित करेंगी।

इस उदाहरण को आज़माने के लिए सुनिश्चित emacs -Qकरें कि यह विज्ञापित के रूप में काम करता है। इसके बाद, आवश्यकतानुसार इसे अनुकूलित करें।

कॉल करने के लिए आवश्यकतानुसार अतिरिक्त हुक जोड़ें ml-update-all

(defvar ml-selected-window nil)

(defun ml-record-selected-window ()
  (setq ml-selected-window (selected-window)))

(defun ml-update-all ()
  (force-mode-line-update t))

(add-hook 'post-command-hook 'ml-record-selected-window)

(add-hook 'buffer-list-update-hook 'ml-update-all)

(setq-default mode-line-format
  '(:eval
      (if (eq ml-selected-window (selected-window))
        "ACTIVE"
        "INACTIVE")))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.