Hiển thị một cái gì đó trong dòng chế độ hoạt động thay vì tất cả các dòng chế độ


10

Tôi thiết lập một chỉ báo hẹn giờ tối đa trong dòng chế độ với điều này.

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

   )))

Tôi muốn chỉ báo bộ đếm thời gian tối đa này chỉ được hiển thị trong dòng chế độ hoạt động , thay vì tất cả các dòng chế độ. Làm thế nào để làm nó?



@lawlist Không thể hiểu mã của bạn. Không biết làm thế nào để áp dụng vào trường hợp của tôi.
stardiviner

1
Các redisplayđộng cơ có khả năng kiểm tra từng cửa sổ dưới hoàn cảnh nhất định (ví dụ, khi chế độ dòng được làm mới một cách tự nhiên, hoặc khi nó bị buộc phải làm mới). Khi mode-line-formatchứa hàm (selected-window), một cửa sổ khác sẽ được trả về khi hiển thị lại các cửa sổ khác nhau. Giá trị đó có thể được so sánh với giá trị được ghi trước - ví dụ: giá trị post-command-hookcó thể được sử dụng để ghi lại selected-windowgiá trị đã biết cuối cùng và giá trị đó sau đó có thể được so sánh với một hàm bên trong mode-line-format. Vì vậy, tôi sử dụng PCH để ghi / lưu trữ selected-window.
luật

@lawlist Tôi đã kiểm tra mã của bạn, nhưng không tìm thấy cách sử dụng chung cho trường hợp của tôi. Nếu tôi thay đổi sang điều khác thay vì org-timer. Tôi nên làm gì? Tôi hy vọng một cách tổng quát hơn. Thậm chí nó đã truyền cảm hứng cho tôi. Bạn có thể cho tôi ví dụ mã chính xác hơn? Bởi vì tôi thấy nó được đặt khác nhau 'face, nhưng tôi cần thay đổi chuỗi hiển thị.
stardiviner 17/8/2016

Tôi đã không thử điều này, nhưng câu hỏi này có vẻ tương tự như câu hỏi này: emacs.stackexchange.com/q/13842/115
Kaushal Modi

Câu trả lời:


7

Trong ví dụ sau, từ "HOẠT ĐỘNG HOẠT ĐỘNG" sẽ xuất hiện trong dòng chế độ của cửa sổ đang hoạt động và tất cả các cửa sổ khác sẽ hiển thị từ chữ INACTIVE trực tiếp trong dòng chế độ.

Hãy chắc chắn thử ví dụ này emacs -Qđể xác minh rằng nó hoạt động như quảng cáo. Sau đó, tùy chỉnh nó khi cần thiết.

Thêm móc bổ sung khi cần thiết để gọi 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")))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.