2015-01-31 35 views
0
(defun isearch-forward (&optional regexp-p no-recursive-edit) 
    (interactive "P\np") 
    (isearch-mode t (not (null regexp-p)) nil (not no-recursive-edit))) 

什麼特殊字符p(字母的小P)作爲做參數傳遞給交互功能?第一個字符P(大寫)是否意味着regexp-p值來自全局變量定義。ISEARCH`interactive`規範使用特殊字符,用戶輸入

再一次地,用戶輸入的單詞作爲正則表達式-p傳遞,no-recursive-edit如何得到它的值?

+2

下面是描述'交互式代碼'的文檔的鏈接:http://www.gnu.org/software/emacs/manual/html_node/elisp/Interactive-Codes.html#Interactive-Codes – lawlist 2015-01-31 21:56:19

+0

或'Ch f交互式RET'(它至少爲您提供了足夠的信息,以便使用必要的關鍵字進行搜索)。我注意到,你(Madhavan Kumar)在最近幾周詢問了很多Emacs的問題,並且對elisp中的編程感興趣。通過實際記錄查詢Emacs中內置文檔的基本知識,您將爲自己做出巨大的貢獻。現在你應該知道*'C-h f'給你提供關於函數的信息。 – phils 2015-02-01 11:35:53

回答

2

第一個字母P代表原始前綴參數,它是變量current-prefix-arg的值。這在這種情況下綁定到第一個形式參數regexp-p

這與第二個字母p\n(換行符)分開。這是interactive規格分離輸入的慣例。

第二個字母p代表數字前綴參數,它的值是(prefix-numeric-value current-prefix-arg)。這在這種情況下綁定到第二個正式參數no-recursive-edit

在Elisp手冊節點Interactive Codes中閱讀此內容。

+0

嗨德魯,謝謝你解釋。上面的func塊綁定到emacs中的Ctrl-s。在這裏,無處用戶按下ctrl-u來設置current-prefix-arg。他所做的只是按Ctrl-s,然後輸入他的正則表達式模式。那麼,prefix-args如何得到它們的值呢? – 2015-02-01 03:40:01

+1

如果用戶沒有使用前綴arg,那麼'current-prefix-arg'是'nil',並且s * he *不會得到regexp *搜索。你可以從'(not(null regexp-p))'看到這個。 * numeric *前綴arg始終是* integer *。如果用戶不使用前綴arg,那麼數字前綴arg是'1','(不是no-recursive-edit)'是'nil'。對於一些非交互式調用,Arg'no-recursive-edit'僅爲'nil',從不用於交互式調用。 – Drew 2015-02-01 04:59:30