Created
April 25, 2012 04:59
-
-
Save DeaR/2486567 to your computer and use it in GitHub Desktop.
2012/3/5に晒した物纏め #xyzzy
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; -*- mode: lisp; package: outline-tree2; encoding: shift_jis -*- | |
;; @name outline-tree-multiple-frames-fix.l | |
;; @description マルチフレーム版対応 | |
;; @namespace http://kuonn.mydns.jp/ | |
;; @author DeaR | |
;; @timestamp <2012-04-09 18:05:37 DeaR> | |
(provide "outline-tree-multiple-frames") | |
(eval-when (:execute :compile-toplevel :load-toplevel) | |
(require "treeview/setup") | |
(require "outline-tree/defs")) | |
(in-package :outline-tree2) | |
;;-------------------------------------------------------------------------------- | |
;; app-menu | |
(defmacro merge-app-menu (&body body) | |
"*app-menu*をマージして実行" | |
`(progn | |
(let ((original-app-menu ed::*app-menu*)) | |
(when (hash-table-p original-app-menu) | |
(setf ed::*app-menu* (ed::get-app-menu (ed::selected-frame)))) | |
,@body | |
(when (hash-table-p original-app-menu) | |
(setf ed::*app-menu* original-app-menu))))) | |
;;-------------------------------------------------------------------------------- | |
;; merge-frame | |
(defvar *outline-tree-inner-map-frame-p* nil | |
"現在実行しているフレーム") | |
(defvar *outline-tree-app-id-hash* (make-hash-table) | |
"全フレームの*outline-tree-app-id*") | |
(defun get-outline-tree-app-id (&optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-app-id*取得" | |
(or (gethash frame *outline-tree-app-id-hash*) | |
(setf (gethash frame *outline-tree-app-id-hash*) (gensym frame)))) | |
(defun set-outline-tree-app-id (app-id &optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-app-id*設定" | |
(setf (gethash frame *outline-tree-app-id-hash*) app-id)) | |
(defun rem-outline-tree-app-id (&optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-app-id*削除" | |
(remhash frame *outline-tree-app-id-hash*)) | |
(defvar *outline-tree-folder-hash-hash* (make-hash-table) | |
"全フレームの*outline-tree-folder-hash*") | |
(defun get-outline-tree-folder-hash (&optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-folder-hash*取得" | |
(or (gethash frame *outline-tree-folder-hash-hash*) | |
(setf (gethash frame *outline-tree-folder-hash-hash*) (make-hash-table :test #'equal)))) | |
(defun set-outline-tree-folder-hash (folder-hash &optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-folder-hash*設定" | |
(setf (gethash frame *outline-tree-folder-hash-hash*) folder-hash)) | |
(defun rem-outline-tree-folder-hash (&optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-folder-hash*削除" | |
(remhash frame *outline-tree-folder-hash-hash*)) | |
(defvar *outline-tree-category-hash-hash* (make-hash-table) | |
"全フレームの*outline-tree-category-hash*") | |
(defun get-outline-tree-category-hash (&optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-category-hash*取得" | |
(or (gethash frame *outline-tree-category-hash-hash*) | |
(setf (gethash frame *outline-tree-category-hash-hash*) (make-hash-table :test #'equal)))) | |
(defun set-outline-tree-category-hash (category-hash &optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-category-hash*設定" | |
(setf (gethash frame *outline-tree-category-hash-hash*) category-hash)) | |
(defun rem-outline-tree-category-hash (&optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-category-hash*削除" | |
(remhash frame *outline-tree-category-hash-hash*)) | |
(defvar *outline-tree-buffer-hash-hash* (make-hash-table) | |
"全フレームの*outline-tree-buffer-hash*") | |
(defun get-outline-tree-buffer-hash (&optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-buffer-hash*取得" | |
(or (gethash frame *outline-tree-buffer-hash-hash*) | |
(setf (gethash frame *outline-tree-buffer-hash-hash*) (make-hash-table)))) | |
(defun set-outline-tree-buffer-hash (buffer-hash &optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-buffer-hash*設定" | |
(setf (gethash frame *outline-tree-buffer-hash-hash*) buffer-hash)) | |
(defun rem-outline-tree-buffer-hash (&optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-buffer-hash*削除" | |
(remhash frame *outline-tree-buffer-hash-hash*)) | |
(defvar *outline-tree-node-hash-hash* (make-hash-table) | |
"全フレームの*outline-tree-node-hash*") | |
(defun get-outline-tree-node-hash (&optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-node-hash*取得" | |
(or (gethash frame *outline-tree-node-hash-hash*) | |
(setf (gethash frame *outline-tree-node-hash-hash*) (make-hash-table)))) | |
(defun set-outline-tree-node-hash (node-hash &optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-node-hash*設定" | |
(setf (gethash frame *outline-tree-node-hash-hash*) node-hash)) | |
(defun rem-outline-tree-node-hash (&optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-node-hash*削除" | |
(remhash frame *outline-tree-node-hash-hash*)) | |
(defvar *outline-tree-app-menu-hash* (make-hash-table) | |
"全フレームの*outline-tree-app-menu*") | |
(defun get-outline-tree-app-menu (&optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-app-menu*取得" | |
(or (gethash frame *outline-tree-app-menu-hash*) | |
(setf (gethash frame *outline-tree-app-menu-hash*) nil))) | |
(defun set-outline-tree-app-menu (menu &optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-app-menu*設定" | |
(setf (gethash frame *outline-tree-app-menu-hash*) menu)) | |
(defun rem-outline-tree-app-menu (&optional (frame (selected-frame))) | |
"指定フレームの*outline-tree-app-menu*削除" | |
(remhash frame *outline-tree-app-menu-hash*)) | |
(defmacro merge-frame-0 ((frame) &body body) | |
`(let ((frame (or ,frame | |
(selected-frame)))) | |
(when (and (member frame (frame-list)) | |
(get-outline-tree-app-id frame)) | |
(setf *outline-tree-app-id* (get-outline-tree-app-id frame)) | |
(setf *outline-tree-folder-hash* (get-outline-tree-folder-hash frame)) | |
(setf *outline-tree-category-hash* (get-outline-tree-category-hash frame)) | |
(setf *outline-tree-buffer-hash* (get-outline-tree-buffer-hash frame)) | |
(setf *outline-tree-node-hash* (get-outline-tree-node-hash frame)) | |
(setf *outline-tree-app-menu* (get-outline-tree-app-menu frame)) | |
,@body))) | |
(defmacro merge-frame ((&optional frame) &body body) | |
"指定フレームでマージして実行" | |
`(let ((frame (or ,frame | |
(selected-frame)))) | |
(if *outline-tree-inner-map-frame-p* | |
(progn | |
,@body) | |
(outline-tree2::merge-frame-0 (frame) | |
,@body)))) | |
(defmacro map-frame ((&optional frame) &body body) | |
"全フレームをマージして実行" | |
`(let ((frame (or ,frame | |
(selected-frame))) | |
(ret)) | |
(if *outline-tree-inner-map-frame-p* | |
(progn | |
,@body) | |
(progn | |
(get-outline-tree-app-id frame) | |
(setf *outline-tree-inner-map-frame-p* t) | |
(maphash #'(lambda (k v) | |
(if (eq k frame) | |
(setf ret (outline-tree2::merge-frame-0 (k) | |
,@body)) | |
(outline-tree2::merge-frame-0 (k) | |
,@body))) | |
*outline-tree-app-id-hash*) | |
(setf *outline-tree-inner-map-frame-p* nil) | |
ret)))) | |
;;-------------------------------------------------------------------------------- | |
;; require | |
(outline-tree2::merge-frame () | |
(merge-app-menu | |
(require "outline-tree/outline-tree"))) | |
;;-------------------------------------------------------------------------------- | |
;; function | |
(defvar *original-outline-tree-create-buffer-node-by-buffer* #'outline-tree-create-buffer-node-by-buffer) | |
(defun outline-tree-create-buffer-node-by-buffer (&optional buffer) | |
"バッファに対応するノードの作成/更新" | |
(interactive) | |
(outline-tree2::map-frame () | |
(funcall *original-outline-tree-create-buffer-node-by-buffer* buffer))) | |
(defvar *original-outline-tree-delete-buffer-node-by-buffer* #'outline-tree-delete-buffer-node-by-buffer) | |
(defun outline-tree-delete-buffer-node-by-buffer (&optional buffer) | |
"バッファに対応するノードを削除" | |
(interactive) | |
(outline-tree2::map-frame () | |
(funcall *original-outline-tree-delete-buffer-node-by-buffer* buffer))) | |
(defvar *original-outline-tree-insert-category-node* #'outline-tree-insert-category-node) | |
(defun outline-tree-insert-category-node (category-name parent-node &key (insertafter winapi:TVI_SORT) implicit-func explicit-func) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-insert-category-node* category-name parent-node :insertafter insertafter :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-insert-folder-node* #'outline-tree-insert-folder-node) | |
(defun outline-tree-insert-folder-node (folder-name parent-node &key (insertafter winapi:TVI_SORT) implicit-func explicit-func) | |
"フォルダノードを追加する。 | |
insertafter 引数はインターフェース統一のために存在するが無効。" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-insert-folder-node* folder-name parent-node :insertafter insertafter :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-insert-buffer-node* #'outline-tree-insert-buffer-node) | |
(defun outline-tree-insert-buffer-node (buffer parent-node &key (insertafter winapi:TVI_SORT) implicit-func explicit-func) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-insert-buffer-node* buffer parent-node :insertafter insertafter :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-insert-range-node* #'outline-tree-insert-range-node) | |
(defun outline-tree-insert-range-node (range-name parent-node &key (insertafter winapi:TVI_LAST) title-range whole-range sub-type implicit-func explicit-func) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-insert-range-node* range-name parent-node :insertafter insertafter :title-range title-range :whole-range whole-range :sub-type sub-type :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-insert-point-node* #'outline-tree-insert-point-node) | |
(defun outline-tree-insert-point-node (point-name parent-node &key (insertafter winapi:TVI_LAST) point implicit-func explicit-func) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-insert-point-node* point-name parent-node :insertafter insertafter :point point :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-insert-info-node* #'outline-tree-insert-info-node) | |
(defun outline-tree-insert-info-node (info-name parent-node &key (insertafter winapi:TVI_LAST) implicit-func explicit-func) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-insert-info-node* info-name parent-node :insertafter insertafter :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-insert-section-node* #'outline-tree-insert-section-node) | |
(defun outline-tree-insert-section-node (section-name parent-node &key (insertafter winapi:TVI_LAST) implicit-func explicit-func) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-insert-section-node* section-name parent-node :insertafter insertafter :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-remove-range-node* #'outline-tree-remove-range-node) | |
(defun outline-tree-remove-range-node (node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-remove-range-node* node))) | |
(defvar *original-outline-tree-remove-point-node* #'outline-tree-remove-point-node) | |
(defun outline-tree-remove-point-node (node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-remove-point-node* node))) | |
(defvar *original-outline-tree-remove-buffer-node* #'outline-tree-remove-buffer-node) | |
(defun outline-tree-remove-buffer-node (node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-remove-buffer-node* node))) | |
(defvar *original-outline-tree-remove-folder-node* #'outline-tree-remove-folder-node) | |
(defun outline-tree-remove-folder-node (node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-remove-folder-node* node))) | |
(defvar *original-outline-tree-remove-category-node* #'outline-tree-remove-category-node) | |
(defun outline-tree-remove-category-node (node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-remove-category-node* node))) | |
(defvar *original-outline-tree-remove-info-node* #'outline-tree-remove-info-node) | |
(defun outline-tree-remove-info-node (node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-remove-info-node* node))) | |
(defvar *original-outline-tree-remove-section-node* #'outline-tree-remove-section-node) | |
(defun outline-tree-remove-section-node (node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-remove-section-node* node))) | |
(defvar *original-outline-tree-create-outline-ctags* #'outline-tree-create-outline-ctags) | |
(defun outline-tree-create-outline-ctags (root-node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-create-outline-ctags* root-node))) | |
(defvar *original-outline-tree-create-outline-global* #'outline-tree-create-outline-global) | |
(defun outline-tree-create-outline-global (root-node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-create-outline-global* root-node))) | |
(defvar *original-outline-tree-create-outline-XTAGS* #'outline-tree-create-outline-XTAGS) | |
(defun outline-tree-create-outline-XTAGS (root-node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-create-outline-XTAGS* root-node))) | |
(defvar *original-outline-tree-expand-expand-subtree* #'outline-tree-expand-expand-subtree) | |
(defun outline-tree-expand-expand-subtree (node &optional (depth t)) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-expand-expand-subtree* node depth))) | |
(defvar *original-outline-tree-expand-collapse-subtree* #'outline-tree-expand-collapse-subtree) | |
(defun outline-tree-expand-collapse-subtree (node &optional (depth t)) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-expand-collapse-subtree* node depth))) | |
(defvar *original-outline-tree-expand-expand-if-has-heading-node* #'outline-tree-expand-expand-if-has-heading-node) | |
(defun outline-tree-expand-expand-if-has-heading-node (node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-expand-expand-if-has-heading-node* node))) | |
(defvar *original-outline-tree-expand-expand-subtree-show-heading-node* #'outline-tree-expand-expand-subtree-show-heading-node) | |
(defun outline-tree-expand-expand-subtree-show-heading-node (node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-expand-expand-subtree-show-heading-node* node))) | |
(defvar *original-outline-tree-node-implicit-func-gen* #'outline-tree-node-implicit-func-gen) | |
(defun outline-tree-node-implicit-func-gen (&optional node) | |
"outline-tree: 暗黙的にノードに対して行う処理用関数を生成" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-node-implicit-func-gen* node))) | |
(defvar *original-outline-tree-node-explicit-func-gen* #'outline-tree-node-explicit-func-gen) | |
(defun outline-tree-node-explicit-func-gen (&optional node) | |
"outline-tree: 明示的にノードに対して行う処理用関数を生成" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-node-explicit-func-gen* node))) | |
(defvar *original-outline-tree-initialize-icons* #'outline-tree-initialize-icons) | |
(defun outline-tree-initialize-icons () | |
"treeview の icon を設定" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-initialize-icons*))) | |
(defvar *original-outline-tree-initialize-treeview* #'outline-tree-initialize-treeview) | |
(defun outline-tree-initialize-treeview () | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-initialize-treeview*))) | |
(defvar *original-outline-tree-exist-p* #'outline-tree-exist-p) | |
(defun outline-tree-exist-p () | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-exist-p*))) | |
(defvar *original-outline-tree-open* #'outline-tree-open) | |
(defun outline-tree-open () | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-open*))) | |
(defvar *original-outline-tree-close* #'outline-tree-close) | |
(defun outline-tree-close () | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-close*))) | |
(defvar *original-outline-tree-open-p* #'outline-tree-open-p) | |
(defun outline-tree-open-p () | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-open-p*))) | |
(defvar *original-outline-tree-close-p* #'outline-tree-close-p) | |
(defun outline-tree-close-p () | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-close-p*))) | |
(defvar *original-outline-tree-node-has-children-p* #'outline-tree-node-has-children-p) | |
(defun outline-tree-node-has-children-p (node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-node-has-children-p* node))) | |
(defvar *original-outline-tree-get-selected-node* #'outline-tree-get-selected-node) | |
(defun outline-tree-get-selected-node () | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-get-selected-node*))) | |
(defvar *original-outline-tree-create* #'outline-tree-create) | |
(defun outline-tree-create (&optional frame) | |
"outline-tree: アウトラインツリー作成" | |
(interactive) | |
(outline-tree2::merge-frame (frame) | |
(funcall *original-outline-tree-create*))) | |
(defvar *original-outline-tree-delete* #'outline-tree-delete) | |
(defun outline-tree-delete (&optional frame) | |
"outline-tree: アウトラインツリー削除" | |
(interactive) | |
(outline-tree2::merge-frame (frame) | |
(funcall *original-outline-tree-delete*))) | |
(defvar *original-outline-tree-revdata-set-category-node* #'outline-tree-revdata-set-category-node) | |
(defun outline-tree-revdata-set-category-node (category-name node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-revdata-set-category-node* category-name node))) | |
(defvar *original-outline-tree-revdata-del-category-node* #'outline-tree-revdata-del-category-node) | |
(defun outline-tree-revdata-del-category-node (node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-revdata-del-category-node* node))) | |
(defvar *original-outline-tree-update-folder-node* #'outline-tree-update-folder-node) | |
(defun outline-tree-update-folder-node (node &key (folder-name nil folder-name-sv) (implicit-func nil implicit-func-sv) (explicit-func nil explicit-func-sv)) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-update-folder-node* node :folder-name folder-name :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-update-category-node* #'outline-tree-update-category-node) | |
(defun outline-tree-update-category-node (node &key (category-name nil category-name-sv) (implicit-func nil implicit-func-sv) (explicit-func nil explicit-func-sv)) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-update-category-node* node :category-name category-name :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-update-buffer-node* #'outline-tree-update-buffer-node) | |
(defun outline-tree-update-buffer-node (node &key (buffer nil buffer-sv) (implicit-func nil implicit-func-sv) (explicit-func nil explicit-func-sv)) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-update-buffer-node* node :buffer buffer :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-update-range-node* #'outline-tree-update-range-node) | |
(defun outline-tree-update-range-node (node &key (range-name nil range-name-sv) (title-range nil title-range-sv) (contents-range nil contents-range-sv) (whole-range nil whole-range-sv) (implicit-func nil implicit-func-sv) (explicit-func nil plicit-func-sv)) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-update-range-node* node :range-name range-name :title-range title-range :contents-range contents-range :whole-range whole-range :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-update-point-node* #'outline-tree-update-point-node) | |
(defun outline-tree-update-point-node (node &key (point-name nil point-name-sv) (point nil point-sv) (implicit-func nil implicit-func-sv) (explicit-func nil explicit-func-sv)) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-update-point-node* node :point-name point-name :point point :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-update-info-node* #'outline-tree-update-info-node) | |
(defun outline-tree-update-info-node (node &key (info-name nil info-name-sv) (implicit-func nil implicit-func-sv) (explicit-func nil explicit-func-sv)) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-update-info-node* node :info-name info-name :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-update-section-node* #'outline-tree-update-section-node) | |
(defun outline-tree-update-section-node (node &key (section-name nil section-name-sv) (implicit-func nil implicit-func-sv) (explicit-func nil explicit-func-sv)) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-update-section-node* node :section-name section-name :implicit-func implicit-func :explicit-func explicit-func))) | |
(defvar *original-outline-tree-abbreviate-display-folder-name* #'outline-tree-abbreviate-display-folder-name) | |
(defun outline-tree-abbreviate-display-folder-name (&optional length) | |
"フォルダノード名の表示幅を変更する。" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-abbreviate-display-folder-name* length))) | |
(defvar *original-outline-tree-sort-folder-node* #'outline-tree-sort-folder-node) | |
(defun outline-tree-sort-folder-node () | |
"フォルダノードをフォルダノード名でソートする。 | |
outline-tree-insert-folder-node 関数内で使用される。" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-sort-folder-node*))) | |
(defvar *original-outline-tree-update-modified-buffer-node-name-view* #'outline-tree-update-modified-buffer-node-name-view) | |
(defun outline-tree-update-modified-buffer-node-name-view () | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-update-modified-buffer-node-name-view*))) | |
(defvar *original-outline-tree-sort-node* #'outline-tree-sort-node) | |
(defun outline-tree-sort-node (parent-node) | |
"指定した parent-node の子ノードをノード名でソートする。 | |
outline-tree-insert-buffer-node 関数内で使用される。" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-sort-node* parent-node))) | |
(defvar *original-outline-tree-funcall-buffer-by-node* #'outline-tree-funcall-buffer-by-node) | |
(defun outline-tree-funcall-buffer-by-node (func node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-funcall-buffer-by-node* func node))) | |
(defvar *original-outline-tree-set-data-contents-range-tree-by-node* #'outline-tree-set-data-contents-range-tree-by-node) | |
(defun outline-tree-set-data-contents-range-tree-by-node (&optional node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-set-data-contents-range-tree-by-node* node))) | |
(defvar *original-outline-tree-set-data-output-range-tree-by-node* #'outline-tree-set-data-output-range-tree-by-node) | |
(defun outline-tree-set-data-output-range-tree-by-node (&optional node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-set-data-output-range-tree-by-node* node))) | |
(defvar *original-outline-tree-get-create-outline-function-by-buffer* #'outline-tree-get-create-outline-function-by-buffer) | |
(defun outline-tree-get-create-outline-function-by-buffer (&optional buffer) | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-get-create-outline-function-by-buffer* buffer))) | |
(defvar *original-outline-tree-create-outline-by-buffer* #'outline-tree-create-outline-by-buffer) | |
(defun outline-tree-create-outline-by-buffer (&optional buffer) | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-create-outline-by-buffer* buffer))) | |
(defvar *original-outline-tree-delete-outline-by-buffer* #'outline-tree-delete-outline-by-buffer) | |
(defun outline-tree-delete-outline-by-buffer (&optional buffer) | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-delete-outline-by-buffer* buffer))) | |
(defvar *original-outline-tree-exist-outline-p-by-buffer* #'outline-tree-exist-outline-p-by-buffer) | |
(defun outline-tree-exist-outline-p-by-buffer (&optional buffer) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-exist-outline-p-by-buffer* buffer))) | |
(defvar *original-outline-tree-initialize-expand-node* #'outline-tree-initialize-expand-node) | |
(defun outline-tree-initialize-expand-node () | |
"ノードの開閉状態を初期状態にする | |
初期状態:フォルダノードを展開 | |
非表示バッファカテゴリノード以外のカテゴリノードを展開 | |
outline-tree-create 内で用いられる補助関数" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-initialize-expand-node*))) | |
(defvar *original-outline-tree-get-buffer-by-node* #'outline-tree-get-buffer-by-node) | |
(defun outline-tree-get-buffer-by-node (&optional node) | |
"node が属する buffer を返す" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-get-buffer-by-node* node))) | |
(defvar *original-outline-tree-get-buffer-node-by-node* #'outline-tree-get-buffer-node-by-node) | |
(defun outline-tree-get-buffer-node-by-node (&optional node) | |
"node が属する buffer-node を返す" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-get-buffer-node-by-node* node))) | |
(defvar *original-outline-tree-get-folder-node-by-node* #'outline-tree-get-folder-node-by-node) | |
(defun outline-tree-get-folder-node-by-node (&optional node) | |
"node が属する folder-node を返す" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-get-folder-node-by-node* node))) | |
(defvar *original-outline-tree-get-category-node-by-node* #'outline-tree-get-category-node-by-node) | |
(defun outline-tree-get-category-node-by-node (&optional node) | |
"node が属する category-node を返す" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-get-category-node-by-node* node))) | |
(defvar *original-outline-tree-get-node-by-buffer* #'outline-tree-get-node-by-buffer) | |
(defun outline-tree-get-node-by-buffer (&optional buffer) | |
"buffer と point に対応する node を返す" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-get-node-by-buffer* buffer))) | |
(defvar *original-outline-tree-select-node-by-node* #'outline-tree-select-node-by-node) | |
(defun outline-tree-select-node-by-node (&optional node select-only) | |
"渡された node を選択する" | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-select-node-by-node* node select-only))) | |
(defvar *original-outline-tree-select-up-key-node* #'outline-tree-select-up-key-node) | |
(defun outline-tree-select-up-key-node (&optional node select-only) | |
"node を基準とし、Up キーを押した際の移動先となる node を選択する" | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-select-up-key-node* node select-only))) | |
(defvar *original-outline-tree-select-down-key-node* #'outline-tree-select-down-key-node) | |
(defun outline-tree-select-down-key-node (&optional node select-only) | |
"node を基準とし、Down キーを押した際の移動先となる node を選択する" | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-select-down-key-node* node select-only))) | |
(defvar *original-outline-tree-select-left-key-node* #'outline-tree-select-left-key-node) | |
(defun outline-tree-select-left-key-node (&optional node select-only) | |
"node を基準とし、Left キーを押した際の移動先となる node を選択する" | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-select-left-key-node* node select-only))) | |
(defvar *original-outline-tree-select-right-key-node* #'outline-tree-select-right-key-node) | |
(defun outline-tree-select-right-key-node (&optional node select-only) | |
"node を基準とし、Right キーを押した際の移動先となる node を選択する" | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-select-right-key-node* node select-only))) | |
(defvar *original-outline-tree-select-pageup-key-node* #'outline-tree-select-pageup-key-node) | |
(defun outline-tree-select-pageup-key-node (&optional node select-only) | |
"node を基準とし、PageUp キーを押した際の移動先となる node を選択する" | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-select-pageup-key-node* node select-only))) | |
(defvar *original-outline-tree-select-pagedown-key-node* #'outline-tree-select-pagedown-key-node) | |
(defun outline-tree-select-pagedown-key-node (&optional node select-only) | |
"node を基準とし、PageDown キーを押した際の移動先となる node を選択する" | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-select-pagedown-key-node* node select-only))) | |
(defvar *original-outline-tree-select-ancestor-node* #'outline-tree-select-ancestor-node) | |
(defun outline-tree-select-ancestor-node (&optional node select-only) | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-select-ancestor-node* node select-only))) | |
(defvar *original-outline-tree-select-eldest-descendants-node* #'outline-tree-select-eldest-descendants-node) | |
(defun outline-tree-select-eldest-descendants-node (&optional node select-only) | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-select-eldest-descendants-node* node select-only))) | |
(defvar *original-outline-tree-select-youngest-descendants-node* #'outline-tree-select-youngest-descendants-node) | |
(defun outline-tree-select-youngest-descendants-node (&optional node select-only) | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-select-youngest-descendants-node* node select-only))) | |
(defvar *original-outline-tree-select-node-delay* #'outline-tree-select-node-delay) | |
(defun outline-tree-select-node-delay () | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-select-node-delay*))) | |
(defvar *original-outline-tree-has-heading-node-p-by-buffer* #'outline-tree-has-heading-node-p-by-buffer) | |
(defun outline-tree-has-heading-node-p-by-buffer (&optional buffer) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-has-heading-node-p-by-buffer* buffer))) | |
(defvar *original-outline-tree-select-node-by-window-for-hook* #'outline-tree-select-node-by-window-for-hook) | |
(defun outline-tree-select-node-by-window-for-hook () | |
"対象ウィンドウに関連付いたバッファのポイントに対応するノードを選択する。 | |
アウトラインが最新で、常にハイライトの設定がなされていれば、範囲の | |
ハイライトも行う。 | |
大抵のコマンドの後では hook 動作を行うが、基本的に treeview、outline-tree を | |
明示的に操作しているコマンドの場合は安全のため、動作を行わない。" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-select-node-by-window-for-hook*))) | |
(defvar *original-outline-tree-isearch-forward* #'outline-tree-isearch-forward) | |
(defun outline-tree-isearch-forward (&optional reverse) | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-isearch-forward* reverse))) | |
(defvar *original-outline-tree-buffer-list* #'outline-tree-buffer-list) | |
(defun outline-tree-buffer-list (&optional top-node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-buffer-list* top-node))) | |
(defvar *original-outline-tree-set-buffer-by-node* #'outline-tree-set-buffer-by-node) | |
(defun outline-tree-set-buffer-by-node (&optional node) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-set-buffer-by-node* node))) | |
(defvar *original-outline-tree-delete-region-by-range-node* #'outline-tree-delete-region-by-range-node) | |
(defun outline-tree-delete-region-by-range-node (&optional range-node) | |
"range-node とともに、リージョンを削除" | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-delete-region-by-range-node* range-node))) | |
(defvar *original-outline-tree-get-swap-target-range-node* #'outline-tree-get-swap-target-range-node) | |
(defun outline-tree-get-swap-target-range-node (range-node &optional prev) | |
"入替え可能な range-node を返す" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-get-swap-target-range-node* range-node prev))) | |
(defvar *original-outline-tree-swap-region-by-next-range-node* #'outline-tree-swap-region-by-next-range-node) | |
(defun outline-tree-swap-region-by-next-range-node (&optional range-node prev) | |
"range-node を次の range-node と入替え、リージョンの内容も入替える" | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-swap-region-by-next-range-node* range-node prev))) | |
(defvar *original-outline-tree-create-outline-and-select-node* #'outline-tree-create-outline-and-select-node) | |
(defun outline-tree-create-outline-and-select-node () | |
(interactive) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-create-outline-and-select-node*))) | |
(defvar *original-outline-tree-output-html* #'outline-tree-output-html) | |
(defun outline-tree-output-html (&optional (type :range) root-node output-depth frame-p (header 'outline-tree-output-html-header) (footer 'outline-tree-output-html-footer) (frame 'outline-tree-output-html-frame) (css 'outline-tree-output-html-css)) | |
"HTML 出力 | |
type への指定 : :range, :heading | |
output-depth への指定: nil, :expand" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-output-html* type root-node output-depth frame-p header footer frame css))) | |
;;-------------------------------------------------------------------------------- | |
;; menu | |
(defvar *original-outline-tree-startup-app-menu* #'outline-tree-startup-app-menu) | |
(defun outline-tree-startup-app-menu () | |
(merge-app-menu | |
(funcall *original-outline-tree-startup-app-menu*))) | |
(defvar *original-outline-tree-insert-menu-items* #'outline-tree-insert-menu-items) | |
(defun outline-tree-insert-menu-items (&key menu position head-sep tail-sep) | |
"outline-tree: メニューへ登録" | |
(outline-tree2::merge-frame () | |
(merge-app-menu | |
(funcall *original-outline-tree-insert-menu-items* :menu menu :position position :head-sep head-sep :tail-sep tail-sep)))) | |
(defvar *original-outline-tree-delete-menu* #'outline-tree-delete-menu) | |
(defun outline-tree-delete-menu (&optional menu) | |
"outline-tree: メニューから削除" | |
(merge-app-menu | |
(funcall *original-outline-tree-delete-menu* menu))) | |
(defvar *original-outline-tree-insert-app-menu* #'outline-tree-insert-app-menu) | |
(defun outline-tree-insert-app-menu (&key (menu (current-menu)) (position *outline-tree-app-menu-position*) (menu-name *outline-tree-app-menu-name*)) | |
(unless menu | |
(if (menup ed::*app-menu*) | |
(setf menu ed::*app-menu*) | |
(setf menu (ed::get-app-menu (ed::selected-frame))))) | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-insert-app-menu* :menu menu :position position :menu-name menu-name))) | |
(defvar *original-outline-tree-create-app-menu* #'outline-tree-create-app-menu) | |
(defun outline-tree-create-app-menu () | |
"メニューを作成" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-create-app-menu*) | |
(set-outline-tree-app-menu *outline-tree-app-menu*))) | |
(defvar *original-outline-tree-menu-gen* #'outline-tree-menu-gen) | |
(defun outline-tree-menu-gen (node) | |
"outline-tree: node に対応するメニューを生成 | |
※実装上の注意: 選択しているノードのバッファとカレントバッファは異なる | |
場合がありえるので注意。" | |
(outline-tree2::merge-frame () | |
(funcall *original-outline-tree-menu-gen* node))) | |
;;-------------------------------------------------------------------------------- | |
;; hook | |
(defun outline-tree-init-app-menus-hook (&optional (frame (selected-frame))) | |
(outline-tree2::merge-frame (frame) | |
(tv::treeview-app-id-register *outline-tree-app-id*) | |
(when (eq *outline-tree-use* t) | |
(outline-tree-create frame))) | |
(outline-tree-insert-app-menu)) | |
(add-hook '*init-app-menus-hook* 'outline-tree-init-app-menus-hook) | |
(defun outline-tree-delete-frame-functions (frame) | |
(outline-tree2::merge-frame (frame) | |
(tv::treeview-app-id-unregister *outline-tree-app-id*) | |
(rem-outline-tree-app-id frame) | |
(rem-outline-tree-folder-hash frame) | |
(rem-outline-tree-category-hash frame) | |
(rem-outline-tree-buffer-hash frame) | |
(rem-outline-tree-node-hash frame) | |
(rem-outline-tree-app-menu frame))) | |
(add-hook '*delete-frame-functions* 'outline-tree-delete-frame-functions) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
outline-treeのマルチフレーム対応 - こんなに月も紅いのに