2011-02-07 1 views
5

У нас есть сообщения об авторских правах длиной 15 строк в верхней части всех файлов исходного кода.Скрыть длинное сообщение об авторском праве в верхней части всех файлов

Когда я их открываю в emacs, это отнимает много ценного пространства.
Есть ли способ заставить emacs всегда скрывать определенное сообщение, но оставить его в файле?

ответ

3

Вы можете написать функцию, которая сужает ваш буфер ко всем, кроме первых 15 строк.

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

Тогда все, что вам нужно сделать, это убедиться, что эта функция вызывается для каждого файла, содержащего примечание об авторских правах. Это можно сделать, добавив крючок, предпочтительно в основной режим вашего файла. Например, вы могли бы добавить приведенное выше определение функции и следующую строку в файл .emacs:

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

Это вызов функции «скрыть авторские_права_на_документацию-нотная всякий раз, когда вы открываете файл C.

На практике вы, вероятно, захотите сделать вашу функцию крюка более умной, либо проверив, что на самом деле существует скрытая записка об авторских правах, либо запустив скрыть авторское право, только если файл находится в определенном каталоге и т. Д.

Например, придерживаться примере C, вы можете вставить следующий тест в приведенной выше функции:

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

Как для других относятся:

Когда я их открываю в emacs, это отнимает много ценного пространства.

... или вы можете просто прокрутить вниз. Для достижения этой цели автоматически, мы могли бы использовать следующую функцию вместо 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))) 

Однако, почему я рекомендовал первый вариант является то, что если вы просто прокрутите вниз автоматически, то всякий раз, когда вы прыгаете на начало буфера (M-<) вам придется прокручивать вниз вручную. Эта проблема не возникает с сужением решения.

+0

Спасибо, я попробую. – sligocki

+0

@sligocki: Дайте мне знать, если это сработает для вас. – Thomas

+0

Извините за задержку @Thomas, функция отлично работает! Есть ли у вас какие-либо предложения о том, как это сделать, только если файл начинается с уведомления об авторских правах? Например, я был бы рад, если бы это применимо к чему-либо, начиная с ''/* \ n * Copyright. Что касается вашего другого комментария, есть ли способ, чтобы emacs автоматически прокручивал вперед 15 строк при открытии? Это может быть лучшим решением для простоты. Еще раз спасибо. – sligocki

0

Посмотрите на folding-mode. В принципе, все, что вам нужно, это способ идентифицировать детали, которые нужно сложить, а затем использовать folding-top-mark и folding-bottom-mark, чтобы отметить их. К сожалению, с помощью кода EMISS elisp есть хаки, поэтому вы должны легко найти код, который можно адаптировать.

+0

Используйте [режим незначительных показов] (http: // stackoverflow.com/a/14017141/462302), который представляет собой встроенный пакет вместо режима складывания. – aculich

5

Вы можете использовать hideshow minor mode, который является стандартным встроенным пакетом, который имеет обобщенную команду под названием hs-hide-initial-comment-block, которая будет делать то, что вы хотите, не зная, как долго находится верхний раздел комментариев. Вы можете добавить его в режиме крюк любого языка, но вот пример использования C:

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

Примечания, он не скрывает, специально только авторских прав, но полный первоначальный комментарий блок, который может скрыть полезным документация.