2012-09-04 54 views
2

我想在允許用戶複製文本之前評估某些條件。據我所知,我需要一個建議"kill-ring-save"。如果條件不滿足,我需要忽略用戶請求複製該文本,如果滿足則允許。我怎樣才能做到這一點?對「kill-ring-save」的建議

(UPDATE) - 關於CONSTRAINTS的更多信息:只有在特定的Emacs模式下(例如NXML模式),此建議才應用,並且只能滿足一個或多個特定條件。

回答

3

快速驗證概念;你不知道你的約束是什麼,所以這是必然的模糊/無用的。

(defvar moo nil) 

(defadvice kill-ring-save (around kill-ring-check-constraints activate compile) 
    "If in `nxml-mode', don't save to kill ring if `moo' is `nil'." 
    (if (and (eq major-mode 'nxml-mode) (null moo)) 
    (message "Not copied.") 
    ad-do-it)) 

對下面的評論添加了額外的主要模式約束。如果你想在每種模式下使用,只需取出模式檢查。

+0

編輯正是我所需要的。我也會將其添加到問題中。 – Daniel

+0

一個小問題,如果我想讀取複製的值並檢查例如它是否沒有「JACK」,我可以用建議嗎?我希望它是動態的,所以例如我可以檢查不同的字符串..如果你不能在這裏回答,我可以更新問題或寫另一個。但它與這個問題有關。 – Daniel

+0

您可以通過在點和標記之間搜索緩衝區或通過將區域複製到字符串來檢查當前區域。快速谷歌搜索變成http://stackoverflow.com/questions/605846/how-do-i-access-the-contents-of-the-current-region-in-emacs-lisp – tripleee