2012-06-21 2 views
2

사용자에게 파일을 저장할 것인지 묻는 추가 프롬프트를 추가하고 싶지만 특정 "보호 된"디렉터리의 파일에 대해서만 요청할 수 있습니다. 파일 이름을 취하고 해당 파일을 저장하기 전에 사용자에게 쿼리해야하는 경우 t를 반환하는 함수 file-needs-protection-p이 있다고 가정합니다. 어떻게 사용자가 그러한 파일을 저장하려고 할 때 "This file is protected. Are you sure you want to modify it?"과 같은 것을 묻도록 Emacs에 요청한 다음, 사용자가 no로 대답하면 Emacs가 저장을 중단하게 할 수 있습니까?어떻게 파일을 저장하기 전에 Emacs가 사용자에게 질의를하도록 만들 수 있습니까?

어쨌든 yes-or-no-p을 사용하는 함수를 추가 할 수있는 특수 어딘가가 있고,이 함수가 false를 반환하면 이맥스가 저장을 중단하겠습니까? 이미 file-needs-protection-p을 가지고있는 경우에

답변

5

테스트되지 않은,하지만 난 그들이 어떤 대답없는 경우 당신은 당신의 테스트를 수행하고 질문을하고, 단순히 오류가 발생하는 before-save-hook을 사용할 수 있어야한다고 생각 : 개인 사용을 위해

(error "Save aborted by user") 
+0

난 그것을 테스트하고 잘 작동합니다. 나는 당신이 연결된 함수에서 빠져 나오기 위해 후크에서 오류를 사용할 수 있다는 것을 알지 못했다. 매우 깔끔하다. – Tyler

+0

나는 이것이 훌륭한 해결책이라고 생각한다. 그래도 덜 무딘 방법이 있었으면합니다. –

0

, 나는 나머지는 간단하다 생각 :

(defun save-buffer-check 
    "If the current buffer is a protected file, query the user before saving." 
    (if (file-needs-protection-p (buffer-file-name)) 
     (if (y-or-n-p 
      "This file is protected. Are you sure you want to modify it?") 
      (save-buffer)) 
    (save-buffer))) 

C-x C-s에 그를 리 바인드하고 당신이 필요 않는 경우를 참조하십시오. 특별한 후크 나 조언이 필요하지 않다고 생각합니다. 그냥 save-buffer을 호출하거나 아무 것도하지 않고 리턴하기 전에 당신의 술어에 대한 호출을 삽입하는 함수입니다.

+0

, 이것은 아마 괜찮습니다, 하지만 이맥스 패키지 (자동으로 관리 할 수있는 파일을 수정하지 못하도록 사용자를 보호하기 위해)에서이 작업을 수행하려고합니다. 따라서 사용자에게 이러한 기본 키 바인딩을 리 바인드하도록 요청할 수는 없습니다. 후크가이를 수행하는 더 깨끗한 방법 일 것입니다. –

+0

그래서 모드 키맵에 바인딩을 넣으면 모드를 사용하는 버퍼에만 적용됩니다. 또는 phils의 대답을 사용하고 논리를 추가하여 수표를 부르기 전에 현재 주요 모드를 확인하십시오. 나는이 대답들 중 하나 또는 둘 모두에서 당신이 원하는 것을 얻을 수 있다고 생각합니다. – Tyler

관련 문제