Article View: fj.editor.emacs
Article #539Re: buffer 内の位置を読み込む方法は
From: Katsumi Yamaoka
Date: Thu, 08 Jul 2004 04:06
Date: Thu, 08 Jul 2004 04:06
83 lines
3837 bytes
3837 bytes
;; 難波さんの記事は配送されてきましたよ。:)
>>>>> In <uk6xf45hq.fsf@tonewin.kuciv.kyoto-u.ac.jp>
>>>>> ms@wr.kuciv.kyoto-u.ac.jp wrote:
> (point) は、現在のカーソルの位置を返します。これとは違って、
> つぎのような関数がないでしょうか。
> その関数を実行すると、それ以降キーを監視して、
> * 矢印キー あるいは、C-n, C-p, C-b, C-f だったら、その矢
> 印キーあういは C-n, C-p, C-b, C-f をタイプしたときの通
> 常の動作にしたがってカーソル位置が変更される。
> * それ以外のキーを押したら、そのときのカーソル位置を返す。
> ちょっと自分で書いてみたのですが、不十分です。
[...]
> get-point が、求める関数のつもりですが、つぎの点で不十分です。
> * 矢印キーには対応できていない。read-movement 関数で使用してい
> る read-char ではダメ。
read-event ではいかがでしょうか? C-p => 16, ↑ => up
> * ミニバッファに押したキーに関する情報がエコーされるのが嫌。
(setq p (read-char))
の代わりに
(setq p (let ((echo-keystrokes 0)) (read-event)))
のようにして キーを読むときだけ echo-keystrokes の値を 0 に束縛
するとか。
キーを読んで何かする関数の代わりに、Emacs 流のマイナーモードを書
いてみました。M-x get-point-mode RET で開始、q で終了です。
--8<---------------cut here---------------start------------->8---
(defvar get-point-mode-map nil)
(if get-point-mode-map
nil
(let ((map (make-sparse-keymap))
(commands '(backward-char forward-char next-line previous-line))
command keys key)
(define-key map [t] (lambda nil
(interactive)
(message "%s" (point))))
(define-key map "q" (lambda nil
(interactive)
(call-interactively 'get-point-mode)))
(while commands
(setq command (car commands)
commands (cdr commands)
keys (where-is-internal command global-map))
(while keys
(setq key (car keys)
keys (cdr keys))
(define-key map key command)))
(setq get-point-mode-map map)))
(define-minor-mode get-point-mode
"Show point in the echo area."
nil " Get-Point" get-point-mode-map)
--8<---------------cut here---------------end--------------->8---
define-minor-mode でもって get-point-mode というトグル・コマンド
(関数) を生成させます。そのマイナーモードが ON のとき、通常のキー
マップの代わりに get-point-mode-map が使われます。プログラム中の
(define-key map [t] コマンド)
における [t] というキーは、特にコマンドを割り振っていない全部の
キーを指します。
;; こうして眺めると、過去に先達の皆さんから教わったことの集大成
;; だなあ。:)
--
Katsumi Yamaoka <yamaoka@jpl.org>
Technical Details
Message-ID:
<b9yisczgn1n.fsf@jpl.org>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!fu-berlin.de!uni-berlin.de!not-for-mailReferences:
<uk6xf45hq.fsf@tonewin.kuciv.kyoto-u.ac.jp>Show Full Headers
Complete Article Headers
X-Google-Thread: ff358,3295602bb33cd8af X-Google-Attributes: gidff358,public X-Google-Language: Japanese,JIS Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Katsumi Yamaoka <yamaoka@jpl.org> Newsgroups: fj.editor.emacs Subject: Re: buffer 内の位置を読み込む方法は Date: Thu, 08 Jul 2004 13:06:44 +0900 Organization: Emacsen advocacy group Lines: 83 Message-ID: <b9yisczgn1n.fsf@jpl.org> References: <uk6xf45hq.fsf@tonewin.kuciv.kyoto-u.ac.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp X-Trace: news.uni-berlin.de n1aG2wBQluZKvwJFydZa0g79YkrWQatvIhtrXYfz2KrAehhwI= X-Face: #kKnN,xUnmKia.'[pp`;Omh}odZK)?7wQSl"4o04=EixTF+V[""w~iNbM9ZL+.b*_CxUmFk B#Fu[*?MZZH@IkN:!"\w%I_zt>[$nm7nQosZ<3eu;B:$Q_:p!',P.c0-_Cy[dz4oIpw0ESA^D*1Lw= L&i*6&( User-Agent: Gnus/5.110003 (No Gnus v0.3) Emacs/21.3.50 (gnu/linux) Cancel-Lock: sha1:mpo0/f/q4kpevtqB8bni7wo1Lhs=