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 ответ

В комментариях к исходному сообщению вы указываете следующую информацию, которую вы хотели бы видеть в строке режима:

  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 постдаты emacs 21.

Обратите внимание, что ничего из этого не требует явного переопределения mode-line, переопределение любых функций или добавление любых хуков. Я не дал ответа на (4), потому что я не знаю, что вы подразумеваете под этим.

Другие вопросы по тегам