Re: display-time modeline faces
[email protected] (Nickolay Pakoulin)
| Newsgroups | gmane.emacs.xemacs.user.russian |
|---|---|
| Message-ID | <[email protected]> |
Привет!
Цифирки времени в modeline рисуются картинками. Картинки берутся из каталога
xemacs-packages/etc/time/
имена картинок 0.xpm, 1.xmp и так далее до 9.xpm
Я посмотрел time 1.13. В этой версии данные для показа цифирок хранятся в
переменных display-time-0-glyph, ... , display-time-9-glyph, отображение
двоеточия (разделителя между часами и минутами) в переменной
display-time-:-glyph.
Похоже, что переменные устроены как пара (cons) extent'а и glyph'а. extent
отвечает за цвет фона (и шрифт для текстовых глифов), а глиф отвечает за
картинку. Если ты хочешь, что бы цифирки отрисовывались буковками некоторого
шрифта, а не картинками, то надо хакнуть перечисленные переменные.
В extent надо прописать нужный шрифт, а глифам указать, что вместо картинок
надо пользоваться буковками. В примере я завожу шрифт display-time-face
который копирую из шрифта для отрисовки имени буфера, и переделываю переменные
для отображения времени.
;; Заменить картинки, которые используются для отрисовки времени в modeline,
;; на буковки
;; Шрифт, который будет использоваться для отрисовки буковок
(copy-face 'modeline-buffer-id 'display-time-face)
(defun hack-display-time-spec (extent glyph string)
;; Заменить картинку в глифе на текст
(set-glyph-image glyph
(make-image-specifier
(list (list 'global
(cons nil (vector 'string :data string))))))
;; указать, каким шрифтом отрисовывать буковки
(set-extent-face extent 'display-time-face))
(defun hack-display-time-glyph (var &optional string)
;; ищем переменную, которая используется задания отрисовки символов
;; в строке времени
(let ((symbol (intern-soft (format "display-time-%s-glyph" var))))
(when symbol
;; переменная устроена как пара (cons extent glyph)
(hack-display-time-spec (car (symbol-value symbol))
(cdr (symbol-value symbol))
;; если новое значение не задано явно,
;; то использовать обозначение для переменной
(or string var)))))
;; символ разделитель между часами и минутами
(hack-display-time-glyph ":")
;; цифры
(dotimes (i 10)
(hack-display-time-glyph (int-to-string i)))
intro: "AS" == Andrey Slusar <[email protected]> writes:
AS> Hi,
AS> а как можно изменить фонт, которым рисуется в modeline время?
AS> -- Андрей Слюсар. JID: [email protected]