2019年9月8日日曜日

Emacs lisp で始めての自分なり(ではなかったrefileの)カスタマイズ?

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 件のコメント:

コメントを投稿

麻のボディタオル

2018年の秋(まだ、自転車を封印してない)、 近江上布伝統産業会館 で、興味からボディタオルを購入した。 お、よかった。: 自然派パン工房 ふるさとの道 ほぼ毎日風呂で使ってきて、ついに寿命がきたようだ。 お店の方に、「糸が痩せて破れてくる」まで使える、と...