2010-11-02 33 views
11

Tôi kết hợp chế độ org với chế độ lisp để đạt được mã gấp đẹp trong các emacs cho mã lisp: lisp-orgi-mode. Về cơ bản, tôi sử dụng ';' thay vì '*' làm ký tự đầu đề. Đối với ý kiến, tôi chỉ cần đặt một không gian trước khi ';', làm cho nó ';' do đó, nó không được tính là một tiêu đề ...kết hợp chế độ python với chế độ org cho emacs

Tuy nhiên, làm điều tương tự với chế độ python không hoạt động ... Có thể vì ký tự '#' được sử dụng bởi các chú thích python can thiệp vào cài đặt chế độ org ...

Bất kỳ ai có thể kết hợp chức năng thành công? Tôi biết mọi người đã kết hợp chế độ python với chế độ phác thảo (link), nhưng chế độ ouline không tốt bằng chế độ org ...

Chỉnh sửa: Có hoạt động độc đáo với outline-magic: python-magic. el

Trả lời

10

Tôi sử dụng hideshow-org (and a small introduction here) cho mục đích này và tôi nghĩ rằng nó hoạt động thực sự, thực sự tốt.

Đây là những bổ sung, nhưng hữu ích một số đoạn:

(dolist (hook (list 'c-mode-common-hook 
      'emacs-lisp-mode-hook 
      'java-mode-hook 
      'lisp-mode-hook 
      'perl-mode-hook 
      'sh-mode-hook)) 
    (add-hook hook 'my-hideshow-hook)) 

(defun my-hideshow-hook() 
    "thisandthat." 
    (interactive) 
    (progn (require 'hideshow-org) 
    (global-set-key (kbd "C-c h") 'hs-org/minor-mode) 
    (hs-org/minor-mode))) 

(defadvice goto-line (after expand-after-goto-line activate compile) 
    "hideshow-expand affected block when using goto-line in a collapsed buffer" 
    (save-excursion 
    (hs-show-block))) 
+0

đẹp. Có thể xoay vòng các cấp gấp ngoài chỉ một lần lặp? – Naveen

+0

Không, nó không tốt bằng chế độ org là với các cấp độ gấp xe đạp khác nhau. Nhưng nó vẫn rất hữu ích và nhanh hơn rất nhiều so với C-x n n. Giải pháp – monotux

+0

dưới đây là tốt như chế độ org để đi xe đạp các cấp gấp khác nhau. Bạn đã thử à ? – Naveen

7

Ok, tôi đã phác thảo-nhỏ-chế độ làm việc độc đáo với đề cương-regexp sau: "[\ t] * # \ | [\ t ] + \ (class \ | def \ | nếu \ | elif \ | else \ | trong khi \ | cho \ | try \ | ngoại trừ \ | với \) " Bây giờ tôi nhận được mã gấp bằng cách sử dụng cả cú pháp python và dòng chú thích làm tiêu đề .
Bạn có thể điều chỉnh mã của mình để sử dụng tab để gọi lệnh 'thụt lề-cho-tab' và nếu không có gì để làm, hãy gọi 'chu trình phác thảo?

python-magic.el:

; require outline-magic.el by CarstenDominik found here: 
; http://www.astro.uva.nl/~dominik/Tools/outline-magic.el 
; modified code here by Nikwin slightly found here: 
; http://stackoverflow.com/questions/1085170/how-to-achieve-code-folding-effects-in-emacs/1085551#1085551 

(add-hook 'outline-minor-mode-hook 
      (lambda() 
      (require 'outline-magic) 
)) 
(add-hook 'python-mode-hook 'my-python-outline-hook) 

(defun py-outline-level() 
    (let (buffer-invisibility-spec) 
    (save-excursion 
     (skip-chars-forward " ") 
     (current-column)))) 

(defun my-python-outline-hook() 
    (setq outline-regexp "[ \t]*# \\|[ \t]+\\(class\\|def\\|if\\|elif\\|else\\|while\\|for\\|try\\|except\\|with\\) ") 
    (setq outline-level 'py-outline-level) 

    (outline-minor-mode t) 
    (hide-body) 
    (show-paren-mode 1) 
    (define-key python-mode-map [tab] 'outline-cycle) 
    (define-key outline-minor-mode-map [S-tab] 'indent-for-tab-command) 
    (define-key outline-minor-mode-map [M-down] 'outline-move-subtree-down) 
    (define-key outline-minor-mode-map [M-up] 'outline-move-subtree-up) 
) 
(provide 'python-magic)
0

Tôi nghĩ outline-magic đã được thay thế bởi outshine, và tôi không biết nếu mã trên làm việc với nó. Nhưng tôi đã có thể nhận được mã sau để hoạt động, miễn là a blog post by Ryan Davis:

(defun python-mode-outline-hook() 
    (setq outline-level 'python-outline-level) 

    (setq outline-regexp 
    (rx (or 
     ;; Commented outline heading 
     (group 
      (* space) ; 0 or more spaces 
      (one-or-more (syntax comment-start)) 
      (one-or-more space) 
      ;; Heading level 
      (group (repeat 1 8 "\*")) ; Outline stars 
      (one-or-more space)) 

     ;; Python keyword heading 
     (group 
      ;; Heading level 
      (group (* space)) ; 0 or more spaces 
      bow 
      ;; Keywords 
      (or "class" "def" "else" "elif" "except" "for" "if" "try" "while") 
      eow))))) 

(defun python-outline-level() 
    (or 
    ;; Commented outline heading 
    (and (string-match (rx 
       (* space) 
       (one-or-more (syntax comment-start)) 
       (one-or-more space) 
       (group (one-or-more "\*")) 
       (one-or-more space)) 
       (match-string 0)) 
    (- (match-end 0) (match-beginning 0))) 

    ;; Python keyword heading, set by number of indentions 
    ;; Add 8 (the highest standard outline level) to every Python keyword heading 
    (+ 8 (- (match-end 0) (match-beginning 0))))) 

(add-hook 'python-mode-hook 'python-mode-outline-hook) 

Có thể ai đó sẽ thấy điều này hữu ích. Tôi nghĩ đó là một cách tuyệt vời để chỉnh sửa và điều hướng mã dễ dàng hơn.

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