tutorial source para mac descargar code emacs elisp

source - emacs para mac



¿Cómo puedo verificar si existe un archivo usando Emacs Lisp? (3)

Utilice f.el , biblioteca moderna para la manipulación de archivos y directorios. Usted puede utilizar f-exists? , f-file? , f-directory? y muchos otros predicados. La biblioteca es mejor que las funciones estándar, porque es cada función relacionada con archivos que necesitará en un espacio de nombres.

Me gustaría que emacs marque los archivos que se generan como de solo lectura cuando se abren. La parte del rompecabezas que me falta es cómo verificar si un archivo "existe". Actualmente tengo los siguientes:

;; ;; 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))))

¿Qué puedo usar para "??? file-there ???"?

Una vez que encuentre esto, agregaré "mark-read-only" al gancho apropiado (que creo que es el archivo de búsqueda-archivo-gancho).

FONDO

Utilizamos lzz como generador de código para simplificar nuestro proceso de desarrollo de C / C ++. Brevemente, lzz toma un solo archivo de entrada (que se parece mucho a C / C ++) y genera los archivos de encabezado y fuente según corresponda.

De forma predeterminada, lzz incluye directivas #line para que el depurador apunte a la fuente original y no a la fuente generada, sin embargo, para reducir las dependencias de compilación, normalmente deshabilitamos estas directivas en los archivos de cabecera. El resultado es que al depurar plantillas o funciones en línea, el depurador normalmente apunta al archivo de encabezado generado y no al archivo de origen original.

Esto no es un gran problema, sin embargo, recientemente descubrí que al realizar la depuración, haré una modificación rápida al archivo mostrado y luego lo reconstruiré. Por supuesto, esto normalmente significa que el cambio que realicé desaparece porque el archivo que edité se genera y, por lo tanto, los cambios se "eliminan" durante la reconstrucción de la biblioteca.

SOLUCIÓN

Gracias a todos por su ayuda y comentarios. Un agradecimiento especial a cobbal por señalar la función correcta a usar.

Aquí está el código resultante (con actualizaciones basadas en los otros comentarios aquí también):

(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)) ) ) )


prueba file-exists-p

"Devuelva t si existe el nombre de archivo (ya sea que pueda leerlo o no)."


  • Dependiendo de lo que necesite, es posible que desee el file-readable-p lugar del file-exists-p .

  • A propósito solo te llevará hasta el momento. Icicles proporciona una finalización adecuada y una finalización progresiva que le permite encontrar ayuda fácilmente para los nombres de comando, función, variable, etc. que coinciden con las subpartes en un orden arbitrario (¿es file-exists-p o exists-file-p ?).