Emacs - Обновление строки режима
Я настроил свою мод-линию на своем ноутбуке (emacs 23.3), и она отлично работает.
Но когда я попытался заставить его работать на моем рабочем столе в школе (emacs 21.4), он не обновляется при использовании Ctrl-f, Ctrl-b, Ctrl-a и т. Д., Если я фактически не изменяю буфер.
Я сделал заявление для изменения кода в зависимости от того, на каком компьютере я работаю, поэтому все функции работают правильно, просто строка режима не обновляется при перемещении точки
Я пытался сделать следующее
(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 '-'
") %-"
))
заранее спасибо
1 ответ
В комментариях к исходному сообщению вы указываете следующую информацию, которую вы хотели бы видеть в строке режима:
- изменен или только для чтения
- номер столбца / строки
- имя буфера
- как далеко от верхней части страницы я нахожусь
- основной режим
- Текущее время
Я использовал 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
постдаты emacs 21.
Обратите внимание, что ничего из этого не требует явного переопределения mode-line
, переопределение любых функций или добавление любых хуков. Я не дал ответа на (4), потому что я не знаю, что вы подразумеваете под этим.