LINUX.ORG.RU

Сообщения proofit404

 

Синхронизация значения переменной emacs с внешней средой

Форум — Development

И снова здравствуй, уважаемый LOR.
В продолжение предыдущей темы хочется выяснить подробности синхронизации внутреннего состояния имакса с окружающим миром.
Имеется следующая программная мешанина:

  • n'ное количество elisp функций, работающих скажем с переменной my-parse-tree, в которой валяется, как видно из названия, дерево разбора кода для текущего буфера.
  • внешняя программа способная из файла с кодом на заданном языке строить то самое дерево разбора и выдавать на стандартный вывод записанным его в виде s-expression понятных имаксу.

Необходимо установить двухсторонний обмен между имаксом и парсером так, чтобы при изменении буфера менялось и само дерево разбора.

Топорно можно решить проблему в следующем стиле с поправкой на перезапуск процесса:

(with-current-buffer (generate-new-buffer "*Redirect*")
  (set (make-local-variable 'redirection-session-process)
       (start-process (buffer-name) (buffer-name) "wonderful-parser"))
  (while (not (equal (buffer-substring-no-properties
                      (line-beginning-position)
                      (line-end-position))
                     "**End*Of*Parse*Process**"))
    (accept-process-output redirection-session-process))
  (goto-char (point-max))
  (previous-line)
  (delete-region (line-end-position) (point-max))
  (setq my-parse-tree (read (buffer-string))))

Но при таком долбанном подходе на каждый чих, модифицирующий буфер, парсить придётся весь файл. Сами собой напрашиваются sockets и pipes для перенаправления изменений между прогами. Но замечательный оффтопик нитого ни другого не умеет вроде, а работать и под ним должно.

Ждём-с хэлпов.

 ,

proofit404
()

Небольшие доработки напильником xfce под xmonad

Форум — Desktop

Имеется xfce4, управлять поведением которой хочется из xmonad.
Сделал всё как велит http://www.haskell.org/haskellwiki/Xmonad/Using_xmonad_in_XFCE

import XMonad
import XMonad.Config.Xfce
 
main = xmonad xfceConfig
            { modMask = mod4Mask
            , ...
            }

Собственно всё взлетело, но немного трясёт... Вскрылись следующие, надеюсь устранимые, недостатки:

1) Не получается использовать механизм сохранения сессий, предложенный в доке. Запускаю всё тем же скриптом:
#!/bin/sh
killall xfwm4 && xmonad 
Если кинуть его в автозагрузку, падает добрая часть стартап сервисов, не успевших запуститься до него. Собственно вопрос как можно узнать что все сервисы из стартапа уже запущены? Может оно есть в апихах крысы.

2) Не могу победить опцию sticky window у тамошней проги для заметок - постоянно применяется на стартапе, что приводит к смене фокуса по разным окнам с частотой герц в 25. Сильно бесит выключать каждый раз руками.

3) С заметной переодичностью слетает клавиша настройки переключалки раскладок на панельке. Тоже бесит её постоянно выставлять.

Ждём-с хэлпов desu.

 ,

proofit404
()

Раскрасить буфер по диапазонам из списка в emacs.

Форум — Development

Имеется, скажем, список векторов вида:
([12 34] [56 78] ... [90 123])

Как можно расставить цвета в буфере, используя вектора из списка как начальные/конечные точки регионов. Например, с 12того по 34й символы, с 56того по 78, etc поставить какое-либо значение :foreground & :background цветов.

Единственное, что в голову пришло put-text-property.
Если взлетит, то следить за изменением переменной, хранящей список, получится только таймером?
PS: font lock keywords не предлагать :)

 ,

proofit404
()

RSS подписка на новые темы