@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

Emacsでdabbrev(動的補完)するときに日本語と英単語を区別できた.日本語文中で関数名とか補完できたのね

dabbrev-abbrev-ch-regexpでググったら出てきた.

さくらインターネットのSSH接続で、Emacs+ruby-modeを使う - itouhiroメモここを参考に,ちょっといじって,コメントも追加した

;; http://d.hatena.ne.jp/itouhiro/20091122
(defadvice dabbrev-expand (around jword (arg) activate)
   (interactive "*P")
   (let* ((regexp dabbrev-abbrev-char-regexp)
          (dabbrev-abbrev-char-regexp regexp)
          char ch)
     (if (bobp)
         ()
       (setq char (char-before)
             ch (char-to-string char))
       (cond
        ;; ァ〜ヶの文字にマッチしてる時はァ〜ヶが単語構成文字とする
        ((string-match "[ァ-ヶー]" ch)
         (setq dabbrev-abbrev-char-regexp "[ァ-ヶー]"))
        ((string-match "[ぁ-んー]" ch)
         (setq dabbrev-abbrev-char-regexp "[ぁ-んー]"))
        ((string-match "[亜-瑤]" ch)
         (setq dabbrev-abbrev-char-regexp "[亜-瑤]"))
        ;; 英数字にマッチしたら英数字とハイフン(-)を単語構成文字とする
        ((string-match "[A-Za-z0-9]" ch)
;;         (setq dabbrev-abbrev-char-regexp "[A-Za-z0-9]"))
         (setq dabbrev-abbrev-char-regexp "[A-Za-z0-9-]")) ; modified by peccu
        ((eq (char-charset char) 'japanese-jisx0208)
         (setq dabbrev-abbrev-char-regexp
               (concat "["
                       (char-to-string (make-char 'japanese-jisx0208 48 33))
                       "-"
                       (char-to-string (make-char 'japanese-jisx0208 126 126))
                       "]")))))
     ad-do-it))

そのままやとasync-evalみたいな関数名を補完できなかったのでregexpに-を追加した.(この文打ってる時にも補完できてなんか感動)

また不具合があれば調べて書いていくつもり

[追記] 出典を見つけた.
[http://www.ysnb.net/meadow/meadow-users-jp/2000/msg00787.html:title=Re: [Q] 日本語のabbreviation],[http://www.ysnb.net/meadow/meadow-users-jp/2000/msg00788.html:title=Re: [Q] 日本語のabbreviation].後者が改訂版のようです.ってかad-do-it忘れてたのかな

メーリングリスト面白そうだな.読んでるだけで

対応する括弧への移動(M-C-n,M-C-p)とか出てきてよかった.調べようと思いながら放置してたからな.