Emacs Lisp를 사용하여 파일이 존재하는지 어떻게 확인할 수 있습니까?
emacs가 파일을 열 때 읽기 전용으로 생성 된 파일을 표시하고 싶습니다. 내가 놓친 퍼즐의 일부는 파일이 "존재하는지"확인하는 방법입니다. 현재 다음이 있습니다.
;;
;; get file extension
;;
(defun get-ext (file-name)
(car (cdr (split-string file-name "\\."))))
;;
;; get the base name of the file
;;
(defun base-name (file-name)
(car (split-string file-name "\\.")))
;;
;; if an 'lzz' file exists for this header, mark it as read only
;;
(defun mark-read-only ()
(if (string= (get-ext (cur-file)) "h")
(if ( ??file-exists??? (concat (base-name (cur-file)) ".lzz") )
(toggle-read-only))))
"??? file-exists ???"에 대해 무엇을 사용할 수 있습니까?
이것을 찾으면 적절한 후크 (파일 찾기 후크라고 생각 함)에 "읽기 전용 표시"를 추가합니다.
배경
우리는 사용 lzz을 우리의 C / C ++ 개발 프로세스를 단순화하기 위해 코드 생성기로. 간단히 말해서 lzz는 단일 입력 파일 (C / C ++과 매우 유사 함)을 가져와 적절하게 헤더 및 소스 파일을 생성합니다.
기본적으로 lzz에는 디버거가 생성 된 소스가 아닌 원본 소스를 가리 키도록 #line 지시문이 포함되어 있지만 컴파일 종속성을 줄이기 위해 일반적으로 헤더 파일에서 이러한 지시문을 비활성화합니다. 그 결과 템플릿이나 인라인 함수를 디버깅 할 때 디버거는 일반적으로 원본 소스 파일이 아닌 생성 된 헤더 파일을 가리 킵니다.
이것은 큰 문제는 아니지만 최근에 디버깅 할 때 표시된 파일을 빠르게 수정 한 다음 다시 빌드한다는 것을 발견했습니다. 물론 이것은 일반적으로 내가 편집 한 파일이 생성되어 라이브러리를 재 구축하는 동안 변경 사항이 "날아 가기"때문에 변경 사항이 사라지는 것을 의미합니다.
해결책
도움과 의견을 주신 모든 분들께 감사드립니다. 사용할 올바른 기능을 지적 해준 cobbal 에게 특별히 감사드립니다 .
다음은 결과 코드입니다 (여기에도 다른 주석을 기반으로 한 업데이트 포함).
(defun cur-file ()
"Return the filename (without directory) of the current buffer"
(file-name-nondirectory (buffer-file-name (current-buffer)))
)
(defun mark-generated-as-read-only ()
"Mark generated source files as read only.
Mark generated files (lzz or gz) read only to avoid accidental updates."
(if
(or (string= (file-name-extension (cur-file)) "h")
(string= (file-name-extension (cur-file)) "cpp"))
(cond
(
(file-exists-p (concat (file-name-sans-extension (cur-file)) ".lzz"))
(toggle-read-only))
(
(file-exists-p (concat (file-name-sans-extension (cur-file)) ".gz") )
(toggle-read-only))
)
)
)
시험 file-exists-p
"파일 파일 이름이 존재하면 t를 반환하십시오 (읽을 수 있는지 여부에 관계없이)."
당신이 필요에 따라, 당신은 할 수 있습니다
file-readable-p대신file-exists-p.Apropos는 지금까지만 얻을 수 있습니다. Icicles 는 임의의 순서로 하위 부분과 일치하는 명령, 함수, 변수 등 이름에 대한 도움말을 쉽게 찾을 수 있도록 적절한 완성 및 점진적 완성 을 제공합니다 (
file-exists-p또는exists-file-p?).
Use f.el, modern library for file and directory manipulation. You can use f-exists?, f-file?, f-directory? and many other predicates. The library is better than standard functions, because it's every file related function you'll ever need under one namespace.
참고URL : https://stackoverflow.com/questions/943760/how-can-i-check-if-a-file-exists-using-emacs-lisp
'IT TIP' 카테고리의 다른 글
| Eclipse에 코드 스 니펫 저장 (0) | 2020.11.21 |
|---|---|
| 선택을 사용하여 쿼리 결과에 행 추가 (0) | 2020.11.21 |
| 경고 (Selenium IDE) 내부의 확인 버튼을 클릭합니다. (0) | 2020.11.21 |
| 여러 파일 내의 전역 변수 (0) | 2020.11.21 |
| 오류 메시지의 이유는 무엇입니까? (0) | 2020.11.21 |