แสดงบางอย่างในบรรทัดโหมดที่ใช้งานแทนทุกบรรทัดโหมด


10

ฉันตั้งค่าตัวบ่งชี้ org-timer ในบรรทัดโหมดด้วยสิ่งนี้

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

   )))

ฉันต้องการให้ตัวบ่งชี้ org-timer นี้แสดงในบรรทัดโหมดแอ็คทีฟเท่านั้นแทนที่จะเป็นโหมดโหมดทั้งหมด ทำอย่างไร?



@lawlist ไม่เข้าใจรหัสของคุณ ไม่ทราบวิธีการสมัครในกรณีของฉัน
stardiviner

1
เอ็นredisplayจิ้นสามารถตรวจสอบแต่ละหน้าต่างได้ในบางกรณี (เช่นเมื่อบรรทัดโหมดถูกรีเฟรชตามธรรมชาติหรือเมื่อถูกบังคับให้รีเฟรช) เมื่อmode-line-formatมีฟังก์ชั่นที่(selected-window)มีหน้าต่างที่แตกต่างกันจะถูกส่งกลับเป็น redisplay เยี่ยมชมหน้าต่างต่างๆ ค่าที่สามารถนำมาเปรียบเทียบกับค่าที่บันทึกไว้ล่วงหน้า - เช่นที่post-command-hookสามารถนำมาใช้ในการบันทึกสุดท้ายที่รู้จักกันและความคุ้มค่าที่สามารถมาเทียบกับฟังก์ชั่นภายในที่selected-window mode-line-formatดังนั้นผมใช้ PCH ในการบันทึก / selected-windowเก็บ
กฎหมาย

@lawlist ฉันตรวจสอบรหัสของคุณแล้ว แต่ไม่พบการใช้งานทั่วไปสำหรับกรณีของฉัน ถ้าผมเปลี่ยนสิ่งอื่น ๆ org-timerแทน ฉันควรทำอย่างไรดี? ฉันหวังว่าวิธีทั่วไปมากขึ้น แม้มันจะเป็นแรงบันดาลใจให้ฉัน คุณช่วยยกตัวอย่างรหัสที่ตรงกว่านี้ให้ฉันได้ไหม เพราะฉันพบว่ามันแตกต่างกัน'faceแต่ฉันต้องเปลี่ยนสตริงการแสดงผล
stardiviner

ฉันไม่ได้ลองสิ่งนี้ แต่คำถามนี้คล้ายกับคำถามนี้: emacs.stackexchange.com/q/13842/115
Kaushal Modi

คำตอบ:


7

ในตัวอย่างต่อไปนี้คำว่า "ใช้งานอยู่" จะปรากฏในบรรทัดโหมดของหน้าต่างที่ใช้งานอยู่และหน้าต่างอื่น ๆ ทั้งหมดจะแสดงคำว่า "ไม่ใช้งาน" ในโหมดบรรทัด

อย่าลืมลองตัวอย่างนี้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")))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.