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]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.