(たぶん車輪の再発明)現在のカーソルより右から始まる行を非表示にする。
hide-unhide-toggle-deeper-lineという関数を作った。
明日もう少し綺麗にする。*1
これが
#| <-"|"の位置にカーソルをおく def f puts("foo") puts("bar") end
こうなる*2
#l| <-"|"の位置にカーソルをおく def f end
コード
(require 'cl) (require 'outline) (defmacro count-length (action size) `(let ((%from (point)) (%to (progn ,action (point)))) (* (- %to %from) ,size))) (defun my-count-current-depth () (save-excursion (goto-char (point-at-bol)) (+ (count-length (skip-chars-forward my-skip-chars) 1) (count-length (skip-chars-forward "\t") tab-width)))) (defvar my-hide-deeper-p nil) (defvar my-skip-chars " \;#") ;;ここにskipしたい文字を追加する (make-variable-buffer-local 'my-hide-deeper-p) (defun my-hide-deeper-line (beg end depth) (save-excursion (goto-char beg) (while (< (point) end) (when (or (= (point-at-bol) (point-at-eol)) (< depth (my-count-current-depth))) (outline-flag-region (point-at-bol) (+ 1 (point-at-eol)) t)) (goto-char (+ 1 (point-at-eol)))))) (defun my-hide-deeper--current-line () (let ((current-depth (min (my-count-current-depth) (- (point) (point-at-bol))))) (print current-depth) (multiple-value-bind (beg end) (if (region-active-p) (values (region-beginning) (region-end)) (values (point-min) (point-max))) (my-hide-deeper-line beg end current-depth)))) (defun hide-unhide-toggle-deeper-line () (interactive) (unwind-protect (if my-hide-deeper-p (show-all) (my-hide-deeper--current-line)) (setq my-hide-deeper-p (not my-hide-deeper-p)))) ;; (require 'key-chord) ;; (key-chord-define-global "kl" 'hide-unhide-toggle-deeper-line)