IT TIP

Emacs Lisp를 사용하여 파일이 존재하는지 어떻게 확인할 수 있습니까?

itqueen 2020. 11. 21. 08:31
반응형

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

반응형