intro: "MY" == Mikhail Yakshin <yakshin(a)online.ru> writes:
MY> Здравствуйте всем! Либо я что-то не получаю, либо тут подозрительно
MY> тихо.
MY> Я так понимаю, тут планируется обсуждать XEmacs во всяких его
MY> проявлениях, так что я отважусь наверное задать вопрос спецам по XEmacs.
MY> Вопрос такой: есть англо-русский словарь в текстовом (почти) файле. Есть
MY> консольная програмка, которая умеет по нему быстро искать заданное слово,
MY> запускается она примерно так:
MY> findword слово
MY> и на stdout она выводит статью в словаре, связанную с этим словом или
MY> близким к нему. Вопрос состоит в следующем - как бы так хитро прикрутить
MY> все это дело в XEmacs?
MY> Я в силу своих скромных познаний сделал буквально следующее:
MY> (global-set-key [(control f2)] 'dictionary-er)
MY> (defun dictionary-er() "Translates one word from english into russian."
MY> (interactive) (get-buffer-create "Dictionary") (call-process
MY> "/work/dict/findword" nil "Dictionary" nil (read-string "English word: ")
MY> ) )
Попробуй такую функцию:
(defun dictionary-er (word)
(interactive "sEnter word: ")
(let ((buf (get-buffer-create "Dictionary")))
(erase-buffer buf)
(call-process "program" nil buf nil word)
(dictionary-fontify buf)
(set-buffer buf)
(setq buffer-file-coding-system 'koi8-r)
(pop-to-buffer buf t t)))
Здесь надо написать функцию `dictionary-fontify', которая разрисовывает буфер
нужным образом. Идея такая -- ищешь регулярным выражением текст, который надо
разрировать, затем поверх этого текста натягиваешь extent. Если не знаешь, что
такое extent -- см инфо (lispref)Extents. У extent'а можно установить фейс (ака
face), которым extent должен отображаться. О том, что такое фейсы и как ему
присвоить шрифт, см. инфо (lispref)Faces.
MY> Как-то худо-бедно работает, но плохо, что:
MY> 1) Статья показывается как есть - в plain text. Неплохо было бы вычленять
MY> из нее кусок с транскрипцией (я могу написать соотв. regex, вопрос его
MY> применить в e-lisp'е?) и показывать его нужным фонтом (фонт в системе
MY> поставлен). Неплохо бы вылавливать конструкции типа "_текст", которые
MY> являются условным обозначением жирного текста и выделять и их тоже. И
MY> т.п.
Пиши `dictionary-fontify'
MY> 2) Основная проблема, косвенно связанная с п.1 - у меня XEmacs с MULE и
MY> если в тексте статьи (а значит в транскрипции) встречается символ,
MY> которого нет в наборе koi8-r в MULE, XEmacs такой текст не считает
MY> русским и показывает *весь* в кодировке iso8859-1, что делает его
MY> абсолютно нечитабельным.
(setq buffer-file-coding-system 'koi8-r)
MY> 3) Желательно бы, чтобы буфер с переводом появлялся "обстоятельно", как,
MY> например, при make - чтобы сам делил окно пополам, сам если нужно ловил
MY> фокус и т.п.
(pop-to-buffer buf t t)
Коля.