Làm cách nào để nối chuỗi được cập nhật vào dòng chế độ?


9

Tôi muốn thêm một số thông tin (thay đổi theo thời gian) vào định dạng dòng chế độ và sau đó sử dụng nó trong tiêu đề.

Tôi nghĩ rằng một lần một phút tôi sẽ đặt định dạng tiêu đề khung thành định dạng của chế độ dòng-line + định dạng pomodoro.

Một cái gì đó dọc theo dòng:

(defun runOnceAMinute ()
   (setq frame-title-format (concat mode-line-format my/PomodoroCount))
)

Nhưng tôi không thể tìm ra cách.

EDIT
Tôi sẽ cần cập nhật chuỗi mà tôi chắp thêm. Ví dụ, số pomodoro sẽ tăng sau mỗi pomodoro.

EDIT 2
Tôi đã làm cho nó hoạt động bằng cách chỉnh sửa mode-line-formatbiến và sử dụng cấu trúc eval:

("%e" ......... "[Pomodorors: " (:eval (number-to-string my/pomCount)) "]") 

Đây không phải là câu trả lời ban đầu của Drew, nhưng Drew đã đề cập đến nó trong bình luận của mình.


1
mode-line-formatđã được đơn giản hóa trong những năm gần đây để (ít nhiều) chỉ là một danh sách nhỏ các biến khác; do đó, bạn thường sửa đổi một trong các biến con đó (hoặc một số hậu duệ nữa), thay vì mode-line-formatchính nó. Xem C-h v mode-line-format, và sau đó tương tự C-h vcho bất kỳ biến thành phần nào bạn muốn tìm hiểu.
phils

Điều đó khá gần với những gì tôi muốn. Tôi đã chỉnh sửa dòng chế độ: (..... "HI" )và điều này hiện lên. Nhưng nếu tôi muốn in một số nguyên, nó không hiển thị? (.... (number-to-string my/count)) bất cứ ý tưởng tại sao?
Leo Ufimtsev

1
Đọc C-h v mode-line-formatkỹ: nó mô tả hành vi của các cấu trúc khác nhau mà bạn có thể sử dụng và nó hơi phức tạp. Để biết thêm chi tiết, xem hướng dẫn:C-h i g (elisp) Mode Line Format
phils

Tôi đọc tài liệu, nhưng dường như không thể hiểu làm thế nào để nối một số nguyên vào danh sách?
Leo Ufimtsev

Tôi sử dụng doom-modeline, thêm phân đoạn pomodoro như thế này:(defun my-eval-string (string) "Evaluate elisp code stored in a string." (eval (car (read-from-string string)))) ;; pomodoro (doom-modeline-def-segment pomodoro "pomodoro segment" (my-eval-string "pomodoro-mode-line-string"))
HelloNewWorld

Câu trả lời:


6

Nối nó vào global-mode-string. Nếu chuỗi định dạng dòng chế độ của bạn để nối thêm my-stringthì:

(setq global-mode-string
      (cond ((consp global-mode-string)
             (add-to-list 'global-mode-string my-string 'APPEND))
            ((not global-mode-string)
             (list my-string))
            ((stringp global-mode-string)
             (list global-mode-string my-string))))

[Thay vào đó, nếu bạn muốn chuyển trướcglobal-mode-stringthì bạn sẽ xóa 'APPENDđối số tùy chọn và đảo ngược thứ tự của danh sách cuối cùng : (list my-string global-mode-string).]


FWIW, ngày nay cũng có mode-line-misc-info( global-mode-stringtheo mặc định là thành viên).
phils

1
@phils: Vâng, có. Không thay đổi câu trả lời của tôi, nhưng vẫn còn nhiều câu trả lời khác. ;-) Có nhiều cách để lột da con mèo này.
vẽ

Xin chào, điều này rất gần với những gì tôi muốn :-). Tôi nghĩ rằng tôi đã không đặt câu hỏi chính xác. Khi tôi đã thêm số pomodoro, làm cách nào để cập nhật số đó? Mỗi lần tôi gọi hàm đó, nó sẽ thêm nhiều thứ vào dòng chế độ.
Leo Ufimtsev

Sau đó, thay vì thêm một chuỗi không đổi vào global-mode-string, hãy sử dụng (:eval.... Đó thực sự là một câu hỏi khác nhau.
vẽ

@Drew, tôi đã thử (..... (:eval (number-to-string my/pc))) với / pc của tôi là một số nguyên mà tôi đặt trước. Nhưng số không hiển thị trong dòng chế độ?
Leo Ufimtsev

2
(setq-default mode-line-misc-info "My Text Goes Here")

Nên nối các dữ liệu trên vào dòng chế độ của bạn.

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.