育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
最近刚好写了一个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)
南京研旭电气科技有限公司在产品研发前期、算法验证阶段,若采用实际控制器进行控制时,存在周期长、可靠性差等问题。若采用快速控制原型(Rapid Control Prototyping简称RCP),那么就可以高效的、便捷的完成了前期算法的验证。...
点击进入详情页
本回答由
南京研旭电气科技有限公司_
提供