Valery V. Vorotyntsev ([info]vorotylo) wrote in [info]ru_emacs,
@ 2007-06-07 09:46:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
(osd "Hello, %s!" "word")

Привет. Однажды я писал про прикручивание osd_cat - X On Screen Display - к Emacs-овому джаббер клиенту.

Код возмужал, заматерел и вырос в отдельную функцию ‘osd':

;; ---------------------------------------------------------------------
;; On-Screen Display (OSD) alerts

(if (and (display-graphic-p) (file-executable-p "/usr/bin/osd_cat"))
    (progn
      (defun osd-start ()
        "Start \"osd_cat\" process.
Do nothing if the process exists."
        (unless (get-process "osd_cat")
          (let ((process-connection-type nil))
            (start-process-shell-command
             "osd_cat" nil "osd_cat" "--pos=bottom" "--align=right" "--lines=1"
             "--font='-adobe-helvetica-bold-r-*-*-34-*-*-*-*-*-iso10646-1'"))))

      (defun osd-kill ()
        "Kill \"osd_cat\" process."
        (when (get-process "osd_cat")
          (process-send-eof "osd_cat")
          (delete-process "osd_cat")))

      (defun osd (fmt &rest args)
        "Display message on X screen."
        (process-send-string "osd_cat" (apply 'format (concat fmt "\n") args)))

      (defadvice save-buffers-kill-emacs (before kill-osd-cat)
        "Kill \"osd_cat\" process before exiting Emacs."
        (osd-kill))

      (osd-start))

  ;; unable to run OSD
  (defalias 'osd 'ignore))

При старте Emacs запускается процесс "osd_cat", а уж в него пиши — сколько фантазия позволит.

Моя позволила писать из jabber.el:

;;; --------------------------------------------------------------------
;;; OSD for jabber.el

(when (get-process "osd_cat")
  (defun jabber-message-osd (from buffer text proposed-alert)
    "Display a message using the osd_cat program."
    (let ((jid (if (jabber-muc-sender-p from)
                   from
                 (jabber-jid-user from))))
      (osd (cdr (jabber-activity-lookup-name jid)))))

  (add-hook 'jabber-alert-message-hooks 'jabber-message-osd))

.. и из Gnus:

;;; --------------------------------------------------------------------
;;; OSD for Gnus

(defun split-with-osd (split)
  (osd "Mail")
  split)

(setq nnmail-split-methods 'nnmail-split-fancy
      nnmail-split-fancy
      '(| ("to\\|cc" "haskell-cafe@haskell.org" "mail.haskell-cafe")
          ("from" "\\(recruitment\\|xxxbreak\\)@xxx.com.ua" "mail.junk")
          ("to" "broadcast@xxx.com.ua" "mail.junk")
          (: split-with-osd "mail.misc")))

Happy on-screen displaying!




(Post a new comment)


[info]deepone
2007-06-07 08:28 am UTC (link)
Ценный.

Даже занёс в helpful.el

Ну и потыкался по коды C-h f научился общатся с внешним процессом.

Пасиба.

(Reply to this) (Thread)


[info]vorotylo
2007-06-07 08:43 am UTC (link)
Нема за шо.
(А пост переименуем в п.о.ц. - пост особой ценности.;)

(Reply to this) (Parent)


Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…