[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: [Q] 日本語のabbreviation



永野です。大昔のメールが検索で引っ掛かってきたのでここに繋げます。

At Mon, 07 Aug 2000 10:25:24 +0900 (JST),
Shun-ichi GOTO wrote:
> 後藤> 自分でも全く同じ希望を持っていましたので、
> 後藤> 現実逃避ついでにちょっとだけやってみました。
> 後藤> それなりに目的は達成できているようです。
> 
> なんていっときながらダメダメだったので
> 根本的には変わってませんが、一応改訂しておきます
<>
> 基本的には単純にdabbrev-abbrev-char-regexp をすり替えるという
> だけのものですので、後は起動した時のカーソル周辺の様から
> regexp を作るマトモなcode は誰かお願いします
> 全然考慮してません

これ、本当に本当にずっと欲しいと思っていました。Mule 2.3 はこれっぽい
挙動をしていた(と思う)ので、余計に。
http://www.math.s.chiba-u.ac.jp/~matsu/emacs/emacs20.html#abbrev
に書いてある「Mule2.3@xxxxx の dabbrev」も試してみたのですが、これ、他
の buffer を探してくれないのです。それじゃイヤなんです。

で、後藤さんのコードはそのままでも完璧に使えるのですが、no defadvice &
category で書き直してみました。日本語と ASCII しか考慮していないのは同
じですが、どなたか自然言語に詳しい方が微調整してくだされば... そして本
家 dabbrev.el に組み込んでくだされば... (他力本願)


(defun dabbrev-expand-by-category (arg)
  (interactive "*P")
  (unless (bobp)
    (let (ch ch-ca-set regexp)
      (setq ch (char-before))
      (setq ch-ca-set (char-category-set ch))
      (setq regexp
	    (cond ((aref ch-ca-set ?a) "\\ca") ; ASCII
		  ((aref ch-ca-set ?j) ; Japanese
		   (cond ((aref ch-ca-set ?K) "\\cK") ; katakana
			 ((aref ch-ca-set ?A) "\\cA") ; 2byte alphanumeric
			 ((aref ch-ca-set ?H) "\\cH") ; hiragana
			 ;((aref ch-ca-set ?C) "\\cC") ; kanji
			 ((aref ch-ca-set ?C) "\\cC+\\cH*") ; for okuri-gana
			 (t "\\cj")))	; fool-proof
		  ((aref ch-ca-set ?k) "\\ck") ; hankaku-kana
		  ((aref ch-ca-set ?r) "\\cr") ; Japanese roman ?
		  ;; etc.
		  (t dabbrev-abbrev-char-regexp))) ; save all
      (let ((dabbrev-abbrev-char-regexp regexp))
	(dabbrev-expand arg)))))
(global-set-key "\M-/" 'dabbrev-expand-by-category)

-- 
Keiichiro Nagano