[xyzzy:05658] Re: カーソル位置の文字の判別方法は?
- Subject: [xyzzy:05658] Re: カーソル位置の文字の判別方法は?
- From: chiyu <ma11092c@xxxxxxxxxxxxxxxxx>
こんにちは。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 "区点コード値が変です"))))
/* *** */
ここでハっと気づく。
作りたいのは、全角半角の判定だったよなぁ。
それに、区点コードで入力する方法も、
既にあるかもしれないよなぁ。
練習ということで、許してください。
おじゃましました。お元気で。