[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
[MD:1834]call-last-kbd-macro
- X-ml-count: 1834
- Subject: [MD:1834]call-last-kbd-macro
- From: Keiichi Suzuki <keiichi@xxxxxxxxx>
- Date: 18 Jul 2000 10:16:53 +0900
- User-agent: Nana-gnus/7.1.0.22 REMI/1.14.2 (Hokuhoku-Ōshima) Chao/1.14.1 (Rokujizō) APEL/10.2 Emacs/20.7 (i386-*-nt5.0.2195) MULE/4.1 (AOI) Meadow/1.13-Beta1++ (TANAHASHI:61)
>>>>> meadow-develop の No. 1832
>>>>> Message-Id: <20000717.193624.110367309.horiguchi.kyotaro@xxxxxxxxxxxxxxxxxxxxx> で、
>>>>> "堀口" == Kyotaro HORIGUCHI <horiguchi.kyotaro@xxxxxxxxxxxxxxxxxxxxx>さま曰く...
堀口> でもなんかちょっと変な感じです. これはエラーが出たときのバック
堀口> トレースです.
>> Signaling: (wrong-type-argument integerp nil)
>> ad-Orig-forward-word(nil)
>> forward-word(nil)
>> call-interactively(forward-word)
堀口> ~~~~~~~~~~~~~~~~~~
>> call-last-kbd-macro(1)
>> call-interactively(call-last-kbd-macro)
ここで forward-word の argument がなんで nil になってしまうのかが不思議
だったのですが、 Disassemble してみると...
byte code for forward-word:
doc: Move point forward ARG words (backward if ARG is negative). ...
args: (count)
interactive: (quote (nil))
0 constant nil
1 varbind ad-return-value
2 interactive-p
3 goto-if-nil 1
6 constant call-interactively
7 constant ad-Orig-forward-word
8 call 1
9 goto 2
12:1 constant ad-Orig-forward-word
13 varref count
14 call 1
15:2 varset ad-return-value
...
ということなので、下のような関数を作って実行してみると...
(defun my-test (count)
(interactive '(10))
(message "%s, %d" (interactive-p) count))
M-x my-test [RET] ... t, 10
これを keyboard macro に登録して実行 ... nil, 10
(call-interactively 'my-test2) を評価 ... t, 10
(my-test) を評価 ... Wrong number of arguments: ...
と言う結果になりました。
この結果を見ると (interactive '(10)) は有効になっているのにもかかわらず、
(interactive-p) が nil というのは、おかしいのではないかと思うのですが、
いかがなものでしょうか?
>> (defadvice FUNCTION (CLASS NAME [POSITION] [ARGLIST] FLAG...)
>> [DOCSTRING] [INTERACTIVE-FORM]
>> BODY... ) ~~~~~~~~~~~~~~~~~~
堀口> これが正解のようです.
堀口> (defadvice forward-word (after skip-comma activate )
堀口> (interactive "p")
堀口> (when (and (interactive-p)
堀口> (eq major-mode 'c-mode)
堀口> (eq (char-after) ?,))
堀口> (forward-char)))
ありがとうございます、とりあえず、これで無事に動くようになりました。
--
鈴木圭一 / keiichi@xxxxxxxxx
PGP finger print (DH/DSS)
0B32 B37E 6DE9 3BC1 68A4 4089 7AAF 2B03 ECBD 614B