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.