24371


elisp で関数を interactive
宣言して、数字の引数を取得する際に、デフォルト値を取れるようにしたいのですが、これは一般的にどう実現されますか？

例えば、次のような関数で

[code]

    (defun num-square (n)
      (interactive "nNumber: ")
      (print (* n n)))
    
[/code]

デフォルト値を取れるとは、何も入力せずに`RET`を入力された場合には、  
既定の値がその引数に bind されるような挙動を期待しています。


CC BY-SA 3.0
2016-04-26T14:24:21.163
24367
2016-04-26T15:59:10.253
754
question
elisp
interactive で数字をクエリする際に、デフォルト値を可能にするには？


`read-number` 関数の説明文に、

>
[code]

>     (read-number PROMPT &optional DEFAULT)
>  
[/code]

>
> Read a numeric value in the minibuffer, prompting with _PROMPT_. _DEFAULT_
> specifies a default value to return if the user just types RET. The value of
> _DEFAULT_ is inserted into _PROMPT_. **This function is used by the
> 'interactive’ code letter ‘n’**.

とありますので、`read-number` を使うとデフォルト値を指定することが可能です(以下の例ではデフォルト値として `0` を指定)。

[code]

    (defun num-square (n)
      (interactive (list (read-number "Number: " 0)))
      (prin1 (* n n)))
    
[/code]

ただ、この場合は数値の入力に限定されますので、例えば文字列を入力する場合には `read-string` を使う必要があります。


CC BY-SA 3.0
2016-04-26T15:59:10.253
24371
2016-04-26T15:59:10.253
24367
answer