2012-07-27 256 views
12

我想要執行的操作與通過按下C-Space +移動箭頭鍵但在elisp中執行的操作相同。以編程方式選擇區域

無法找到正確的功能(如果他們只是在邏輯上分組在名稱空間或以某種方式標記...)。哪一個?

回答

15

您可以使用將鍵盤翻譯爲elisp C-h k 密鑰

您會注意到用於設置標記set-mark-command的elisp函數,它帶有一個非可選參數。 Emacs使用特殊的interactive函數來允許elisp函數自然地用參數寫入。這允許它們是通用的並且易於在其他elisp程序中重用,同時仍然可以從擊鍵直接調用。它還具有一些內置的前綴邏輯的C-u

set-mark-command的情況下,其第一個功能是(interactive "P"),這意味着從鍵盤調用前綴作爲參數傳入。您可以直接在elisp的與模擬這個:

(set-mark-command nil) 

例如,要選擇在elisp的當前行:

(defun my-select-current-line() 
    (interactive) 
    (move-beginning-of-line nil) 
    (set-mark-command nil) 
    (move-end-of-line nil) 
    (setq deactivate-mark nil)) 

注意你必須告訴Emacs的離開標誌活躍在年底要不然該地區將不會突出顯示(儘管點和標記將是您離開他們的地方)。

+0

如果我將這個點設置在一行的末尾,然後運行'(set-mark-command 0)',那麼點會移動但不是標記,因此沒有任何選擇。我錯過了什麼?謝謝。 – vemv 2012-07-27 15:08:47

+0

在該區域的起點處設置標記,然後將該點移動到最後。另外,arg實際上應該是「零」而不是零。我用一個例子更新了我的答案。 – ataylor 2012-07-27 15:38:33

+0

功能有效(謝謝!)我沒有獲得視覺反饋,即'deactivate-mark'似乎沒有什麼區別。無論如何,這對我的特殊目的不重要。 – vemv 2012-07-27 17:36:57

1

該區域是pointmark之間的緩衝區的一部分。

+0

我想我必須使用'set-mark'。但是它的POS參數的預期類型是什麼? – vemv 2012-07-27 14:54:43

4

您應該使用在Emacs推標誌Lisp代碼,如下所示:

(defun mark-n (n) 
    "Programmtically mark the next N lines" 
    (interactive "nNum lines to mark: ") 
    (push-mark) 
    (next-line n)) 
3

萬一這個附加信息是利用別人,我發現以下幾點:

  • 至於編程式運動,請參見Moving Point
  • (point)(mark)檢索它們各自的位置,因此可以做(set-mark (+ 5 (mark))),例如。
相關問題