Emacs - Обновление строки режима - PullRequest
1 голос
/ 05 декабря 2011

Я настроил свою строку режима на своем ноутбуке (emacs 23.3), и она отлично работает.

Но когда я попытался заставить его работать на моем рабочем столе в школе (emacs 21.4), он не обновляетсяпри использовании Ctrl - f , Ctrl - b , Ctrl - 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 '-'
  ") %-" 
 ))

Заранее спасибо

1 Ответ

1 голос
/ 15 декабря 2011

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

  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), потому что я не знаю, что вы подразумеваете под ним.

...