[英]combine python-mode with org-mode for emacs
I combined org-mode with lisp-mode to achieve beautiful code folding in emacs for lisp code: lisp-orgi-mode . 我将org-mode与lisp-mode相结合,以便在emacs中为lisp代码实现漂亮的代码折叠: lisp-orgi-mode 。 Basically, I use ';'
基本上,我用';' instead of '*' as the heading character.
而不是'*'作为标题字符。 For comments, I just put a space before the ';', making it ' ;'
对于评论,我只是在';'之前放置一个空格,使其成为';' so it doesn't count as a heading...
所以它不算作标题......
However, doing the same thing with python-mode doesn't work... Probably because the '#' character used by python comments interferes with org-mode settings... 但是,使用python-mode执行相同的操作不起作用...可能是因为python注释使用的'#'字符会干扰org-mode设置...
Anyone been able to combine the functionality successfully ? 任何人都能成功地组合功能? I know people have combined python-mode with outline-mode ( link ), but ouline-mode isn't as good as org-mode...
我知道人们已经将python-mode与outline-mode( 链接 )相结合,但是ouline-mode不如org-mode ...
Edit: Got it working nicely with outline-magic : python-magic.el 编辑:使用outline-magic :python-magic.el很好地工作
I use hideshow-org ( and a small introduction here ) for this purpose, and I think it works really, really good. 我为此目的使用hideshow-org ( 以及一个小介绍 ),我认为它确实非常好用。
These are some additional, but useful snippets: 这些是一些额外但有用的片段:
(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)))
Ok, I got outline-minor-mode working nicely with the following outline-regexp: "[ \\t]*# \\|[ \\t]+\\(class\\|def\\|if\\|elif\\|else\\|while\\|for\\|try\\|except\\|with\\) " Now I get code folding using both python syntax and comment lines as headings. 好吧,我使用以下outline-regexp很好地使用了outline-minor-mode:“[\\ t] *#\\ | [\\ t] + \\(class \\ | def \\ | if \\ | elif \\ | else \\ | while \\ | for \\ | try \\ | except \\ | with \\“”现在我使用python语法和注释行作为标题进行代码折叠。
Would it be possible to adapt your code for using tab to call 'indent-for-tab-command and if there is nothing to do, call 'outline-cycle ? 是否可以调整代码以使用tab来调用'indent-for-tab-command,如果没有任何事情可做,请调用'outline-cycle?
python-magic.el : 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)
I think outline-magic
has been superseded by outshine
, and I don't know if the code above works with it. 我认为
outline-magic
已被outshine
所取代,我不知道上面的代码是否适用于它。 But I was able to get the following code to work, courtesy of a blog post by Ryan Davis : 但是, 由于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)
Maybe someone will find this useful. 也许有人会觉得这很有用。 I think it's an amazing way to make editing and navigating code easier.
我认为这是一种让编辑和导航代码更容易的惊人方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.