origami 20170129.805(in MELPA)
Flexible text folding

概要

<2015-01-17 Sat>
outline-magic.el(レビュー)outline-mode
outline-minor-modeorg-mode と同等の折畳み・展開をします。

<2015-01-05 Mon>
view-modeを解除しても折畳みを保持するよう設定を更新しました。

origami.el は、Lisp系言語とC系言語で関数・メソッドを
折畳み・展開するマイナーモードです。

いわば、 org-mode 風にコードのアウトラインを
見るようにするものです。

yafolding.elhideshow.el と同様ですが
これらよりも高機能です。

また、origami.elは言語のパーサを内蔵している点も異なります。

ただ、デフォルトの状態では単にコマンドが羅列してあるだけなので、
本設定では view-mode 時にC-i(TAB)を押すことで
org-mode風の挙動をさせています。

C-iで現在の関数(メソッド)を折畳み・展開し、
C-u C-iですべての関数(メソッド)の折畳み・展開をします。

一般にアウトライン操作は閲覧時に使うものなので、
view-modeにキーを割り当てておくことを強くおすすめします。

outline-minor-mode のように普通に
マイナーモードを定義しているだけでは、
気が狂ったようなキーバインドになってしまうからです。

コードを見るときはぜひともview-modeを使いましょう。

指の保護にもなります。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてorigamiを使う方は
以下のコマンドを実行します。

M-x package-install origami

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name origami

設定 150103055834.origami.el(以下のコードと同一)

(require 'origami)
;; (makunbound 'origami-view-mode-map)
(define-minor-mode origami-view-mode
  "TABにorigamiの折畳みを割り当てる"
  nil "折紙"
  '(("\C-i" . origami-cycle))
  (or origami-mode (origami-mode 1)))
(defun origami-cycle (recursive)
  "origamiの機能をorg風にまとめる"
  (interactive "P")
  (call-interactively
   (if recursive 'origami-toggle-all-nodes 'origami-toggle-node)))
(defun view-mode-hook--origami ()
  (when (memq major-mode (mapcar 'car origami-parser-alist))
    (origami-view-mode (if view-mode 1 -1))))
(add-hook 'view-mode-hook 'view-mode-hook--origami)

実行方法

$ wget http://rubikitch.com/f/150103055834.origami.el
$ emacs -Q -f package-initialize -l 150103055834.origami.el

20150103062240.png
Fig1: view-modeにてC-u C-iで折畳み

20150103062245.png
Fig2: C-iで展開

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。