Ink

Contents related to tech, hobby, etc

Interactiveな関数をElispからPrefix Arguments付きで呼ぶ

|

Interactiveな関数をElispからPrefix Arguments付きで呼ぶ

やりたいこと

Org modeで「現在時刻を即時入力したい」時、インタラクティブな編集ではhelp:org-time-stamp-inactive を Prefix Argument 2つで呼び出すことで実現出来ます。

C-u C-u M-x org-time-stamp-inactive
; => [2022-11-30 Wed 09:51]

で、これをElispからも行いたいというのが今回の目的です。

結論

Prefix Argumentの代わりに '(4) のような raw prefix argument を指定します。 冒頭の回答は以下:

(org-time-stamp-inactive '(16))

詳しくはelisp#Prefix Command Argumentsを参照して下さい。

Raw Prefix Argumentとは?

Prefix Argumentsには2種類の表現方法(representation)があり、その一つが "Raw" です。ちなみにもう一つは"numeric"。内部的にはこの "raw prefix argument" とし て使っていますが、コマンドからはどちらの表現でも用いることが出来ます。実際に Interactiveなコマンドが動作する際には、 (interactive) の引数に応じて"raw" 若しくは"numeric"な値が最初の引数として与えられるようです。

Raw prefix argumentは、その与え方によって値が変化します。

Prefix argumentRaw prefix argumentの値
何もなしnil
C-u <数字><数字>
C-u(4)
C-u C-u(16)
C-u C-u C-u(64)
M--~/~C-u --
C-u -<数字>-<数字>

数字なしで C-u が呼ばれる際は、リストとして渡されるようです。複数の C-u が与えられた場合は、4倍ずつされていくようです。

出来そうで上手くいかなかったもの

help:universal-argument, help:digit-argument, help:negative-argument みたいなものは存在するがどうやって使うのか?がわかりません...oh... どうやら C-u 等にバインドされているらしいので、Elispから使う用では ないみたい?