Howm

open-junk-file+howmでサンプルコードテスト環境を構築

ぼくはプログラマーではないけど、作業の自動化などを図るためにときどきパッチワークコードを試すことがある。 この目的のために多くの人は、open-junk-file.elを使っているみたいなので素直に見習う。

サンプルコードの場合、うまく動くことが確認できたらあとは使い捨てになるので保存場所にはさほど神経質にならなくても良いが、あとからの検索を用意にするためにぼくの場合は、howmフォルダーに置いている。検索は、helm-agでもいいのだけどhowmの一覧機能や検索機能がとても使いやすく優れているからだ。

open-junk-file.el

メモのファイル名は、[timestamp.拡張子]という使い方が多いみたいだけど、ちょっと判りにくいので、ぼくの場合は、20170717.hoghoge.plという感じにしてる。

;;--------------------------------------------------------------------------------
;; open-junk-file.el                                      last updated: 2017/07/17
;;--------------------------------------------------------------------------------
(use-package open-junk-file
  :bind ("C-c j" . open-junk-file)
  :config (setq open-junk-file-format "~/Dropbox/howm/junk/%Y/%Y%m%d."))

;; Automatically insert tags according to extension
(defvar open-junk-ext-tags-alist
  '(("el" ";;" "ELISP")
    ("pl" "#" "PERL")
    ("py" "#" "PYTHON")
    ("rb" "#" "RUBY")))
(defadvice open-junk-file
  (after open-junk-file-insert-howm-comment-advice activate)
  "After open-junk-file, insert a tag into the opened buffer
to be searched by howm."
  (let* ((ext (replace-regexp-in-string "^.*\\.\\([^\\.]+\\)$" "\\1" buffer-file-name))
         (asc (assoc ext open-junk-ext-tags-alist))
         (prefix (cadr asc))
         (tag (caddr asc)))
    (insert prefix)
    (insert " %" tag)))

quickrun.el

コードを試運転したりデバッグするときに quickrun.el を入れて併用すると最強となる。

;;-------------------------------------------------------------------------
;; 20_quicrun.el                                   last updated: 2017/07/05
;;-------------------------------------------------------------------------
(use-package quickrun
  :bind ("C-c q" . quickrun) ;; ファイルを実行する
        ("C-c c" . quickrun-compile-only))

メモ機能に特化した超シンプルなhowm+Dropboxの設定

メモ機能に特化したhowmの設定を紹介します。

  • GTDとしては使わないのでメニュー画面は使いません。
  • メニュー画面は使いませんが検索などの基本機能は全て使えます。
  • 新規投稿と一覧表示のみ直接使えるようにkey-bindしています。
  • ファイルは、スマホや他の端末からも共有出来るようにDropboxで管理します。
  • メモは、markdown-mode で書きます。理由は後述します。

howm-memoの設定

;*************************************************************************
;; howm-memo.el                       last updated: 2017/06/09
;*************************************************************************
;; M-x package-install howm
;; (use-package key-chord)
;; (use-package use-package-chords
;;   :config (key-chord-mode 1))
;;-----------------------------------------------------------------------
(use-package howm
  :init
  (setq howm-view-title-header "#"
        howm-directory "~/Dropbox/howm"
        howm-file-name-format "%Y/%m/%Y-%m%d-%H%M.md"
  :config
  (setq howm-view-split-horizontally t      ;; 一覧バッファと内容バッファを横に並べる
        howm-view-summary-persistent nil    ;; RET でファイルを開く際一覧バッファを消す
  :chords ((",," . howm-create)             ;; メモを書く
           ("@@" . howm-list-all)))         ;; メモ一覧を開く

;; 空になったファイルを尋ねずに自動削除:howm以外でも有効
(defun my:delete-file-if-no-contents ()
  (when (and (buffer-file-name (current-buffer))
             (= (point-min) (point-max)))
    (delete-file
     (buffer-file-name (current-buffer)))))
(if (not (memq 'my:delete-file-if-no-contents after-save-hook))
    (setq after-save-hook
          (cons 'my:delete-file-if-no-contents after-save-hook)))

;***********************************************************************
; end of file