Esta pregunta está relacionada con otra, Emacs :TODO indicator at left side. Recientemente me encontré con un modo menor que me gusta mucho llamado FixmeMode. Es compatible con el resaltado automático de TODO marcas, y navegando entre ellas. Sin embargo, creo que tiene más sentido reconocer las cadenas "TODO" solo en los comentarios, en lugar de contaminar todo el archivo. ¿Es posible?Emacs: resaltando TODO * solo * en los comentarios
Respuesta
Mira la biblioteca fic-mode.el, se ha verificado en C++ y Emacs-Lisp.
Fue escrito específicamente para responder esta pregunta.
La instalación es como cualquier paquete estándar:
(require 'fic-mode)
(add-hook 'c++-mode-hook 'turn-on-fic-mode)
Aunque Wei Hu hizo pedir una forma fácil de añadir a múltiples modos, así que aquí va:
(defun add-something-to-mode-hooks (mode-list something)
"helper function to add a callback to multiple hooks"
(dolist (mode mode-list)
(add-hook (intern (concat (symbol-name mode) "-mode-hook")) something)))
(add-something-to-mode-hooks '(c++ tcl emacs-lisp) 'turn-on-fic-mode)
Es posible, pero un poco más complicado. El modo Fixme usa font-lock
para resaltar, por lo que funciona según el tipo de letra para resaltar las palabras clave. Font-lock se engancha en un nivel muy bajo, básicamente se ejecuta después de cada cambio se realiza en el contenido del búfer. Sin embargo, está altamente optimizado, lo que le permite aparecer instantáneamente en las computadoras modernas.
El indicador TODO en el margen izquierdo es estático. Ejecute la función y todos los TODO actuales están resaltados; cambiar el buffer (agregar o eliminar TODO's) no cambia el indicador de flecos; eso solo se cambia cuando la función se ejecuta nuevamente.
Su enfoque tendría que entrar en las tablas de sintaxis, determinar primero cuando se encuentra en un comentario y luego buscar las palabras clave. La parte difícil es hacer esto de manera interactiva (es decir, a medida que escribe). Debería poder engancharse en las construcciones font-lock
para hacer esto, pero la función que proporcione para buscar la tabla de sintaxis de comentarios y luego las palabras clave será mucho más eficiente, ya que se ejecutará cada vez que cambie un búfer (aunque solo se ejecutará en la región modificada, creo). Desea rellenar todo esto en font-lock-syntactic-keywords
en lugar de font-lock-keywords
porque la contraseña sintáctica pasa antes del pase sintáctico (que ocurre antes del paso de palabra clave), y debe establecer TODO dentro de los comentarios antes de que se establezcan los comentarios.
sentimos que no es una respuesta de código completo de trabajo .....
Wow. Eso es mucho más complicado de lo que hubiera pensado. –
Es más fácil y más complicado de lo que pensaba. Más fácil en el sentido de que todo el enganche y el enlace de font-lock no eran tan difíciles, pero mucho más difíciles porque es realmente difícil averiguar si estás en un comentario. Al menos no he podido descifrarlo hasta ahora. Así que no hay ningún ejemplo de código todavía ... –
Tal vez esto ayude: hay un fn c-in-literal
en cc-mode, y similares csharp-in-literal
en modo CSharp. El valor de retorno es c
si en un comentario de estilo C, c++
si en un comentario de estilo C++ . Puede agregar eso al código en Emacs :TODO indicator at left side para obtener lo que desea.
(defun annotate-todo()
"put fringe marker on TODO: lines in the curent buffer"
(interactive)
(let (lit)
(save-excursion
(goto-char (point-min))
(while (re-search-forward "TODO:" nil t)
(progn
(setq lit (c-in-literal)) ;; or csharp-in-literal
(if (or (eq lit 'c) (eq lit 'c++))
(let ((overlay (make-overlay (- (point) 5) (point))))
(overlay-put overlay 'before-string
(propertize "A"
'display
'(left-fringe ;; right
horizontal-bar
better-fringes-important-bitmap))))))))))
Gracias por su respuesta. Realmente me gustaría una respuesta que mejore el FixmeMode, ya que funciona según el tipo, como dijo @Joe. –
Sí, eso tiene sentido.Como punto secundario, creo que resaltar las cosas que ya están en la pantalla no es tan útil como proporcionar una indicación visual de la ubicación aproximada de FIXME en el código fuente. las herramientas de diferencia visual hacen esto, al igual que Eclipse al mostrar errores de compilación, y Visual Studio, también, creo. Pregunté sobre eso por separado: http://stackoverflow.com/questions/2348679/emacs-todo-indicator-on-left-fringe-has-a-strange-side-effect-deleting-charact – Cheeso
- 1. Emacs Python-modo sintaxis resaltando
- 2. Cambiar la sintaxis de Emacs resaltando los colores
- 3. Comentarios multilínea en modo Emacs
- 4. TODO: los comentarios no aparecen en la lista de tareas
- 5. ¿Cómo manejo los comentarios de TODO en VisualStudio 2010?
- 6. Resaltando 'bool' utilizado en Java, dentro de Emacs
- 7. Sancionar los comentarios del bloque C en Emacs
- 8. Bloques auto expandibles de comentarios en emacs
- 9. Emacs: Indicador de TODO en el lado izquierdo
- 10. jQuery resaltando columnas seleccionadas solo en una tabla
- 11. ¿Por qué los fixnums en Emacs solo son 29 bits?
- 12. Cómo poner bloquear los comentarios en TCL
- 13. Código de compilación cuando solo cambian los comentarios
- 14. ¿Comentarios HTML dentro de los comentarios?
- 15. Solo doblar comentarios cuando se abre el archivo en Vim
- 16. Sintaxis de Wordpress resaltando
- 17. Posible que los comentarios de Visual Studio TODO en los archivos aspx/ascx aparezcan en la lista de tareas?
- 18. Exportar comentarios como comentarios
- 19. Revisión ortográfica de comentarios en código C++ con emacs
- 20. Notepad ++ sintaxis resaltando mis archivos
- 21. jquery autocompletar resaltando
- 22. Aprobar automáticamente todos los comentarios en el complemento de comentarios
- 23. Cómo cambiar el color de los comentarios de Emacs en modo C++/C a rosa claro
- 24. ¿Cómo mantener los comentarios sobre las variables establecidas a través de "M-x personalizar" en emacs?
- 25. Sintaxis gratis Resaltando .NET Editor
- 26. sintaxis Vim resaltando ocultar caracteres
- 27. terminando los comentarios de haml
- 28. Selección de texto resaltando demasiado
- 29. sintaxis C++ resaltando el generador html
- 30. Emacs c-modo relleno-párrafo con Doxygen Comentarios
¡Buen trabajo, gracias! ¿Podría explicar brevemente cómo logró resolver esta tarea con tan poco código? Además, sería bueno tener una variable personalizable 'fic-modes' que se pueda usar para definir todos los modos habilitados, en lugar de tener que agregar ganchos al modo uno por uno. –
@WeiHu En cuanto a cómo se resolvió con tan poco código, vale la pena simplemente leer el código - font-lock proporciona un marco suficientemente rico para resolver el problema. La clave real era usar una configuración de bloqueo de fuente que llama a una rutina (en lugar de solo una expresión regular) que determina qué cadenas resaltar (que sería ''fic-search-for-keyword'), y esa rutina simplemente verifica que la cadena está en un comentario/cadena. –
Así que está aprovechando el hecho de que las cadenas y los comentarios usan caras de fuente especiales. ¿Podría haber falsos positivos? –