昨晩はたいへん失礼いたしました。
>>>> In
<14199.26008.25345.27511F(a)auge.muse.ba2.so-net.ne.jp>
>>>> Masahiro MURATA (村田全寛) <muse(a)ba2.so-net.ne.jp> wrote:
山岡> なるほど、せっかくですから XEmacs でもこれを使うようにしてしまい
山岡> ましょう。
村田さん> では,送ります。オリジナル(+egg-its.patch-new) からのパッチ
村田さん> です。XEmacs 用に変更した点は menu:goto-nth-element でのキー
村田さん> の取得処理とあと一つあったのですが,忘れてしまいました…(^^;;;
どうもありがとうございます。
しかしこれ、patch 2.5 では完璧に弾かれますね。村田さんが作られたパッチ
は一見正常なのですが、こういったかなり広い領域を全とっかえするようなも
のでは起こることなんでしょうか。今度自分でパッチを作るときは、ちゃんと
当たることを確認しようと肝に命じました。(^^;;)
では、手作業でパッチした村田さんの版 (-) とぼくの版 (+) との menu 機構
に関する照合結果を報告いたします。
@@ -366,4 +376,4 @@
+;;(define-key minibuffer-local-menu-map [switch-frame] nil)
+;;(define-key minibuffer-local-menu-map [delete-frame] nil)
+;;(define-key minibuffer-local-menu-map [iconify-frame] nil)
+;;(define-key minibuffer-local-menu-map [make-frame-visible] nil)
このような menu は XEmacs では無いようなので、ぼくの版では削除しました。
@@ -371,6 +387,4 @@
-(define-key minibuffer-local-menu-map [t] 'undefined)
-(let ((meta-map (make-sparse-keymap)))
- (define-key minibuffer-local-menu-map
- (char-to-string meta-prefix-char) meta-map)
- (define-key minibuffer-local-menu-map [escape] meta-map))
-(define-key minibuffer-local-menu-map (vector meta-prefix-char t) 'undefined)
+(define-key minibuffer-local-menu-map
+ (char-to-string meta-prefix-char) 'ignore)
+(define-key minibuffer-local-menu-map [escape] 'ignore)
+(define-key minibuffer-local-menu-map "\C-x" 'ignore)
menu で一度でも ESC キーをタイプしてしまうと C-g 以外ではウンともスン
とも言わなくなってしまうので、このようにしてあります。
@@ -571,1 +585,1 @@
-(if (eq (car menu:*select-positions*) nil)
+(if (string= (car menu:*select-positions*) "nil")
何じゃこれは。理解不能 (^^;;)。山本光晴さんの版でも + のようになってい
ますが、この部分にはぜったい来ないはずなので削除してしまいませんか?
@@ -583,3 +601,1 @@
-(defun menu:minibuffer-setup ()
- (if (eq minibuffer-history-variable 'menu:*select-positions*)
- (menu:goto-selection)))
+(defalias 'menu:minibuffer-setup 'menu:goto-selection)
ううむ、村田さん (-) に脱帽です。ぼくはこのような条件判断は不要だと思っ
たのですが、やはり必要なんでしょうか?
@@ -642,14 +658,15 @@
-(defun menu:goto-nth-element ()
- (interactive)
- (let* ((ch (event-key last-command-event))
- (elem-no-max (1- (menu:selection-element-length))))
- (cond
- ((and (characterp ch) (<= ?0 ch) (<= ch ?9)
- (<= ch (+ ?0 elem-no-max)))
- (menu:goto-element (- ch ?0)))
- ((and (characterp ch) (<= ?a ch) (<= ch ?z)
- (<= (+ 10 ch) (+ ?a elem-no-max)))
- (menu:goto-element (+ 10 (- ch ?a))))
- ((and (characterp ch) (<= ?A ch) (<= ch ?Z)
- (<= (+ 10 ch) (+ ?A elem-no-max)))
- (menu:goto-element (+ 10 (- ch ?A)))))))
+(defun menu:goto-nth-element ()
+ (interactive)
+ (let ((ch (events-to-keys (this-command-keys)))
+ (elem-no-max (1- (menu:selection-element-length))))
+ (setq ch (aref ch (1- (length ch))))
+ (cond
+ ((and (<= ?0 ch) (<= ch ?9)
+ (<= ch (+ ?0 elem-no-max)))
+ (menu:goto-element (- ch ?0)))
+ ((and (<= ?a ch) (<= ch ?z)
+ (<= (+ 10 ch) (+ ?a elem-no-max)))
+ (menu:goto-element (+ 10 (- ch ?a))))
+ ((and (<= ?A ch) (<= ch ?Z)
+ (<= (+ 10 ch) (+ ?A elem-no-max)))
+ (menu:goto-element (+ 10 (- ch ?A)))))))
ここでは mouse event は入って来ないようなのでどっちでも構わないような
気がしますが、旧版の焼き直しであるぼくのもの (+) よりは村田さん (-) の
方がすっきりしていますね。次に改造するときは村田さん方式にしようと思い
ます。
上記以外にぼくの版では次のような変更を行なっています。
・character かどうかを `numberp' で検査している部分が多数あったので、
`characterp' を使うようにしました。
・obsolete な関数 `char-octet' の代わりに `split-char' を使うようにし
ました。
--
Katsumi Yamaoka <yamaoka(a)ga.sony.co.jp>