1

我在我的笔记本电脑(emacs 23.3)上定制了我的模式行,它运行完美。

但是当我试图让它在我的学校桌面上工作时(emacs 21.4)它在使用Ctrl- fCtrl- 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 '-'
  ") %-" 
 ))

提前致谢

4

1 回答 1

1

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

  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-modeemacs 21。

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

于 2011-12-15T04:15:15.807 回答