zoukankan      html  css  js  c++  java
  • [emacs] python代码折叠

    水木某大牛写的emacs python代码折叠代码, 试了下, 非常好用.  感谢作者: jcjbrian

    http://www.newsmth.net/nForum/#!article/Emacs/81688 

    代码如下:

    发信人: jcjbrian (Brian Jiang), 信区: Emacs 
    标  题: Re: python代码怎么折叠啊? 
    发信站: 水木社区 (Sun Sep  6 16:59:38 2009), 转信 
      
    最近刚好写了一个python的折叠功能。 能简单。 是基于emacs自带的python mode。可以支持各种类型的block (如if, for等)。  
    关键是: mypython-fold/unfold-block。 我把它绑到了F10. 可以自己改。 其他都只是些支持代码。 
      
    ------- 
      

    (defface codepilot-folding-overlay 
       '((default (:inherit region :box (:line-width 1 :color "DarkSeaGreen1" :style released-button))) 
         (((class color)) (:background "DarkSeaGreen2" :foreground "black"))) 
       "*Font used by folding overlay." 
       :group 'codepilot) 
      
    (defun cptree-ov-delete () 
       (interactive) 
       (dolist (o (overlays-at (point))) 
         (cptree-delete-overlay o 'cptree))) 
      
    (defvar cptree--overlay-keymap nil "keymap for folding overlay") 
      
    (unless cptree--overlay-keymap 
       (let ((map (make-sparse-keymap))) 
         (define-key map [mouse-1] 'cptree-ov-delete) 
         (define-key map "\r" 'cptree-ov-delete) 
         (setq cptree--overlay-keymap map))) 
      
    (defun cptree-delete-overlay(o prop) 
       (when (eq (overlay-get o 'cptree-tag) prop) 
         (delete-overlay o) 
         t)) 
      
    (defun cptree-hide-region (from to prop) 
       "Hides a region by making an invisible overlay over it and save the 
    overlay on the hide-region-overlays \"ring\"" 
       (interactive) 
       (let ((new-overlay (make-overlay from to))) 
         ;;(overlay-put new-overlay 'invisible nil) 
         (overlay-put new-overlay 'cptree-tag prop) 
         (overlay-put new-overlay 'face 'codepilot-folding-overlay) 
         (overlay-put new-overlay 'display 
                      (propertize 
                       (format "...<%d lines>..." 
                               (1- (count-lines (overlay-start new-overlay) 
                                                (overlay-end new-overlay)))))) 
         (overlay-put new-overlay 'priority (- 0 from)) 
         (overlay-put new-overlay 'keymap cptree--overlay-keymap) 
         (overlay-put new-overlay 'pointer 'hand))) 
      
    (require 'python) 
      
    (defun mypython-fold/unfold-block () 
       "fold the block" 
       (interactive) 
       (let (ret b e) 
         (dolist (o (overlays-at (if (python-open-block-statement-p) 
                                     (save-excursion 
                                       (python-end-of-statement) 
                                       (point) 
                                       ) 
                                     (point)))) 
           (when (cptree-delete-overlay o 'cptree) 
             (setq ret t))) 
         (unless ret 
           (save-excursion 
             (unless (python-open-block-statement-p) 
               (python-beginning-of-block)) 
             (python-end-of-statement) 
             (setq b (point)) 
             (python-end-of-block) 
             (setq e (1- (point))) 
             (cptree-hide-region b e 'cptree))))) 
      
    (define-key python-mode-map [(f10)] 'mypython-fold/unfold-block) 
    

      

  • 相关阅读:
    poj1014 Dividing (多重背包)
    HDOJ 1316 How Many Fibs?
    最大字串和
    WHY IE AGAIN?
    Codeforces Round #143 (Div. 2) (ABCD 思维场)
    自用组帧工具
    菜鸟学EJB(二)——在同一个SessionBean中使用@Remote和@Local
    shell 块注释
    检测到在集成的托管管道模式下不适用的 ASP.NET 设置的解决方法
    Windows Myeclipse 10 安装 Perl 插件
  • 原文地址:https://www.cnblogs.com/foreveryl/p/2652469.html
Copyright © 2011-2022 走看看