./configure --with-lispdir=d:/cyg/usr/local/site-lisp/howm make make installただし, make時にエラー(recursiveなload-path)が出る場合は, 旧版のhowm/ を削除しておかないと駄目みたい1.
[1] これが分からなかったので, APEL/FLIM/SEMIの再インストールもしてみた. 結局どれが効いたのか不明.
(setq howm-menu-lang 'ja) (global-set-key "\C-c,," 'howm-menu) (mapc (lambda (f) (autoload f "howm-mode" "Hitori Otegaru Wiki Modoki" t)) '(howm-menu howm-list-all howm-list-recent howm-list-grep howm-create howm-keyword-to-kill-ring))
(setq howm-directory "~/memo/")
;; リンクを TAB で辿る (eval-after-load "howm-mode" '(progn (define-key howm-mode-map [tab] 'action-lock-goto-next-link) (define-key howm-mode-map [(meta tab)] 'action-lock-goto-previous-link))) ;; 「最近のメモ」一覧時にタイトル表示 (setq howm-list-recent-title t) ;; 全メモ一覧時にタイトル表示 (setq howm-list-all-title t) ;; メニューを 2 時間キャッシュ (setq howm-menu-expiry-hours 2) ;; howm の時は auto-fill で (add-hook 'howm-mode-on-hook 'auto-fill-mode) ;; RET でファイルを開く際, 一覧バッファを消す ;; C-u RET なら残る (setq howm-view-summary-persistent nil) ;; メニューの予定表の表示範囲 ;; 10 日前から (setq howm-menu-schedule-days-before 10) ;; 3 日後まで (setq howm-menu-schedule-days 3) ;; howm のファイル名 ;; 以下のスタイルのうちどれかを選んでください ;; で,不要な行は削除してください ;; 1 メモ 1 ファイル (デフォルト) (setq howm-file-name-format "%Y/%m/%Y-%m-%d-%H%M%S.howm") ;; 1 日 1 ファイルであれば (setq howm-file-name-format "%Y/%m/%Y-%m-%d.howm") (setq howm-view-grep-parse-line "^\\(\\([a-zA-Z]:/\\)?[^:]*\\.howm\\):\\([0-9]*\\):\\(.*\\)$") ;; 検索しないファイルの正規表現 (setq howm-excluded-file-regexp "/\\.#\\|[~#]$\\|\\.bak$\\|/CVS/\\|\\.doc$\\|\\.pdf$\\|\\.ppt$\\|\\.xls$") ;; いちいち消すのも面倒なので ;; 内容が 0 ならファイルごと削除する (if (not (memq 'delete-file-if-no-contents after-save-hook)) (setq after-save-hook (cons 'delete-file-if-no-contents after-save-hook))) (defun delete-file-if-no-contents () (when (and (buffer-file-name (current-buffer)) (string-match "\\.howm" (buffer-file-name (current-buffer))) (= (point-min) (point-max))) (delete-file (buffer-file-name (current-buffer))))) ;; http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?SaveAndKillBuffer ;; C-cC-c で保存してバッファをキルする (defun my-save-and-kill-buffer () (interactive) (when (and (buffer-file-name) (string-match "\\.howm" (buffer-file-name))) (save-buffer) (kill-buffer nil))) (eval-after-load "howm-mode" '(progn (define-key howm-mode-map "\C-c\C-c" 'my-save-and-kill-buffer)))
;; メニューを自動更新しない (setq howm-menu-refresh-after-save nil) ;; 下線を引き直さない (setq howm-refresh-after-save nil)
(autoload 'howm-mode "howm-mode" "Hitori Otegaru Wiki Modoki" t) (defadvice howm-mode (before outline-minor activate) (outline-minor-mode t)) (require 'outline) (defun my-outline-flip-subtree (&optional dummy) (interactive) (if (save-excursion (forward-line 1) (let ((p (overlays-at (line-beginning-position))) (ol nil)) (while (and p (not ol)) (setq ol (overlay-get (car p) 'invisible)) (setq p (cdr p))) ol)) (show-subtree) (hide-subtree))) (defun add-my-action-lock-rule () (let ((rule (action-lock-general 'my-outline-flip-subtree (if (and buffer-file-name (string-match "\\.howm$" buffer-file-name)) "^ *\\(\\*\\**\\)" (concat "\\(" outline-regexp "\\)")) 1 1))) (if (not (member rule action-lock-default-rules)) (progn (setq action-lock-default-rules (cons rule action-lock-default-rules)) (action-lock-set-rules action-lock-default-rules))))) (add-hook 'action-lock-mode-on-hook 'add-my-action-lock-rule)
(require 'calendar) (require 'howm-mode) (setq calendar-date-display-form '("[" year "-" (format "%02d" (string-to-int month)) "-" (format "%02d" (string-to-int day)) "]")) (setq diary-file (expand-file-name "diary" howm-directory)) (defun howm-mark-calendar-date () (interactive) (require 'howm-reminder) (let* ((today (howm-reminder-today 0)) (limit (howm-reminder-today 1)) (howm-schedule-types howm-schedule-menu-types) (raw (howm-reminder-search howm-schedule-types)) (str nil) (yy nil) (mm nil) (dd nil)) (while raw (setq str (nth 1 (car raw))) (when (string-match "\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\)" str) (setq yy (match-string 1 str)) (setq mm (match-string 2 str)) (setq dd (match-string 3 str))) (when (and yy mm dd) (mark-calendar-date-pattern (string-to-int mm) (string-to-int dd) (string-to-int yy))) (setq mm nil) (setq dd nil) (setq yy nil) (setq raw (cdr raw)) ))) (defadvice mark-diary-entries (after mark-howm-entry activate) (howm-mark-calendar-date)) (setq howm-menu-display-rules `( ("%sdays" . , (lambda () (howm-menu-display-number howm-menu-schedule-days))) ("%tnum" . , (lambda () (howm-menu-display-number howm-menu-todo-num))) ("%schedule[\n]?" . howm-menu-schedule) ("%todo[\n]?" . howm-menu-todo) ("%hdiary[\n]?" . howm-menu-diary) (,howm-menu-key-regexp . howm-menu-shortcut) )) (defun howm-menu-diary () (require 'diary-lib) (message "scanning diary...") (delete-region (match-beginning 0) (match-end 0)) (let* ((now (decode-time (current-time))) (diary-date (list (nth 4 now) (nth 3 now) (nth 5 now))) (diary-display-hook 'ignore) (cbuf (current-buffer)) (howm-diary-entry nil) (howm-diary-entry-day nil) (str nil)) (unwind-protect (setq howm-diary-entry (list-diary-entries diary-date howm-menu-schedule-days)) (save-excursion (set-buffer (find-buffer-visiting diary-file)) (subst-char-in-region (point-min) (point-max) ?\^M ?\n t) (setq selective-display nil))) (while howm-diary-entry (setq howm-diary-entry-day (car howm-diary-entry)) (setq mm (nth 0 (car howm-diary-entry-day))) (setq dd (nth 1 (car howm-diary-entry-day))) (setq yy (nth 2 (car howm-diary-entry-day))) (setq str (nth 1 howm-diary-entry-day)) (setq howm-diary-entry (cdr howm-diary-entry)) (insert (format ">>d [%04d-%02d-%02d] %s\n" yy mm dd str)))) (message "scanning diary...done") ) (setq diary-date-forms '((month "/" day "[^/0-9]") (month "/" day "/" year "[^0-9]") ("\\[" year "-" month "-" day "\\]" "[^0-9]") (monthname " *" day "[^,0-9]") (monthname " *" day ", *" year "[^0-9]") (dayname "\\W"))) (defun howm-open-diary (&optional dummy) (interactive) (let ((date-str nil) (str nil)) (save-excursion (beginning-of-line) (when (re-search-forward ">>d \\(\\[[-0-9]+\\]\\) " nil t) (setq str (concat "^.+" (buffer-substring-no-properties (point) (line-end-position)))) (setq date-str (concat "^.+" (buffer-substring-no-properties (match-beginning 1) (match-end 1)) " " str)) (find-file (substitute-in-file-name diary-file)) (howm-set-mode) (goto-char (point-min)) (if (re-search-forward date-str nil t) () (re-search-forward str nil t)))))) (defun add-diary-action-lock-rule () (let ((rule (action-lock-general 'howm-open-diary "^\\(>>d\\) " 1 1))) (if (not (member rule action-lock-default-rules)) (progn (setq action-lock-default-rules (cons rule action-lock-default-rules)) (action-lock-set-rules action-lock-default-rules))))) (add-hook 'action-lock-mode-on-hook 'add-diary-action-lock-rule) (defadvice make-diary-entry (after howm-mode activate) (text-mode) howm-set-mode)
さらにメニュー(0000-00-00-000000.howm)に以下を追加:
[ diary ] (%sdays 日先まで表示) %hdiary -------------------------------------
;; M-x calendar しといて M-x howm-from-calendar ;; → その日付を検索 (defun howm-from-calendar () (interactive) (require 'howm-mode) (let* ((mdy (calendar-cursor-to-date t)) (m (car mdy)) (d (second mdy)) (y (third mdy)) (key (format-time-string howm-date-format (encode-time 0 0 0 d m y)))) (howm-keyword-search key))) ;;カレンダーの上で d を押すと grep (add-hook 'initial-calendar-window-hook '(lambda () (local-set-key "d" 'howm-from-calendar)))
;;howm のメニューで d でカレンダー (add-hook 'howm-menu-hook '(lambda () (local-set-key "d" 'calendar)))