Emacs lisp で、自分なり機能追加、みたいな真似事をやってみた。
自分で学んでやったことは、ほんの僅か。インターフェースとかを組み合わただけだが、なんと時間のかかったかこと。
きっかけは、 org-refile の初回起動が遅くて、イラッとするので、少しぐらい改善できたら、と思ったから。
パソコンが遅いのもあるが、 refile先を細かく分けたからだと思う。ちなみに、NAS へ置いてあるファイルを加えると、たまらなく遅い。
[20191015] 例えば、ここなど、かなり よさそう。最初に読んでいれば、違った方法をやったかも。
やったこと。やろうとしていること。
- refile に使うファイルはたいがい決ってるので、事前登録しておく。
- このファイルを指定して、 `other-window` で開く。
- プレビュとかで移動先を確認する。
- カーソルを元に戻して、リファイル(avy-org-refile-as-childを使ってみる)。
NAS上のファイルへのアクセスも選択的になる。当然、全部は無理なので、 avy-org-refile-as-child までの操作を hydra との組み合わせでやってみた。 bookmark をうまく使えばいいじゃない、という思いもあったが一度やってみてもと思った。
プレビュで、 owdrive で other-window 操作しようと思ったが、ターゲットのorgファイルがfoldで開く設定にしているので止めた。その替りに、hydra メニューに outline-minor-mode の項目を追加してみた。
取り敢えず動いたという感じ。
本当にこんなのが必要なのかは、使ってみてからなのだが、今のところ、 `boolmark-jump-other-window` と `avy-org-refile-as-child` を組合せるだけで十分だったかも。ただ、ショートカットでファイル選択は、いいかも、という印象。できれば、 開き直しに対応させたいが、ハードル高そう。
hydra を含めた全体は以下。実際のターゲットファイルは18個と多い。絞り込めるか。
(setq tflist '("captured.org" ;; 0
"todo.org" ;; 1
"bike_memo.org" ;; 2
"cuekoma.org" ;; 3
"emacs_memo.org" ;; 4
"linux_memo.org" ;; 5
"python.org" ;; 6
"memos.org" ;; 7
"raspi_memo.org" ;; 8
))
;;
(defun my-targetfile-open (n)
"open target file other windows"
(interactive)
(setq targetfile
(concat "~/Documents/ownCloud/" (nth n tflist)))
(find-file-other-window targetfile)
;; (other-window -1) ;; 直前に戻る
(message "open target file : %s" targetfile)
)
;;
(defhydra hyd-opentartget (:pre (progn
(bm-toggle)
(hl-line-mode 1)
)
:post (progn
(bm-toggle)
(hl-line-mode -1)
(other-window -1)
)
:hint nil)
"open target file"
("t" (my-targetfile-open 1) "todo.org" :column "agenda" :exit t)
("m" (my-targetfile-open 7) "memos.org" :exit t)
("b" (my-targetfile-open 2) "bike_memo.org" :exit t)
("p" (my-targetfile-open 6) "python.org" :exit t)
;;
("e" (my-targetfile-open 4) "emacs_memo.org" :column "regular")
("r" (my-targetfile-open 8) "raspi_memo.org" :exit t)
("l" (my-targetfile-open 5) "linux_memo.org" :exit t)
;;
("J" (forward-line 1) "next line" :column "OL move cursor")
("K" (forward-line -1) "previous" )
("U" (scroll-up 5) "sc up 5" )
("D" (scroll-down 5) "sc dn 5" )
;;
("N" outline-next-visible-heading "next head") ;; Next
("P" outline-previous-visible-heading "prev head") ;; Previous
;; ("}" outline-forward-same-level "f same") ;; Forward - same level
;; ("{" outline-backward-same-level "b same") ;; Backward - same level
("T" (beginning-of-buffer 0) "top" )
("G" (end-of-buffer 0) "bottom" )
;;
("M" outline-show-all "show all" :column "ol show")
("T" outline-show-entry "show this")
("S" outline-show-subtree "show below all")
("X" outline-show-children "show child")
;;
("Z" outline-hide-subtree "hide below" :column "ol hide")
("F" outline-hide-body "hide body")
("C" outline-hide-entry "hide this")
("O" outline-hide-other "hide others")
("H" outline-hide-leaves "hide bellow body")
;;
("q" nil "Exit" :exit t :column "Quit")
("." nil "cancel" :color blue)
)
0 件のコメント:
コメントを投稿