[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:05658] Re: カーソル位置の文字の判別方法は?



こんにちは。chiyu@ふくおか、といいます。

亀井さんのお答えを見て、そうか、そうすればいいんだなぁ、
と思いました。(くわしくは理解していませんが、なんとなく、で。)
せっかくだから、自分の考えたことを少し書きます。

>  xyzzy でコード番号で決めうちにしていいのか判らなかったのですが、
> ユニコード番号ならいいんですね…ところでユニコードの表って見たこと
> がないんですが、記号とかは JIS みたいにきれいに並んでるんでしょう 
> か?
並んでます。
http://www.asahi-net.or.jp/~ez3k-msym/index.htm
から入手可能な Unicode 文字コード表プログラム charmapx
なんかはどうでしょう?

>  ただ、亀井さんからもお答えを頂きましたので、こちら(このコードが
> また、本当に何をしているのかさっぱり見当がつかないのですが)を使わ
> せていただくことにします。
コードは全然理解していませんが、何をしているのかは
なんとなく見当がつきました。

あ ⇒ 8
a  ⇒ 4
といった対応表を作って、それを*vz-chartype-table*とする。
vz-get-chartype は、カーソル位置の文字をこの対応表に
あてはめて、文字種番号を返す。

だと思います。

さて。

渡辺さんが
> てください(特に全角・半角の判別方法)。
と書かれていたので、全角と半角を判別するには、
その文字のcharset名を調べて、jisx0208だったら全角、と
判定すればいい、と思ったので、前回C-x = の話を書いたわけです。

/* *** */
おまけ:C-x = の旅のご案内

C-x = でカーソル位置の文字情報が得られます。
では、なんという名前の関数が呼ばれているのでしょう?

M-x describe-key えんたー
C-x =

what-cursor-position という関数が呼ばれていることがわかりました。

では、その定義は?
M-x grep-dialog えんたー
した後で、
パターン名に what-cursor-position を、
ファイル名に *.l を、
ディレクトリに c:/programs/xyzzy/lisp を
(最後のは、xyzzyをインストールしたディレクトリに適宜変更すること)
として、検索する。

cmds.lの802行で関数の定義をしていることがわかりました。

これを見ると、char-code、char-unicode、iso-char-code という
関数を使っていることがわかります。

iso-何とか、という関数に興味があるぞ、というわけで、
M-x apropos えんたー
iso えんたー
の結果を見ると、iso-char-charset、iso-char-code、iso-code-char
という関数があります。

iso-code-char でgrep-dialogすると
cmds.lの746行目からずっと、この関数を使っているぞ?
これは何なんだろう?

というわけで、cmds.lの中の
quote-char-read という関数と、それを使っている
quote-char というコマンド に辿りつきました。

M-x quote-char えんたー
の後で、j と押すと、
JIS X 0208 の文字(全角文字)をEUCコードの16進数表記で
入力すると、対応する文字がバッファに挿入されます。

でも区点コードの方が便利だよなぁ、と思って、作ったのが、

(defun kuten-char-read ()
  (let ((ku (read-integer "区: "))
	(ten (read-integer "点: "))
	code)
    (setq code (+ (* (+ ku 32) 256) (+ ten 32)))))

(defun kuten-char ()
  (interactive "*")
  (let ((code (kuten-char-read))
	char)
    (setq char (iso-code-char code :jisx0208))
    (if (characterp char)
	(insert char)
      (error "区点コード値が変です"))))
/* *** */

ここでハっと気づく。
作りたいのは、全角半角の判定だったよなぁ。
それに、区点コードで入力する方法も、
既にあるかもしれないよなぁ。

練習ということで、許してください。
おじゃましました。お元気で。

Index Home