簡體   English   中英

交互式“r”elisp與另外的args一起定義?

[英]Interactive “r” elisp defun with additional args?

是否有可能使用代碼“r”編寫一個具有附加可選參數的交互式defun(以便它在所選區域內執行某些操作,但使用另一個參數)? 我想要以下內容:

(defun my-function (start end &optional arg)
  "Do something with selected region"
  (interactive "r")
  (if arg
      (setq val arg)
    (setq val 2))
  (do things...))

看一下它說的文檔

'r':點和標記,作為兩個數字參數,最小的第一個。 這是唯一一個指定兩個連續參數而不是一個參數的代碼字母。 沒有I / O.

我不確定'No I / O'和'兩個連續的參數'是否意味着它需要2個且只有2個參數(即,僅限於區域的起點和終點作為args)。 雖然它允許我用額外的參數來評估和運行defun,但Emacs似乎忽略了它。

謝謝。

要使interactive請求多個參數,請使用換行符分隔它們。 例如,如果您希望將第三個參數綁定到prefix參數的值,請按以下方式定義您的函數:

(defun my-function (start end &optional arg)
  "Do something with selected region"
  (interactive "r\np")
  (if arg
      (setq val arg)
    (setq val 2))
  (do things...))

Mx describe-function interactive為您提供更多信息。

可以通過兩種方式調用函數:

  • 交互式:這是當用戶調用命令時發生的事情,例如當它被綁定到一個鍵時。
  • 來自lisp:從另一個lisp函數調用該函數時。 例如(r 100 200 t)

在您的情況下,您必須確保參數與交互式規范匹配,在這種情況下,它必須接受兩個參數。 交互式調用時不會使用第三個(因此它將獲得值nil )。

NO I / O意味着它不會提示用戶輸入(就像它要求輸入文件名時那樣)。

如果您希望函數在區域處於活動狀態時采取不同的行為,則可以詢問函數(use-region-p)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM