2011-02-07 13 views
5

Chúng tôi có 15 thông báo bản quyền dài dòng ở đầu tất cả các tệp mã nguồn của chúng tôi.Ẩn thông báo bản quyền dài ở đầu tất cả các tệp

Khi tôi mở chúng trong các emacs, điều đó sẽ lãng phí rất nhiều không gian có giá trị.
Có cách nào để nhận các emacs luôn giấu một thông điệp nào đó nhưng vẫn để lại trong tập tin?

Trả lời

3

Bạn có thể viết một hàm thu hẹp bộ đệm của bạn vào tất cả mọi thứ trừ 15 dòng đầu tiên.

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

Sau đó, tất cả những gì bạn cần làm là đảm bảo rằng chức năng này được gọi cho mọi tệp có chứa ghi chú bản quyền. Điều này có thể được thực hiện bằng cách thêm một móc, tốt nhất là chế độ chính của tệp của bạn. Ví dụ: bạn có thể thêm định nghĩa hàm ở trên và dòng sau vào tệp .emacs của bạn:

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

Điều này sẽ gọi chức năng 'ẩn-bản quyền-ghi chú bất cứ khi nào bạn mở tệp C. Trong thực tế, bạn có thể muốn làm cho hook-function của bạn thông minh hơn, hoặc bằng cách kiểm tra nếu một lưu ý bản quyền ẩn thực sự tồn tại hoặc bằng cách chạy ẩn-bản quyền-lưu ý chỉ khi một tập tin nằm trong một thư mục nhất định, v.v.

Ví dụ, để gắn bó với ví dụ C, bạn có thể chèn các thử nghiệm sau vào chức năng trên:

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

đối với mối quan tâm khác của bạn:

Khi tôi mở chúng trong các emacs, nó sẽ lãng phí rất nhiều không gian quý giá.

... hoặc bạn chỉ có thể cuộn xuống. Để đạt được điều này tự động, chúng ta có thể sử dụng chức năng sau thay vì 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))) 

Tuy nhiên, lý do tôi đề nghị thay đổi đầu tiên là nếu bạn chỉ đơn thuần là di chuyển xuống tự động, sau đó bất cứ khi nào bạn nhảy đến đầu của bộ đệm (M-<) bạn sẽ phải cuộn xuống theo cách thủ công. Vấn đề này không xảy ra với giải pháp thu hẹp.

+0

Cảm ơn tôi sẽ thử. – sligocki

+0

@sligocki: Hãy cho tôi biết nếu nó phù hợp với bạn. – Thomas

+0

Xin lỗi vì sự chậm trễ @Thomas, chức năng hoạt động tuyệt vời! Bạn có bất kỳ đề xuất nào về cách thực hiện điều này chỉ áp dụng khi tệp bắt đầu với thông báo bản quyền không? Ví dụ, tôi rất vui khi có nó áp dụng cho bất cứ điều gì bắt đầu với '"/* \ n * Bản quyền "'. Đối với bình luận khác của bạn, có cách nào để có emacs tự động di chuyển về phía trước 15 dòng trên mở? Đó có thể là một giải pháp tốt hơn cho sự đơn giản. Cảm ơn một lần nữa. – sligocki

0

Hãy xem folding-mode. Về cơ bản, tất cả những gì bạn cần là một cách để xác định các phần được gấp lại, và sau đó sử dụng folding-top-markfolding-bottom-mark để đánh dấu chúng. Có những hacks để làm điều đó với EMACS elisp mã bằng cách này, vì vậy bạn sẽ dễ dàng có thể tìm thấy mã có thể được điều chỉnh.

+0

Sử dụng [chế độ phụ trợ nhỏ] (http: // stackoverflow.com/a/14017141/462302) là gói tích hợp thay cho chế độ gấp. – aculich

5

Bạn có thể sử dụng hideshow minor mode là gói tích hợp tiêu chuẩn có lệnh chung được gọi là hs-hide-initial-comment-block sẽ thực hiện những gì bạn muốn mà không cần biết phần nhận xét hàng đầu trong bao lâu. Bạn có thể thêm nó vào chế độ-móc của bất kỳ ngôn ngữ, nhưng đây là một ví dụ sử dụng C:

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

Lưu ý, nó không che giấu đặc biệt chỉ bản quyền, nhưng ban đầu khối bình luận đầy đủ mà có thể ẩn hữu ích tài liệu cũng vậy.

Các vấn đề liên quan