2009-04-26 2 views
4

많은 TeX 문서로 채워진 디렉토리가 많습니다. 그래서 같은 기본 파일 이름과 다른 확장자를 가진 많은 파일이 있습니다. 하지만 그 중 하나만 편집 할 수 있습니다. 나는 이맥스를 설득 할 수있는 방법을하고자하는 나는Emacs 파일 이름 완성으로 특정 파일 확장자를 선호합니다.

document.tex 
document.log 
document.pdf 
document.bbl 
document.aux 
... 

있어 디렉토리에 그리고 난은 미니 버퍼에있어 및한다면

는 '문서에 채워
~/Documents/.../doc<TAB> 

.tex '는 해당 디렉토리에서 실제로 편집 할 수있는 유일한 문서이기 때문입니다. 누구든지 그 좋은 방법을 알고 있습니까?

답변

6

나는 당신이 원하는 것을해야하는 몇 가지 코드를 작성했습니다. 기본 아이디어는 건너 뛰려는 확장자와 일치하도록 변수 'completion-ignored-extensions을 설정하는 것이지만 .tex 파일이있는 경우에만 설정합니다. 이 코드는 그렇게합니다.

(defadvice find-file-read-args (around find-file-read-args-limit-choices activate) 
    "set some stuff up for controlling extensions when tab completing" 
    (let ((completion-ignored-extensions completion-ignored-extensions) 
     (find-file-limit-choices t)) 
    ad-do-it)) 

(defadvice minibuffer-complete (around minibuffer-complete-limit-choices nil activate) 
    "When in find-file, check for files of extension .tex, and if they're found, ignore .log .pdf .bbl .aux" 
    (let ((add-or-remove 
    (if (and (boundp 'find-file-limit-choices) find-file-limit-choices 
      (save-excursion 
     (let ((b (progn (beginning-of-line) (point))) 
       (e (progn (end-of-line) (point)))) 
      (directory-files (file-name-directory (buffer-substring-no-properties b e)) nil "\\.tex$")))) 
    'add-to-list 
     'remove))) 
(mapc (lambda (e) (setq completion-ignored-extensions 
      (funcall add-or-remove 'completion-ignored-extensions e))) 
     '(".log" ".pdf" ".bbl" ".aux"))) 
    ad-do-it) 

즐기십시오.

+0

'mapcq'에 대한 정의되지 않은 함수 오류가 발생합니다 -로드해야하는 elisp 패키지에서 제공 한 것입니까? –

+0

필자는 'mapc'와 'mapchar'을 시도했지만 어느 것도 작동하지 않았다는 것을 언급해야합니다. 감사합니다. –

+0

mapcq는 오타였습니다. mapc은 코드가 내가 예상했던대로 작동한다는 점에서 저에게 효과적이었습니다. 한 가지 문제는 코드가 활성화되지 않았을 수 있습니다. mapc 줄 바로 앞에 (y-or-n-p "Running?")를 추가하고 Tab 키를 누르면 프롬프트가 표시됩니다. 그렇지 않은 경우 조언은 활성화되지 않고 (어떤 이유로) 활성화되지 않고 추가 (광고 활성화 '미니 버퍼 완료 제한 선택) 할 수 있습니다. 나는 이것을 바닐라 이맥에서 시험 할 때 그걸 필요로하지 않았다. –

1

아마도이 경우 가장 쉬운 방법은 변수 "completion-ignored-extensions"를 사용자 정의하는 것입니다.

그러나 이것은 emacs가 항상 ".log"와 ".pdf"같은 것을 무시한다는 것을 의미합니다. 좀 더 선택적으로 원한다면 함수 file-name-completion을 효과적으로 다시 구현해야 할 수도 있습니다.

1

대형 라이브러리를 설치하고 설명서를 읽으려면 Icicles을보고 필요에 따라 sort function을 정의하십시오. 다른 하나는 ido이고 wiki 페이지의 예는 sorting by mtime이며 파일 이름 확장명의 기능에 따라 정렬하기 쉽도록 변경해야합니다.

관련 문제