【问题标题】:Emacs - Mode Line UpdateEmacs - 模式行更新
【发布时间】:2011-12-05 12:27:11
【问题描述】:

我在我的笔记本电脑 (emacs 23.3) 上自定义了我的模式行,它运行良好。

但是当我试图让它在我的学校桌面上工作时(emacs 21.4)它在使用 Ctrl-f, Ctrl 时不会更新-bCtrl-a等,除非我实际修改了缓冲区。

我做了一个case语句来根据我所在的计算机更改代码,所以所有的功能都可以正常工作,只是模式线在移动点时没有更新

我尝试了以下操作

(add-hook 'move-beginning-of-line 'force-mode-line-update)
(add-hook 'move-end-of-line 'force-mode-line-update)
(add-hook 'forward-char 'force-mode-line-update)
(add-hook 'backward-char 'force-mode-line-update)
(add-hook 'next-line 'force-mode-line-update)
(add-hook 'previous-line 'force-mode-line-update)

但是还是没有更新

有什么建议吗?

代码:

(setq-default mode-line-format 
 (list

  "---- "    

  ;; Modified shows *      
  "[" 
  '(:eval 
(if (buffer-modified-p) 
    "*"
    (if buffer-read-only
    "!"
    " "
    )))
  "] "

  ;; Buffer (tooltip - file name)
  '(:eval (propertize "%b" 'face 'bold 'help-echo (buffer-file-name)))


  " "

  ;; Spaces 12 - "buffer"
  '(:eval
    (make-string
     (- 12
  (min
     12
     (length (buffer-name))))
    ?-))

" "
  ;; Current (row,column)
  "(" '(:eval (number-to-string (count-lines 1 (point)))) 
  "," '(:eval (number-to-string (current-column))) 
  ") "

  ;; Spaces 7 - "(r,c)"
  '(:eval
    (make-string
     (- 7
  (min
     4
     (length (number-to-string (current-column)))
  ) 
  (min
     3
     (length (number-to-string (1+ (count-lines 1 (point)))))))
    ?-))

  ;; Percentage of file traversed (current line/total lines)
  " [" 
  '(:eval (number-to-string (/ (* (1+ (count-lines 1 (point))) 100) (count-lines 1 (point-max)))) )
  "%%] "

  ;; Spaces 3 - %
  '(:eval 
    (make-string
     (- 3 (length (number-to-string (/ (* (1+ (count-lines 1 (point))) 100) (count-lines 1 (point-max))))))
    ?-))

  ;; Major Mode
  " [" '(:eval mode-name) "] "

  ;; Spaces 16 + (6 - %)
  '(:eval
    (make-string
     (- 22
  (min
     6
     (length mode-name)))
    ?-))

  " ("

  ;; Time
  '(:eval (format-time-string "%H:%M"))

  ;; Fill with '-'
  ") %-" 
 ))

提前致谢

【问题讨论】:

  • 您要在模式行中输入什么信息?不知道自己要做什么就很难回答这个问题。
  • 如果需要,应该建议 @Yuuta 函数。如果需要,还可以使用add-hook 再次将函数添加到钩子中。
  • @scottfrazer 我在问题中添加了代码。但我正在添加有关缓冲区的信息,以查看其是否已修改或只读、当前列/行、缓冲区名称、离页面顶部的距离、主要模式和时间。
  • @kindahero 我正在查找建议的函数,感谢您提供的信息^^
  • 顺便说一句,您的学校是否意识到他们正在提供如此旧版本的 Emacs?也许你可以让他们更新它。

标签: user-interface emacs init modeline


【解决方案1】:

在原帖的 cmets 中,您在模式行中提到了您想要的以下信息:

  1. 已修改或只读
  2. 列/行号
  3. 缓冲区名称
  4. 我离页面顶部有多远
  5. 主要模式
  6. 当前时间

我一直在使用 emacs,并且 (1)、(3) 和 (5) 都已经在每个缓冲区的默认 emacs 模式行中,并且已经使用了很长时间。要启用 (2) 和 (6),请添加

(display-time-mode 1)
(setq line-number-mode t)
(setq column-number-mode t)

~/.emacs。从我在网上可以找到的,column-number-mode postdates emacs 21.

请注意,这些都不需要显式地重新定义mode-line、覆盖任何函数或添加任何钩子。我没有提供 (4) 的答案,因为我不知道你的意思。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-09
    • 2011-10-20
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多