[Arcana] extending input methods in emacs sucks

Karl Fogel kfogel at red-bean.com
Thu Feb 12 21:49:16 CST 2009


Noah Friedman <friedman at splode.com> writes:
> There is a babel of different input method systems in emacs.  A lot of them
> use "quail".  Some are more direct (e.g. `ucs').  Some of them I just can't
> tell how they work.
>
> Anyway.  All I wanted was to be able to type a euro symbol without having
> to remember what its unicode character number was.  I usually use the
> rfc1345 input method, but of course the euro isn't defined in that.  
>
> And as long as I was adding currency symbols, I wanted a common mnemonic
> prefix for all of them since I couldn't remember the others either.
>
> This is my completely graceless solution.
>
> [...]

Wow.  I just wrote functions and use M-x when I need odd symbols:

 (defun kf-euro ()
   "This is insane.  I should really learn The Right Way to do this in Emacs."
   (interactive)
   ;; (insert 342604) would work too, heh
   (insert "€"))
   
 (defun kf-顿号 ()
   "And you thought `kf-euro' was insane!"
   (interactive)
   ;; (insert 53410) would work too, heh
   (insert "、"))

-K

> ;; This is a macro so it can be used with approximately the same syntax as
> ;; quail-define-rules.
> (defmacro quail-annotate-input-method (method &rest bindings)
>   "Add new bindings to quail-based input methods"
>   (when (symbolp method)
>     (setq method (symbol-name method)))
>   `(progn
>      (require 'quail)
>      (unless (assoc ,method quail-package-alist)
>        (load ,(format "quail/%s" method)))
>      (let ((quail-orig (quail-name)))
>        (unwind-protect
>            (progn
>              (quail-select-package ,method)
>              (quail-define-rules ((append t)) , at bindings))
>          (when quail-orig
>            (quail-select-package quail-orig))))))
>
> ;; Put all the common currency symbols on a "&$" prefix.
> ;; Calling decode-char is a no-op in emacs 23, but emacs 22 doesn't use ucs
> ;; native coding.
> (eval-after-load 'rfc1345
>   '(let ((bindings (mapcar (lambda (p)
>                              (list (car p) (decode-char 'ucs (cadr p))))
>                            '(("&$c" #x00a2)   ; cent
>                              ("&$p" #x00a3)   ; british pound
>                              ("&$u" #x00a4)   ; generic currency sign
>                              ("&$y" #x00a5)   ; yen
>                              ("&$e" #x20ac)   ; euro
>                              ))))
>      ;; macro application for the lose
>      (eval `(quail-annotate-input-method rfc1345 , at bindings))))
>
> _______________________________________________
> Arcana mailing list
> Arcana at red-bean.com
> http://www.red-bean.com/mailman/listinfo/arcana




More information about the Arcana mailing list