2011-02-07 15 views
5

Abbiamo 15 messaggi di copyright lunghi nella parte superiore di tutti i nostri file di codice sorgente.Nascondere il messaggio di copyright lungo sopra tutti i file

Quando li ho aperti in emacs, questo spreca molto spazio prezioso.
C'è un modo per convincere Emacs a nascondere sempre un determinato messaggio, lasciandolo comunque nel file?

risposta

3

È possibile scrivere una funzione che restringe il buffer a tutto tranne le prime 15 righe.

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

Quindi è sufficiente assicurarsi che questa funzione venga richiamata per ogni file che contiene una nota di copyright. Questo può essere fatto aggiungendo un gancio, preferibilmente alla modalità principale del tuo file. Per esempio si potrebbe aggiungere la definizione di funzione di cui sopra e la seguente riga al vostro file .emacs:

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

Questo sarebbe chiamare la funzione 'nascondere-copyright nota ogni volta che si apre un file C.

In pratica, si vorrebbe rendere più intelligente la funzione di hook, controllando se esiste una nota di copyright da nascondere o eseguendo hide-copyright-note solo se un file si trova in una determinata directory ecc.

per esempio, per attaccare con l'esempio C, è possibile inserire la seguente prova nella funzione di cui sopra:

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

per quanto riguarda l'altra preoccupazione:

Quando li apro in emacs, questo spreca molto spazio prezioso.

... oppure si potrebbe semplicemente scorrere verso il basso. Per raggiungere questo automaticamente, potremmo utilizzare la seguente funzione al posto di 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))) 

Tuttavia, il motivo per cui ho consigliato la prima variante è che se si limita a scorrere verso il basso automaticamente, ogni volta che si salta all'inizio del buffer (M-<) dovrai scorrere di nuovo verso il basso manualmente. Questo problema non si verifica con la soluzione di restringimento.

+0

Grazie, provo. – sligocki

+0

@sligocki: fammi sapere se ha funzionato per te. – Thomas

+0

Scusa per il ritardo @Thomas, la funzione funziona benissimo! Hai qualche suggerimento su come farlo solo quando il file inizia con una nota di copyright? Ad esempio, sarei felice di averlo applicato a qualsiasi cosa che inizi con '"/* \ n * Copyright "'. Per quanto riguarda l'altro commento, c'è un modo per far sì che emacs scorra automaticamente 15 righe aperte? Potrebbe essere una soluzione migliore per la semplicità. Grazie ancora. – sligocki

0

Dai un'occhiata allo folding-mode. Fondamentalmente, tutto ciò che serve è un modo per identificare le parti da piegare e quindi usare folding-top-mark e folding-bottom-mark per contrassegnarle. A proposito, ci sono degli hack con il codice elisp EMACS, quindi dovresti essere facilmente in grado di trovare il codice che può essere adattato.

+0

Utilizzare [modalità secondaria hideshow] (http: // stackoverflow.it/a/14017141/462302) che è un pacchetto integrato invece della modalità pieghevole. – aculich

5

È possibile utilizzare hideshow minor mode che è un pacchetto standard incorporato che ha un comando generalizzato chiamato hs-hide-initial-comment-block che farà ciò che si desidera senza dover sapere per quanto tempo la sezione di commento principale è. È possibile aggiungere alla modalità-gancio di qualsiasi lingua, ma ecco un esempio in C:

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

Nota, non nasconde specificamente solo i diritti d'autore, ma il pieno blocco di commento iniziale che può nascondere utile documentazione, pure.

Problemi correlati