link0ff: Juri (Default)
link0ff ([personal profile] link0ff) wrote2006-05-05 04:15 pm
Entry tags:

Добавление комментариев в ЖЖ при помощи Емакса

Как я уже писал автору ljupdate, после того, как я начал использовать ljupdate, единственное, чего мне не хватало, это возможности отвечать на ЖЖ комментарии в Емаксе.

Я посмотрел, как это сделано в Semagic, и обнаружил, что там это делается через ж... ужасный хак. В браузере на ссылке, ведущей на добавление комментария, из меню запускается Semagic. Дальше в Semagic пишется комментарий, и после нажатия на кнопку Post, этот комментарий автоматически копируется в поля формы в браузере, после чего опять нужно нажать на кнопку Post, только на этот раз уже в браузере.

Увидев это, я сразу вспомнил, что уже видел что-то подобное в Firefox. Соответствующее расширение называется mozex. Я его пару лет назад использовал в Mozilla, но оно перестало работать в Firefox. Теперь я нашел новую версию, настроил, и все прекрасно заработало.

Итак, что нужно сделать для того, чтобы писать ЖЖ комментарии в Емаксе:

  1. Идем на сайт mozex.mozdev.org, оттуда идем дальше по ссылке на http://www.gatsby.ucl.ac.uk/~iam23/code/mozex, и на этой странице кликаем на ссылку с текстом "Install a UTF-8 forcing, Firefox 1.5 compatible version of Mozex." Эта ссылка ведёт на файл mozex_utf8-1.071.xpi, т.е. mozex с поддержкой Unicode.
  2. После установки mozex и перезагрузки браузера, открываем Tools->Extension и Preferences для mozex. В настройках в поле Textareas пишем `/full-path/emacsclient %t', где full-path - полный путь к emacsclient. Если используется Емакс из CVS, то и путь тоже должен быть к emacsclient из CVS, т.е. из подкаталога lib-src, т.к. emacsclient из CVS не совместим с более старыми версиями.
  3. В свой .emacs добавляем (и запускаем) такой код:
    (server-start)
    (defun my-lj-reply-visit ()
      (when (string-match "^mozex\\.textarea"
                          (file-name-nondirectory (buffer-file-name)))
        (recode-region (point-min) (point-max) 'utf-8 'koi8)
        (set-buffer-file-coding-system 'utf-8)))
    (add-hook 'server-visit-hook 'my-lj-reply-visit)
    (defun my-lj-reply-switch ()
      (when (string-match "^mozex\\.textarea"
                          (file-name-nondirectory (buffer-file-name)))
        (html-mode)))
    (add-hook 'server-switch-hook 'my-lj-reply-switch)
    

    При желании берём у [info]akshaal код для добавления времени написания комментария и вешаем его на хуки server-visit-hook и server-done-hook.
  4. Теперь для использования всего этого хозяйства, в пустом поле для ответа в браузере из popup-меню выбираем mozex->Edit Textarea, и переключааемся в Емакс. Пишем ответ и нажимаем `C-x #'. Переключаемся обратно в Firefox, и кликаем левой кнопкой мышки в Textarea. Написанный в Емаксе текст появляется в браузере. Нажимаем кнопку Post, и вуаля!
User-Agent: Emacs-ljupdate/3.9.0 Emacs/22.0 (i686-pc-linux-gnu)

[identity profile] link0ff.livejournal.com 2006-05-07 07:49 pm (UTC)(link)
Можно сделать и без перегрузки html-страницы. Например, если mozex настроить так, чтобы из меню mozex->Link=>Send_link запускался бы, например, emacsclient -e (send-link"%r"), то в Емаксе можно при помощи http-get выкачивать html, парсить, и после C-c C-c при помощи http-post отсылать на talkpost_do.bml. Можно сделать проще: повесить (send-link"%t") на mozex->View_Page_Source, тогда Емакс будет получать уже готовый html-source.
Всё остальное можно делать также в Емаксе.