Tüm mod hatları yerine etkin mod satırında bir şey göster


10

Bununla mod hattında bir org-zamanlayıcı göstergesi ayarladım.

(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")))

   )))

Bu kuruluş zamanlayıcı göstergesinin tüm mod hatları yerine yalnızca etkin mod satırında gösterilmesini istiyorum . Nasıl yapılır?



@lawlist Kodunuzu anlayamıyorum. Davamda nasıl başvuracağımı bilmiyorum.
stardiviner

1
redisplayMotor, belirli koşullar altında, her bir pencere kontrol edebilir (örneğin, mod hattı doğal yenilendiğinde ya da yenilemek için zorlandığı zaman). Ne zaman mode-line-formatişlevini içeren (selected-window), farklı bir pencere yeniden görüntülemek ziyaretleri çeşitli pencereler olarak iade edilecektir. Bu değer önceden kaydedilmiş bir değerle karşılaştırılabilir - örneğin, post-command-hooken son bilinen kaydı kaydetmek için kullanılabilir selected-windowve bu değer daha sonra içindeki bir işlevle karşılaştırılabilir mode-line-format. Yani, PCH'yi kaydetmek / saklamak için kullanıyorum selected-window.
kanun listesi

@lawlist Kodunuzu kontrol ettim ancak durumum için genel kullanım bulamadım. Bunun yerine başka bir şeye geçersem org-timer. Ne yapmalıyım? Umarım daha genel bir yol. Hatta bana ilham verdi. Bana tam olarak kod örneği verebilir misiniz? Çünkü farklı ayarlanmış buldum 'face, Ama ekran dizesini değiştirmek gerekiyor.
stardiviner

Bunu denemedim, ancak bu soru şuna benzer: emacs.stackexchange.com/q/13842/115
Kaushal Modi

Yanıtlar:


7

Aşağıdaki örnekte, etkin olan pencerenin mod satırında “AKTİF” kelimesi görünecek ve diğer tüm pencereler mod satırında “AKTİF DEĞİL” kelimesini gösterecektir.

emacs -QReklamı verildiği şekilde çalıştığını doğrulamak için bu örneği mutlaka deneyin . Daha sonra, gerektiği gibi özelleştirin.

Aramak için gerekirse ek kancalar ekleyin 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")))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.