2011-02-07 10 views

Respuesta

3

Puede escribir una función que limite su búfer a todo menos las primeras 15 líneas.

(defun hide-copyright-note() 
    "Narrows the current buffer so that the first 15 lines are 
hidden." 
    (interactive) 
    (save-excursion 
    (goto-char (point-min)) 
    (forward-line 15) 
    (narrow-to-region (point) (point-max)))) 

Entonces todo lo que necesita hacer es asegurarse de que esta función se llama para cada archivo que contiene una nota de derechos de autor. Esto se puede hacer agregando un gancho, preferiblemente en el modo principal de su archivo. Por ejemplo, podría agregar la definición de la función anterior y la siguiente línea en el fichero .emacs:

(add-hook 'c-mode-hook 'hide-copyright-note) 

Esto sería llamar a la función 'ocultar-copyright-nota cada vez que abra un archivo C.

En la práctica, es probable que desee hacer su función de enlace más inteligente, ya sea verificando si existe una nota de copyright para ocultar o ejecutando hide-copyright-note solo si un archivo está en cierto directorio, etc.

por ejemplo, para seguir con el ejemplo C, podría insertar la siguiente prueba en la función anterior:

(defun hide-copyright-note() 
    "Narrows the current buffer so that the first 15 lines are 
hidden." 
    (interactive) 
    (when (copyright-message-p) 
    (save-excursion 
     (goto-char (point-min)) 
     (forward-line 15) 
     (narrow-to-region (point) (point-max))))) 

(defun copyright-message-p() 
    "Returns t when the current buffer starts with a Copyright 
note inside a C-style comment" 
    (save-excursion 
    (goto-char (point-min)) 
    (looking-at "\\s */\\*\\(:?\\s \\|\\*\\)*Copyright\\b"))) 

en cuanto a su otra preocupación:

Cuando los tengo abiertos en emacs, eso desperdicia mucho espacio valioso.

... o usted podría desplazarse hacia abajo. Para lograr esto de forma automática, se podría utilizar la siguiente función en lugar de hide-copyright-note:

(defun scroll-on-copyright() 
    "Scrolls down to the 16th line when the current buffer starts 
with a copyright note." 
    (interactive) 
    (when (copyright-message-p) 
    (goto-char (point-min)) 
    (beginning-of-line 16) 
    (recenter 0))) 

Sin embargo, la razón por la que recomienda la primera variación es que si se limita a desplazarse hacia abajo de forma automática, entonces cada vez que salta al principio del búfer (M-<) tendrás que desplazarte hacia abajo nuevamente de forma manual. Este problema no ocurre con la solución de reducción.

+0

Gracias, intentaré eso. – sligocki

+0

@sligocki: Avíseme si le funcionó. – Thomas

+0

Disculpa la demora @Thomas, ¡la función funciona muy bien! ¿Tiene alguna sugerencia sobre cómo hacer esto solo se aplica a cuando el archivo comienza con un aviso de copyright? Por ejemplo, me gustaría que se aplique a todo lo que comience con '"/* \ n * Copyright "'. En cuanto a su otro comentario, ¿hay alguna forma de hacer que emacs avance automáticamente 15 líneas en abierto? Esa podría ser una mejor solución para la simplicidad. Gracias de nuevo. – sligocki

0

Eche un vistazo a folding-mode. Básicamente, todo lo que necesita es una forma de identificar las piezas que se van a plegar, y luego use folding-top-mark y folding-bottom-mark para marcarlas. Por cierto, hay hacks para hacer eso con el código elisp de EMACS, por lo que debería poder encontrar fácilmente un código que se pueda adaptar.

+0

Utilice [hideshow modo menor] (http: // stackoverflow.com/a/14017141/462302) que es un paquete integrado en lugar de modo plegado. – aculich

5

Puede usar hideshow minor mode que es un paquete incorporado estándar que tiene un comando generalizado llamado hs-hide-initial-comment-block que hará lo que quiera sin tener que saber por cuánto tiempo es la sección de comentarios superior. Puede añadirlo al modo de gancho de cualquier idioma, pero aquí hay un ejemplo usando C:

(add-hook 'c-mode-common-hook 'hs-minor-mode t) 
(add-hook 'c-mode-common-hook 'hs-hide-initial-comment-block t) 

Nota, no oculta específicamente sólo los derechos de autor, pero el bloque de comentario inicial completo, que puede ocultar útil documentación, también.

Cuestiones relacionadas