에 대한 사용자 정의 함수를 작성하십시오 dired-initial-position-hook
. 이 함수에서 다양한 dired 함수를 사용하여 파일을 검색하고 결국 dired-goto-file
"최상의"파일로 포인트를 이동하도록 호출 할 수 있습니다.
(defun my-dired-goto-important-file ()
"Go to an important file in the current dired buffer."
(unless (bound-and-true-p save-place)
(let ((candidates '("master.tex" "AndroidManifest.xml"))
candidate)
(while (and candidates
(not (dired-goto-file (expand-file-name (pop candidates)))))
nil))))
(add-hook 'dired-initial-position-hook #'my-dired-goto-important-file)
다음에서는이 기능의 특정 측면을 설명하고 잠재적 인 확장을 강조합니다.
파일로 점프
dired-goto-file
nil
파일이 현재 dired 버퍼에 존재하지 않으면를 반환 하므로 사전 확인없이 호출하는 것이 안전합니다. 그러나 dired-goto-file
필요 절대 따라서, 파일 이름 (상대 이름에 오류) expand-file-name
.
파일 검색
Dired는 파일을 검색하기위한 간단한 API를 제공하지 않습니다. 일반적으로 버퍼의 모든 줄을 반복하는 것처럼 모든 파일을 반복 할 수 있습니다.
(let (files)
(goto-char (point-min))
(while (not (eobp))
(let ((filename (dired-get-filename nil 'no-error)))
(when filename
(push filename files)))
(forward-line 1))
;; Now `files' is a list of files, which you can search for patterns
;; …
)
그러나 표시 기능을 사용하는 것이 더 편리합니다. 기존의 대화식 표시를 풀지 않도록 "비정상적인"표시 문자를 사용하십시오.
(unwind-protect
(when (dired-mark-files-regexp (rx ".tex" string-end) ?t)
(dired-goto-file (expand-file-name "master.tex")))
(dired-unmark-all-files ?t))
장소 모드 저장
또한 장소 저장 모드를 사용하도록 설정 한 경우 신중하게 설정해야합니다. Dired 버퍼에서, 장소 저장 모드는 다른 모드에서와 같이 포인트 값을 기억하지 않고 마지막 파일 이름 포인트가 켜져 있습니다. 그것은 우리가하는 것처럼이 파일 이름을 복원합니다 : 그것은 연결 dired-initial-position-hook
하고 호출합니다 dired-goto-file
(사실, 내가 그 코드를 훔친 곳 :)).
우리 장소가 장소를 저장하기 전에 온다면, 장소 저장 모드는 우리의 위치를 무조건 덮어 씁니다. 그러나이 후크를 설정 한 후 저장 장소가 활성화 된 경우와 같이 후크 앞에 오면 실제로는 저장 장소를 덮어 쓰게되므로 바람직하지 않습니다. 그러나 모든 버퍼에서와 같이 Save Place는 로컬 변수 save-place
를 0이 아닌 값으로 설정하므로 간단히 확인할 수 있으며 Save Place는 파일 이름을 복원하지 않습니다.
장소 저장이“느슨하게”되려면를 save-place
확인하고 장소 저장 모드를 먼저 활성화 한 다음 인수가 0이 아닌 값으로 호출 하여 장소 저장 후에 후크가 실행되는지 확인하십시오 .add-hook
APPEND
bound-and-true-p
. :-)