[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Wiki にも関連記事 があります.
メモを書く Elisp は様々なものがあります.それらにはそれぞれ特徴があり,いくつかの タイプに分けられます.
本ページでもいくつか紹介していますが,ざっくりと日付けで管理するかしないかで分け て概略を述べておきます.
日付けで管理するものとして,日記指向のものがnDiary,nikki.作業記録など短い文に向くものがclmemo, memo-mode.日記や Todo など多様な使い方ができるhowmがあ ります.
日付けで管理しないものとしては,内容でまとめてメモするposit(ポストイッ ト) やテキストをコピーするためのスクラップツールがあります.
以下でもう少し詳しく紹介します.
1 日 1 ファイル.ファイル名は 2003/01/20030112.diary .
nikki.el を組み合わせるか nDiary で HTML に変換すれば, 1 ヶ月までは一覧可能.全 体を一覧できない.
ソースの貼り付けは楽.コピー&ペーストで OK (<>があれば変換必要) .
検索用のインターフェイスはない.
サンプル
○お買い物 「 ZOO 」 (乙一) を購入.
という具合に,各トピックは行頭を○で始める.後は普通のテキスト.
日記を書くためのモード. 1 日 1 ファイルで nDiary に近い.ただし, HTML への変換 機能などはない.また, nDiary 同様一覧できるのは 1 ヶ月のみで,検索機能もない.
以下のような画面になる (これは, ndiary と組み合わせたもの) .
******* スケジュール 平成 15 年 4 月 ******* ------------------------------------------------------------------------ [01 火]○ミーティング 資料関連 ○お買いもの Meadow 本を買おう. [02 水] [03 木]○会議 議事録....
基本は ChangeLog .故に行頭にタブが必須.そのため,他のファイルからコピーしよう とすると,毎回行頭にタブを入れる必要がある.これが面倒.
日付けで管理するが,ファイルは 1 つのみ.
1 ファイルなので,全体を適当に見ていくことができるし、後で見返すのも楽です.検索 も occur や isearch を利用できます.さらに, clgrep という検索用のツールもありま す.
chalow や clview など HTML への変換 用スクリプトや clgrep など検索用スク リプトも多く公開されている.
サンプル
2003-07-20 (Sun) Name* meadowmemo: (define-key ctl-x-map "k" 'kill-this-buffer) 現在のバッファを kill
といった具合.
[2003/09/22] Meadow memo -->索引を増やそう -->項目の追加 -->Emacs Wiki からのピックアップ ---
のようなスタイル.あらかじめ,このファイルはこの目的で使うと決めた上でアイデアを 出したり,考えをまとめるのに適している.
あんまり長文になると階層下させても,階層を見渡せないので,ごく短い文のメモに向く.
ファイルに入力されるのはタイトル行と日付けのみで,他は自由なスタイルで書くことが できます.このため,ソースを貼り付ける,メモを書くといったことも自由に行うことが できます.
メモの形式は 1 メモ 1 ファイルや 1 日 1 ファイルといった形式であり,それを適当なキーワー ドで検索して一覧するという形になります.
テキストが基本.
分類は項目別に行う.日記のようにその日あったことを書くのには向かない.一方で,あ る程度書くテーマが限られているなら,別々の日に内容が分断しないため便利.
下のサンプルのように項目が表示され,項目を選択すると,その内容が表示できる.その ため,全体の内容を一覧することはできない.
サンプル
Postit v1.3 - tiny memoranda - by Tamakoshi ([email protected]) Title Update time / Link / URL Category +Meadow Sun Dec 15 19:34:49 2002 folder |設定サンプル Sun Dec 15 19:41:11 2002 text |メモ Sun Dec 15 19:34:34 2002 text
私が適当に作ったもの. Meadow 上のデータを指定したファイルの先頭にペーストしてく れるもの.ペーストのみなので,メモを編集するのには向かない. 2 ちゃんねるやホーム ページの内容など,すぐに見る必要のないもののメモに便利.
ただし,一覧機能などはないし,管理もできない.単にスクラップしていくだけのもの.
私の場合主に使っているのはclmemo,howm,自 作の簡易スクラップ です.
URL のように比較的短いものは clmemo にメモをして, occur で検索します.で,少し長いも のとか,不定形のメモはhowmへメモをします.
自作の簡易スクラップは 2 ちゃんねるとかで気になった記事をメモるのに 使ってます (スクラップの実例) .
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
メモとして ChangeLog を使うというのは 44.3.1 Chanelog を書こう ― add-change-log-entry (2003/07/20) で紹介しましたが,その ChangeLog メモをもっと便利にする方法を紹介します.
まずは,ChangeLog メモを試してみよう から clmemo.el , clkwd.el と clgrep.el をダウンロードしてきま す.そして,ダウンロードしたファイルをロードパスの通ったところへ置き,以下を .emacs に追加します.
clmemo-entry-list はメモのエントリなので,適当に変更してください.
こうしておくと,C-x M でメモを取ることができます.エントリは TAB で補完できます.また,メモの画面で,C-c C-g とするとメモを検索できます.また,C-c C-t とするとメモのエントリだけを検索できるので,C-c C-t をしてから C-c C-g をするとうまく絞り込むことができます.
まだ,使い始めたばかりですが,意外に便利そうです.
基本は ChangeLog なので,このメモの名前などは 44.3.1 Chanelog を書こう ― add-change-log-entry (2003/07/20) のように設定します.
(autoload 'clmemo "clmemo" "ChangeLog memo mode." t) (define-key ctl-x-map "M" 'clmemo) (setq clmemo-entry-list '("emacs" "book" "url" "idea" "download" "soft" "meadowmemo")) (autoload 'clgrep "clgrep" "grep mode for ChangeLog file." t) (autoload 'clgrep-title "clgrep" "grep first line of entry in ChangeLog." t) (autoload 'clgrep-header "clgrep" "grep header line of ChangeLog." t) (autoload 'clgrep-other-window "clgrep" "clgrep in other window." t) (autoload 'clgrep-clmemo "clgrep" "clgrep directly ChangeLog MEMO." t) (add-hook 'change-log-mode-hook '(lambda () (define-key change-log-mode-map "\C-c\C-g" 'clgrep) (define-key change-log-mode-map "\C-c\C-t" 'clgrep-title))) |
基本的にはこれだけで動きます.私はさらに,
;; 2003-01-15 ;; 日誌のときだけ ChangeLog メモに曜日を入れる ;; ;; 使用前: 2003-01-15 Satoru Takabayashi |
という設定を追加しています.
38.1.1 clmemo のエントリを自動補完 (2005/04/05)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
clmemo のエントリを設定しなくてもある程度補完できる.
clmemo は後で検索しやすいようにエントリを入力します.そして,メモであるためにエン トリは日を追って変化します.
しかし,その度に設定を見直すのも面倒なものです.
clmemo で補完候補にないエントリを入力すると,次回には補完候補として登録されます.
さらに, Meadow を起動時に最近メモした分からエントリを読み込み,補完候補として登録 します.これにより,いちいち登録しなくても補完候補を保つことができます.
以下を.emacs に追加します.
;; 常に入れておきたいタイトルのリスト (defvar clmemo-title-list '("idea" "system" "url" "computer") "*List of entries. Set your favourite entry of ChangeLog MEMO.") ;; 最近の記事からヘッダを拾い出す (when (file-exists-p clmemo-file-name) (with-temp-buffer ;; 行頭から5000文字を拾い出す (insert-file-contents clmemo-file-name nil 0 5000) (let ((entry nil) (subentry nil)) (goto-char (point-min)) (while (re-search-forward "^\t\\*[ ]+\\([^:\n]+\\):" nil t) (setq entry (buffer-substring-no-properties (match-beginning 1) (match-end 1))) (when (string-match "(" entry) (setq subentry (substring entry (+ (string-match "(" entry) 1) (- (length entry) 1))) (setq entry (substring entry 0 (string-match "(" entry))) (if (or (member subentry clmemo-title-list) (not entry)) () (setq clmemo-title-list (cons subentry clmemo-title-list)) (setq subentry nil))) (if (or (member entry clmemo-title-list) (not entry)) () (setq clmemo-title-list (cons entry clmemo-title-list)) (setq entry nil)))))) (defadvice clmemo-completing-read (after set-entry activate) (let ((entry ad-return-value)) (if (or (member entry clmemo-title-list) (not entry)) () (if (string-match "+" entry) (setq entry (substring entry 0 (string-match "+" entry)))) (setq clmemo-title-list (cons entry clmemo-title-list))))) |
普通に clmemo を使うだけです.これで,エントリは増えていきます.
Meadow を起動時にエントリがあまり増えないようであれば,
clmemo-file-name nil 0 10000) |
の 10000 を少し大きくします.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
お勧め度:★★★★☆.ふと思いついたことなどを,メモしたりするのに使っている.外 部ファイルへのリンクもできる点が便利.
環境によっては動かないかもしれません.動いても,保存された結果がおかしい場合がありますので,適当に文字を入れて再起動しても正しく読むことができているかを確認してから使ってください.
また, Meadow 1.99 (Emacs 21) では動作しません
Meadow でメモを書くのに便利なものです.
postitよりダウンロードして,ロードパスの通ったところへ置き,
(autoload 'postit "postit" nil t)
(setq postit-colorize 'dark)
;; ファイルの圧縮はしない
(setq postit-compress-commands nil)
|
を追加するだけで使うことができます. 2 行目は黒に近い背景でなければ不要です.
これで,M-x postit でメモを書くことができます.普通のテキストファイルやリンクも登録できて非常に便利です.
書いたメモは s で検索もできて,非常に便利です.
上記ではうまく動かない (Meadow 1.99 や Emacs 21) ,文字化けするということもあるようです.その場合には,https://bookshelf.jp/elc/postit.el を試してみてください.使い方は同じです.ただし, postit.elc は消してから上書きしてください.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
お勧め度:★★★☆☆.私は ndiary と組み合わせて,頻繁に使ってます.ただ,これ単独 でとなると, html にも出力できない, 1 ヶ月表示のみというのは使い難いかなと思う.
postit はテーマなどを自分で設定して,メモを書いていくという形式でした.
しかし,今日何をしたのかをメモしたい,日記を書きたいということもあります.そんな時に便利なのが, nikki.el です.これは,schedule.el という Elisp を元に改良されたものです.
画面はこんな感じ です.日付があって,ずらずらと文章を書いている様子が分かるでしょうか.
インストールは nikki.el をダウンロードして,ロードパスの通ったところへ置き,以下を .emacs に追加します.
;; 日記のファイルが作成されるディレクトリ (setq schedule-dir "~/Calendar") (autoload 'schedule "nikki" nil t) |
これで,M-x schedule とすると, 1 ヶ月単位で日記が表示できます.ここで,適当な日付で e とすると,その日の日記を編集できます.
編集が終わったら C-c C-c で元の画面に戻ります.
v で詳細表示と一行表示の切り替え,q で終了,h で文字を隠すことができます.
日付で管理できるので,簡単なスケジュールやその日のことをメモしたりするのに便利です.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
簡単にコピーできる機能が欲しかったので,適当に作ったものです.
メール, WWW などを Meadow で行っていると,すぐには役に立たないけど,とりあえずメモ しておきたいということがあります.
しかし,そのたびに適当なファイルを開いて,場所を指定して,ペーストをするのも面倒 です.
リージョン内のテキストをファイルへ保存できます.
機能はそれだけです.そのため,単なるコピペだけではなく,いろいろと編集したいとい う時には使いものになりませんので,その場合は別のものを利用してください.
moccur を利用した一覧表示もできますが,color-moccurが必要 です.
以下を.emacs に追加します.
また, my-memo-dir で指定したディレクトリをあらかじめ作成しておきます.
(setq my-memo-list '("emacs.txt" "url.txt")) (setq my-memo-dir "~/memo/puti") (defvar my-memo-window-conf nil) (require 'newcomment) (defun my-memo-insert (category memo-text str) (let ((coding-system-for-read 'euc-jp-unix) (coding-system-for-write 'euc-jp-unix) memo-buf (cbuf (current-buffer)) ) (if (get-file-buffer (expand-file-name category my-memo-dir)) (setq memo-buf (get-file-buffer (expand-file-name category my-memo-dir))) (setq memo-buf (find-file-noselect (expand-file-name category my-memo-dir)))) (set-buffer memo-buf) (goto-char (point-min)) (insert (concat (format-time-string "[%Y/%m/%d %k:%M:%S] ") memo-text)) (if (and comment-add (= comment-add 0)) () (comment-region (save-excursion (goto-char (point-min)) (push-mark nil nil t) (point)) (save-excursion (end-of-line) (point)))) (insert (concat "\n" str "\n\n")) (insert (concat "------------------------------------------------------------" "\n")) (forward-line -1) (if (and comment-add (= comment-add 0)) () (comment-region (save-excursion (beginning-of-line) (push-mark nil nil t) (point)) (save-excursion (forward-line 1) (beginning-of-line) (point)))) (save-buffer) (set-buffer cbuf) (kill-buffer memo-buf) )) (defun my-memo-initialize () (if (and (file-exists-p my-memo-dir) (file-directory-p my-memo-dir)) () (make-directory my-memo-dir)) ) (defun my-memo-read-category () (let ((file-list nil) category) ;; directory list (setq file-list (mapcar '(lambda (file) (if (and (string-match ".+$" file) (not (file-directory-p file))) file)) (directory-files my-memo-dir))) (setq file-list (delq nil file-list)) (setq file-list (append my-memo-list file-list)) (setq category (completing-read "memo category : " (mapcar 'list file-list) nil nil)) (if (file-name-extension category) () (setq category (concat category ".txt"))) category )) (defun my-memo-new () (interactive) (let (category memo-text str) (setq str (buffer-substring (point-min) (point-max))) (my-memo-initialize) (setq category (my-memo-read-category)) (setq memo-text (read-from-minibuffer "input memo : ")) (my-memo-insert category memo-text str) (kill-buffer (current-buffer)) (set-window-configuration my-memo-window-conf) )) (defun my-memo (&optional arg) (interactive "P") (let (category memo-text str (cbuf (current-buffer)) ) (setq my-memo-window-conf (current-window-configuration))) (cond (arg (let ((moccur-use-migemo nil) (dmoccur-mask-internal '(".*")) (moccur-split-word nil)) (dmoccur my-memo-dir "\\[[/0-9]+ [/:0-9]+\\]" nil))) (mark-active (setq str (buffer-substring (region-beginning) (region-end))) (my-memo-initialize) (setq category (my-memo-read-category)) (setq memo-text (read-from-minibuffer "input memo : ")) (my-memo-insert category memo-text str) ) (t (with-output-to-temp-buffer "*my-memo*" (switch-to-buffer "*my-memo*") (kill-all-local-variables) (local-set-key "\C-c\C-c" 'my-memo-new))) )) ;; 必要に応じてキーバインドを追加 (global-set-key "\C-c\C-w" 'my-memo) |
メモしたいテキストをリージョンで選択し,M-x my-memoとします.そうすると, 追加するファイルを尋ねられます.補完入力になっていますが,候補以外の指定も可能で す.候補以外のものを指定すると,そのカテゴリ名のファイルが作成されます.
その後に一行メモを入力します.何か入れておくと,後で見る時に便利でしょう.
これで,指定したファイルの先頭にリージョン内のテキストが追加されます.
他のソフトの内容をコピーする場合には,リージョンを選択せずにM-x my-memoと します.そうすると,新しいバッファができますので,そこにコピーし,C-c C-c とします.後は,リージョン選択時と同様に追加できます.
また, color-moccur を使っていれば,C-u M-x my-memoで一覧を表示できます.一 覧といっても, moccur で検索しているだけですけど.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
[2003/09/22] Meadow memo -->索引を増やそう -->項目の追加 -->Emacs Wiki からのピックアップ ---
のように階層下したメモを書くことができます.
http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Programs/から memo-mode.el と get-date.el をダウン ロードし,ロードパスの通ったところへ置きます.
無ければ,memo-mode.elと get-date.elをどうぞ.
以下を.emacs に追加します.
(autoload 'memo-mode "memo-mode" "Memo mode" t) |
ファイルを開き,M-x memo-modeとします.すると, memo-mode になります.
私が使う機能は以下のようなもの.
作者様のページが詳しいので,分からない部分はそちらを参照してください.
このモードは単独で使うよりも,簡単な変更履歴やメモなど他のファイルに埋め込んで使 うのが便利です.
そのために,埋め込み用のモードもあります (紹介はそのうちに...) .
38.5.1 埋め込みメモモード ― embed-memo (2003/10/06)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
memo-mode で書くメモを適当なコメントを行頭に入れて,他のファイルに埋め込むことが できる.
memo-mode は便利なのですが,これで 1 ファイルという使い方よりも,変更履歴などのメモ を残しておくという使い方が便利です.
しかし, Elisp などにそのままメモを書くと邪魔になってしまいます.かといって,コメ ントに入れようにも,行頭にコメントの記号を入れる必要があり, memo-mode を使うこと ができません.
別のバッファを表示し,そこで memo-mode を利用したメモを書くことができます.
そして,そのメモに適当なコメント記号をつけて,ファイルに埋め込むことができます.
embed-memo.elをダウンロードし, ロードパスの通ったところへ置きます.
以下を.emacs に追加します.
(provide 'embed-memo) |
まず適当なファイルを開き,コメント記号を入力します. Elisp なら「;;」を行頭に入力 します.
入力したコメント記号の後にカーソルがある状態でM-x embedded-memoとします. すると,新しいバッファができます.
そこでは,普通に memo-mode でメモを書くことができます.書き終わったら,C-c C-cで終了します.
すると,元のバッファに作成したメモが書き込まれます.各行頭にはコメント記号も入力 されます.
再編集する場合には,適当な場所でM-x embedded-memoとします.
オリジナルを一箇所だけ変更しています.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Wiki のようなリンク,期日付近で浮き上がってくる予定など多彩な機能を持つ Elisp です.
howm チュートリアルもあります.最新 のものはYahoo のブリーフケー スからダウンロードできます.
メモを取るための Elisp はたくさんあります.しかし,それらの多くは特有な書式が必要 だったり,後で見返すのが面倒だったりします.
デフォルトでは 1 メモ 1 ファイルでメモをとっていくことができます. howm を使わな くても,普通のテキストでメモをとることもできます.
howm が提供するのは,それらの書き散らかしたメモを検索したり,メモから予定を抜き 出して Todo を管理したりといった機能です.
一応,行頭に「=」があれば,それがタイトルになりますが,別に無ければならないもの ではありません. howm ならどんなテキストでも検索してくれますので,書式に拘る必要 はないのです.
howm のペー ジよりダウンロードして解凍します.
その後で, bash を起動し,
./configure make make install
として Elisp をインストールします (上記が面倒なら,*.el のファイルだけロードパスの 通ったところへコピーしても構いません) .
次に,解凍したディレクトリの ja の中にある 0000-00-00-000000.howm を ~/howm に移 動します.~/howm が無ければ作っておきます.
以下を.emacs に追加します.
(setq howm-menu-lang 'ja) (global-set-key "\C-c,," 'howm-menu) (mapc (lambda (f) (autoload f "howm" "Hitori Otegaru Wiki Modoki" t)) '(howm-menu howm-list-all howm-list-recent howm-list-grep howm-create howm-keyword-to-kill-ring)) |
私は以下のような設定も入れています.
;; リンクを 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" '(progn (define-key howm-mode-map "\C-c\C-c" 'my-save-and-kill-buffer))) |
howm は保存時にいくつかの処理を行います.そのため,自動保存 の設定 を使っていると,保存のたびに待たされてしまいます.回避策は,自動 保存 を howm ではしないようにするか,以下を追加して howm 側の処理をしないようにし ておきます.
;; メニューを自動更新しない (setq howm-menu-refresh-after-save nil) ;; 下線を引き直さない (setq howm-refresh-after-save nil) |
C-c,,で起動します.そうすると,
= <<<%menu% c[新規] D[複製] 検索 (s[固定] g[正規] m[roma]) a[一覧] l[最近] A[前後] y[予定] t[Todo] [全消] K[題↑] [名↑] d[日↓] i[鍵↓] r[更新] [menu 更新] [menu 編集] ------------------------------------- [予定] … 予定@, 〆切! を 7 日先まで表示 ------------------------------------- [Todo] … 〆切!, todo+, 覚書- を上位 50 個まで表示 -------------------------------------
というバッファが表示されます.ここで,オレンジのキーを押すと,それぞれの処理を実 行できます.例えば,c で新規のメモを書くことができます.
実際に,c とすると
= [2004-01-24 17:51] >>> ~/www/soft/memo.texi
のようなバッファができます.~/www/soft/memo.texi の部分は C-c,, を入力する 直前にいたバッファによって変わります.
後は適当に文を書いていき,保存するだけです.= の行にはタイトルを書きますが,面倒 なら空欄でも構いません.
こんな風に書いていきます.
= メモのタイトル [2004-01-24 21:52] >>> ~/www/soft/memo.texi 本文をずらずらと書いていく. 書式は特に無いので自由に書くことができます.
C-c,,の画面で lかC-c,lとすると,以下のように複数のメモを 1 つの メモのように連結して表示できます.
==========================>>> ~/data/howm/2004/01/2004-01-24-175318.howm = Meadow [2004-01-24 17:53] >>> ~/data/howm/2004/01/2004-01-24-175251.howm howm ネタを追加 ==========================>>> ~/data/howm/2004/01/2004-01-24-175251.howm = [2004-01-24 17:52] >>> ~/www/soft/memo.texi 2 つめのメモ ==========================>>> ~/data/howm/2004/01/2004-01-24-175123.howm = [2004-01-24 17:51] >>> ~/www/soft/memo.texi 以下続く
C-c,,の画面で aかC-c,aとすると,以下のようにリストで表示され, 別ウィンドウにはカーソルがある行のメモが表示されます.
2004-01-24-175318.howm | 2004-01-24-175251.howm | 2004-01-24-175123.howm | 2004-01-24-172302.howm | 0000-00-00-000000.howm |
どちらの形式であっても,RET を入力することで,現在カーソルがあるメモを編集 することができるようになります.
以下のように「>>> キーワード」という形式でリンクを書くことができます.カーソルを 合わせてRET を押すと,キーワードで全文検索し,一致したメモだけが一覧表示さ れます.
>>> Meadow
しかし,これではいちいちリンクを書かないといけません.そこで,「これは頻繁に検索 して一覧表示したいな」というキーワードがあれば,「<<< キーワード」という形式で書 いておきます
<<< Meadow
そうすると,
Meadow
のようにキーワードを普通に書くだけでリンクになります.
howm の特徴の 1 つである Todo システムを紹介します.予定や Todo の管理というのは多くの 人が実行していると思います.しかし, Todo が多くなると管理は困難になります.そこで, 重要度を導入して管理しようとするわけですが,結局重要なものしか見ないからすべて重 要扱いになってしまう...
そこで, howm では重要度の概念は無くなっています.その変わりに予定日付近で浮き上がっ てくるという機能があります.
詳しく紹介します. howm の起動時の画面にあるように, Todo 関連には以下のようなものが あります.
[2002-10-21]@ 予定 (予定表に表示) [2002-10-21]+7 todo 指定日になってから 7 日間かけて徐々に浮かび続ける [2002-10-21]!7 〆切 指定日の 7 日前から徐々に浮かび、指定日以降浮きっぱなし [2002-10-21]-1 覚書 指定日に浮かび上がり、以降 1 日かけて単位量だけ徐々に沈む [2002-10-21]. 済み 常に底 (記号の後の数字はデフォルト値)
予定は単純です.C-c,,で表示される画面に 7 日先の分まで表示されます. C-c,, の後でyかC-c,yで全予定の一覧も表示できます.
分かりにくいのはそれ以外でしょうか. Todo 関連は C-c,, の後でtか C-c,tで一覧表示できます.
そうすると,重要なものほど上に,重要でないものほど下へ行くようになっています.そ の重要さを判断するのが,
[2002-10-21]+7 todo 指定日になってから 7 日間かけて徐々に浮かび続ける [2002-10-21]!7 〆切 指定日の 7 日前から徐々に浮かび、指定日以降浮きっぱなし [2002-10-21]-1 覚書 指定日に浮かび上がり、以降 1 日かけて単位量だけ徐々に沈む [2002-10-21]. 済み 常に底
の書式です.「 [2002-10-21]. 」は単純です.これは,一覧では一番下になります.それ 以外は,指定日前後で徐々に上がったり下がったりするのです.これは,メニューの文字 を参考に何度か使ってみるといいと思います.
これは細かいネタですが,
{ }
と入力すると,この部分がリンクになります.RETを入力すると,「{*}」「{-}」 「{ }」と切り替わります.
以下の設定を.emacs に追加します.
(eval-after-load "calendar" '(progn (define-key calendar-mode-map "\C-m" 'my-insert-day) (defun my-insert-day () (interactive) (let ((day nil) (calendar-date-display-form '("[" year "-" (format "%02d" (string-to-int month)) "-" (format "%02d" (string-to-int day)) "]"))) (setq day (calendar-date-string (calendar-cursor-to-date t))) (exit-calendar) (insert day))))) |
後はM-x calendar で好きな日付けを選び,RETとします.これで,所望の日 付けを入力できます.カレンダを見ながらなので,再来週の土曜といった希望でも簡単に 入力できます.
他の方法として,
{_}
({}の間に下線) と入力して,RETを入力します.そうすると,今日の日付けになり ます. [2004-01-24]
日付けを入力すると下線が引かれて,リンクになります,この状態でRETを入力す うと,メニューが出てきて 3 日先へとかの指定が簡単にできます.
http://pc.2ch.net/test/read.cgi/unix//598-599n にあるように以下 を追加しても簡易入力が可能です.
(defun my-get-date-gen (form) (insert (format-time-string form))) (defun my-get-date () (interactive) (my-get-date-gen "[%Y-%m-%d]")) (defun my-get-time () (interactive) (my-get-date-gen "[%H:%M]")) (defun my-get-dtime () (interactive) (my-get-date-gen "[%Y-%m-%d %H:%M]")) (global-set-key "\C-c\C-d" 'my-get-date) (global-set-key "\C-c\C-t" 'my-get-time) (global-set-key "\C-c\ed" 'my-get-dtime) |
ネタ元:http://www.unix-fan.com/celt/blog/20031203.html
以下を.emacs に追加します.これでアウトラインモード同様,行頭に「* 」をつけておく とそれがリンクになります.そして,RETで表示・非表示を切り替えることができ ます.
(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) |
daiyan の日記よりスクリプトをダウンロードし てきます.他にjcode.pl と wget (Cygwin に入ってま す) も必要です.
スクリプトを解凍すると, comic.pl があるので,これを適当なところへ置きます.同じと ころに, jcode.pl も置いておきます.
次に, comic.pl を開き,以下を参考に編集します.
#文字コード変換ライブラリ require "/home/zaurus/sbin/jcode.pl"; を require "jcode.pl"; /mnt/card/home/howm/ となっている部分を d:/home/howm/ などに #何ヶ月先の予定まで調べるか $SEACHMONTH = 3; これは好みで変更 #作業ディレクトリの指定 $TMPDIR = "/home/zaurus/tmp/"; は $TMPDIR = "d:/home/tmp/"; などに
変更が終われば保存します.
次に,~/howm/comic.bookmark を作成します.中身は空で構いません.
これで準備完了です.後は bash を起動し,
cd ~/bin/ perl comic.pl
のように, comic.pl のあるディレクトリへ cd で移動した後で,「 perl comic.pl 」として 実行すると, howm の予定を作ってくれます.
コミックに興味がないという方も,M-% comic bunko として全部置換してしまえば, 文庫発売予定としても利用できます.
さて,~/howm/comic.bookmark (あるいは ~/howm/bunko.bookmark) を空で実行すると, 以下のように大量の予定が登録されます.そこで,~/howm/comic.bookmark に適当にキー ワードを入力しておきましょう. 1 行 1 キーワードで入力して,再度実行すると,キー ワードを含む予定だけが登録されます.
= <<<%menu% %"c"[新規] %"D"[複製] 検索 (%"s"[固定] %"g"[正規] %"m"[roma]) %"a"[一覧] %"l"[最近] %"A"[前後] %"y"[予定] %"t"[Todo] [全消] %"K"[題↑] [名↑] %"d"[日↓] %"i"[鍵↓] %"r"[更新] [menu 更新] [menu 編集] ------------------------------------- [予定] … 予定@, 〆切! を 7 日先まで表示 > 日 0 [2004-01-25]@ 私立彩陵高校超能力部 (2) 発売日 > 月 -1 [2004-01-26]@ (成) PINK SPOT 発売日 > 月 -1 [2004-01-26]@ 7SEEDS (セブンシーズ) (4) 発売日 > 月 -1 [2004-01-26]@ Reverse!? 発売日 > 月 -1 [2004-01-26]@ おヨメ・サンバ (2) 発売日 > 月 -1 [2004-01-26]@ こっちむいて! みい子 (14) 発売日 > 月 -1 [2004-01-26]@ それでも君を奪う発売日 > 月 -1 [2004-01-26]@ そんなんじゃねえよ (3) 発売日 > 月 -1 [2004-01-26]@ そんな声だしちゃイヤ! (4) 発売日 > 月 -1 [2004-01-26]@ そんな声だしちゃイヤ! 〔特別版〕 (4) 発売日 > 月 -1 [2004-01-26]@ ぺぱーみんと・エイジ (4) 発売日
38.6.1 howm と カレンダの併用 (2005/04/11) 38.6.2 howm にキャプチャを書く ― imcap (2005/03/25)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
howm とカレンダを併用することで,日付けの管理が随分と楽になります.
アイデアは 「howm と diary と calendar と 」を読んでいて思いついた.
「 calendar から検索」は http://d.hatena.ne.jp/daiyan/20040114#p3 のものを 利用しています.
のように diary か howm のスケジュールがある日に色をつけたり,
[ diary ] (7 日先まで表示) >>d [2004-01-29] 2004/1/24 から 5 日おきの予定 >>d [2004-01-29] 会議 >>d [2004-02-03] 2004/1/24 から 5 日おきの予定 >>d [2004-02-04] 水曜はごみの日 -------------------------------------
のように,C-c,, のメニューに diary のスケジュールを表示したりできます.
(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 (cons (cons "%hdiary[\n]?" 'howm-menu-diary) howm-menu-display-rules )) (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-mode t) (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-mode t)) |
さらに, howm のメニュー (~/howm/0000-00-00-000000.howm) に以下を追加します.
[ diary ] (%sdays 日先まで表示) %hdiary -------------------------------------
ネタ元:http://d.hatena.ne.jp/daiyan/20040114#p3
以下を.emacs に追加します.すると,M-x calendar とした後で日付けを選び, d とすると,その日付けで検索できます.
;; 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))) |
http://d.hatena.ne.jp/daiyan/20040202# より
howm のメニューからカレンダを起動するためには,以下を.emacs に追加します.
;;howm のメニューで d でカレンダー (add-hook 'howm-menu-hook '(lambda () (local-set-key "d" 'calendar))) |
M-x calendar としてカレンダを表示させます.ここで,m とすると,スケ ジュールのある日に色がつきます.メニューができるので,適当に触ってみてください. howm のような日付けでのスケジュール指定のほかに毎週水曜などの指定もできます.
ここで,d とすると,カーソルがある場所の日付けで検索ができます.
さらに,メニューに追加しておけば,メニューにスケジュールが表示されます.行の先頭 でRET を入力すると,その行がある場所へジャンプできます (同じ文章が複数ある と違う場所へ飛んでしまいます) .
実際に使ってみると何だかちぐはぐな感じ.指定した日付けの予定一覧とか機能を追加し ていくと多少は使いものになるかも.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
メモとしてブラウザの画面などのスクリーンキャプチャを howm に記入できます.
http://howm.sourceforge.jp/cgi-bin/hiki/hiki.cgi?ImageCapture
こんなメモを簡単に取ることができます.ファイル名は日付けと時間で勝手に付けてくれ るので,余計なことに悩む必要もありません.
howm Wiki の 画像取り込み より imcap.el をコピーし,ロードパスの通ったところに imcap.el の名で 保存します.
次にWinShotをダウンロードして,解 凍します.できたファイルを適当なディレクトリにコピーします.
以下を.emacs に追加します. Winshot のパスは環境に合わせて変更しておきます.
(setq howm-excluded-file-regexp (concat "\\(^\\|/\\)\\([.]\\|CVS/\\)\\|" "[~#]$\\|" "\\.\\(" (mapconcat (lambda (f) f) '( "doc" "pdf" "ppt" "xls" "bak" "elc" "gz" "aux" "toc" "idx" "dvi" "jpg" "gif" "png" ) "\\|") "\\)$")) (setq imcap-capture-command-format (concat "d:/home/bin/WinShot.exe" " -Jpeg -Rectangle -Close -File %s")) (autoload 'imcap-capture "imcap" "Hitori Otegaru Wiki Modoki image capture" t) (autoload 'imcap-display "imcap" "Hitori Otegaru Wiki Modoki image capture" t) (add-hook 'howm-view-open-hook 'imcap-display) |
のように小さなウィンドウが表示され,マウスで範囲を選択できるようになります.そこ で,開始点と終了点を左クリックで選択することで,その範囲が jpeg として保存されま す.メモにはその画像が表示されます.
ファイル名は 2004-01-30-194015.jpg (2004/01/30 19:40:15 に作ったもの) のようにな り,メモには
>>> 2004-01-30-154015.jpg
のように記入されます.
メモをC-xC-fで開いた際などに,画像を表示させたい場合には,M-x imcap-display とします.
メモに画像を書くことができるのはとても便利なのですが,問題はそれをどう管理するか です.メモを消しても画像は残ってしまうので,一個一個確認して消さないといけません.
そこで以下の設定を.emacs に追加します.これで,画像をC-w で切り取ると,ファ イルを削除するかどうか確認します.y と答えるとファイルを削除します.
(defadvice kill-region (around delete-image-file activate) (when (and (boundp 'howm-mode) howm-mode) (let ((str (split-string (buffer-substring-no-properties (ad-get-arg 0) (ad-get-arg 1)) "[\n\r]+")) (line nil) (imagefile nil)) (while str (setq line (car str)) (if (string-match ">>> \\(.*\\.\\(jpg\\|png\\|gif\\)\\)" line) (setq imagefile (match-string 1 line))) (when (and imagefile (file-exists-p (expand-file-name imagefile))) (if (y-or-n-p (format "Delete image file %s?" imagefile)) (progn (setq imagefile (expand-file-name imagefile)) (delete-file imagefile)))) (setq imagefile nil) (setq str (cdr str))))) ad-do-it) |
imcap.el は Pooh のページ がもとになってい ます.
38.6.2.1 画像のリサイズが可能な imcap (2005/03/25)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
imcap で表示した画像の拡大・縮小が可能になります.
画面のスクリーンショットなどで大きい画面を貼り付けることがあります.しかし,それ では全体を見ることができません.
画像を縮小したり拡大したりできます.
入れてあります.画像が表示された状態で f11 で縮小, f12 で拡大になり ます.
imcap.el をダウンロードし,ロードパス の通ったところへ置きます.
通常の imcap と同じです.
まずは,M-x imcap-display で画像を表示します.
そして,縮小したい画像の前にカーソルを移動し,M-x imcap-image-downsize と します.
何度か繰り返して実行すると,どんどん画像が縮小されていきます.
拡大したい時には,その画像の前にカーソルを移動し,M-x imcap-image-upsize と します.
必要に応じて以下を参考にキーバインドを設定ください.
(autoload 'imcap-image-downsize "imcap" "imcap" t) (autoload 'imcap-image-upsize "imcap" "imcap" t) (eval-after-load "howm-mode" '(progn (define-key howm-mode-map [f11] 'imcap-image-downsize) (define-key howm-mode-map [f12] 'imcap-image-upsize))) |
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |