Emacs

(更新:2013/01)Install on Windows, DDSKK
(更新:2011/03)Install on Ubuntu
(更新:2006/05)TRAMP
(更新:2006/02)Emacs全般設定, Mew
(更新:2005/01)cperl-mode, doxymacs, howm, Riece, YaTeX+YaHTML
(作成:2004/12)

Editorと言えばこれでしょう。のっけから主観入りまくりな意見で恐縮だけれど、まあ心に余裕のある方は使ってみてはいかがだろうか。
単なるEditorの枠をぶっちぎったEditor、とでも言おうか。とにかく色々な事がこのEditor上で出来る万能なアンチクショウ。

Install on Ubuntu

さくさく行こう。

# apt-get install emacs23 emacs23-el ddskk

ddskk はemacs lisp版SKK。だけれど2011/3/2現在、Emacs23なら uim-skk でそのまま漢字かな入力がいける。何か問題が起きるまでは、これで行くのもアリかも知んない。

Install on Windows

最近のUbuntuがあまりにヒドイUpdateばかり繰り返すもので、最近は専らWindows環境で使うようになりまして。WM環境ぶち壊すとかアリエナイ。
愚痴はそれくらいにして、WindowsでもEmacs環境は導入可能。ちゃんとGNU ProjectのEmacsなので、Linux環境で培ってきた諸設定も流用可能。サイコー。

以下から最新パッケージをDL、解凍。
- Index of /gnu/emacs/windows

バイナリパッケージなのでそのまま使える。実行は bin\runemacs.exe から。
設定ファイルのlisp読み込みは拙サイト「Dropbox - .emacs.el directoryの端末間共有」の方法を参考に共有すると便利。

Dropbox
(更新:2017/10)Install on Ubuntu (新) (更新:2011/05)Install on CentOS (更新:20...

設定

※注意※ 本項は Meadow 含め過去に設定していた内容も多く含むため、現行環境では動作しないものもあるかも知れません。

Emacs全般設定

以下、基本的には ~/.emacs.el 内に設定する項目の説明。

追加キーバインド諸々

;;;; ~/.emacs.el

;;カーソルが行頭にあるときに、C-k を1回打つだけでその行全体を削除
(setq kill-whole-line t)

;; Shift + 矢印で領域選択
(pc-selection-mode) 

;; insertキーの無効化
(global-set-key [insert] nil)

;; Delete キーを Delete (Ctrl+d) に (デフォルトはbackpace)
(define-key function-key-map [delete] "\C-d")

;; タブ文字入力をC-Tabで
(global-set-key [(control tab)] "\C-q\C-i")

設定ファイル分割/ロード

一つ処の.emacsにガシガシ書き込んで行くのも良いけれど、Emacsは結構奥が深いので気に食わない部分を設定直してる間に雪だるま式に増えて行く。てなわけで、特定のLispアプリ用の設定は別ファイルにするのが良いと思う。 以下は ~/.emacs/ というディレクトリを掘り、各設定ファイルの頭に local_ を付加した設定ファイルを読み込んでいる。

;; ロードパス追加
(setq load-path (append '("~/.emacs") load-path))
(load "local_mew.el")        ;; Mew
(load "local_yatex.el")      ;; YaTeX + YaHTML

テンプレートファイル読込

C/C++プログラムやJavaプログラム、PHPスクリプトその他諸々をScratchから作成する時に、雛型としてファイルを読ませることが出来る。それにちょっとでもやってあると、やる気も結構向上する。
各種ファイルを ~/.emacs-tpl/ 配下に作成して、例えばこんな感じにすれば指定モードの時に指定ファイルを読んでくれる。

;;;; ~/.emacs.el

;; 雛型ファイルの読み込み
(load "autoinsert")
(add-hook 'find-file-hooks 'auto-insert)
(setq auto-insert-directory "~/.emacs-tpl/") ;; テンプレートディレクトリの指定
(setq auto-insert-alist
      (append 
       '((cperl-mode .      "tpl.pl"))
       '((java-mode .       "tpl.java"))
       '((mgp-mode .        "tpl.mgp"))
       '((php-mode .        "tpl.php"))
       '((yatex-mode .      "tpl.tex"))
       '((yahtml-mode .     "tpl.html"))
       auto-insert-alist))

スクリプトファイルの実行権限付与

#! で始まる記述を判定して、スクリプトファイルに実行権限を自動で与える。

;;;; ~/.emacs.el

;; #!で始まるファイルの実行ビットを自動で立てる
(add-hook 'after-save-hook
          '(lambda ()
             (save-restriction
               (widen)
               (if (string= "#!" (buffer-substring 1 (min 3 (point-max))))
                   (let ((name (buffer-file-name)))
                     (or (char-equal ?. (string-to-char (file-name-nondirectory name)))
                         (let ((mode (file-modes name)))
                           (set-file-modes name (logior mode (logand (/ mode 4) 73)))
                           (message (concat "Wrote " name " (+x)"))))
                     )
                 )
               )
             )
          )

自動タイムスタンプ機能

例えば何某かのプログラムを弄って最終更新した時間を入れたい時に便利。

;;;; ~/.emacs.el

;;; タイムスタンプの設定
(require 'time-stamp)
(setq system-time-locale "C")
(add-hook 'write-file-hooks 'time-stamp)
(setq time-stamp-old-format-warn 'nil)
;;(if (not (memq 'time-stamp write-file-hooks))
;;    (setq write-file-hooks
;;          (cons 'time-stamp write-file-hooks)))
;; タイムスタンプのフォーマットを変える
(setq time-stamp-active t)
(setq time-stamp-start "[lL]ast [mM]odified: ")
(setq time-stamp-end " edited.")
(setq time-stamp-format '(time-stamp-month-dd-yyyy time-stamp-hh:mm:ss))
;;; 行数制限を取っ払ったつもり
(setq time-stamp-line-limit 100000)

この例では Last Modified:(半角スペースx2)edited. と何処かに記述しておけば(といっても10万行内)、ファイルを保存したときに2つの半角スペースの間に Month DD, YYYY HH:MM:SS のフォーマットでタイムスタンプが記述される。

バックアップ

少ないけど一応。

;;;; ~/.emacs.el

;; バックアップファイルを番号付にする
;(setq version-control t)

;;; Auto save機能の抑制
(setq auto-save-list-file-name nil)
(setq auto-save-list-file-prefix nil)

Emacs印刷設定

Linuxから lpr でEmacsのテキストをそのまま印刷できる。 でも綺麗に整った印刷をしたい場合は、コマンドラインで a2ps 噛ませた方が良さげ。

;;;; ~/.emacs.el

;;;印刷設定
;(setq-default lpr-switches '("-Pepson"))
(setq-default lpr-switches '("-2P"))
(setq-default lpr-command "mpage")

;; ps-print
(setq ps-multibyte-buffer 'non-latin-printer)

cperl-mode

何も考えず関数ガシガシ使って簡単なPerlスクリプトを書くだけなら、別にこういったモード使わなくても、標準で読まれるperl-modeで十分だと思う。ウチもperl-modeのデフォルトの方が好みの強調表示をしてくれると思う。 しかし、ちょっと規模の大きいPerlスクリプトとか、Perl-ooガシガシみたいなスクリプトだと、インデント回りとか全体的な見通しがへぼへぼになっちゃうのが難点。 それなんで、もうちょいマシなやつを使おうと思ったらこちら。

個人的にはcperl-modeを使わない場合のカラーリングが好みなんだけど。。。まぁ、そのうちカスタマイズ出来るかな。

オートモードでさくっと使っちゃいましょ。

;;;; ~/.emacs/local_cperl-mode.el

;cperl-modeの設定
(setq auto-mode-alist 
      (cons (cons "\\.pl\\'" 'cperl-mode)
            auto-mode-alist))
(setq cperl-indent-level 4)
(setq cperl-continued-statement-offset 4)
(setq cperl-comment-column 40)

doxymacs

C/C++とかPHPとか弄ってると、どうしてもそれらと並行してドキュメント作成が疎かに。そんなズボラのためにDoxygenつードキュメント生成ツールがあるのだが、あのコメント生成も一々手打ちじゃ一苦労。もうちょい便利に出来んものかなぁ。。。と探してみたらlispが存在しました。いやいや。。。これは便利だわ。

ただ、ちょっとインストールに難あり。ウチはDebianユーザなのでインストールには困らなかったが、Vine使ってる時コンパイルしようとして何故か失敗。 ソースからのコンパイルはちょっと難しいのかも知れない。

debパッケージでインストールされるのはどうもXEmacs(Emacs21系)を前提に作られているみたい。。。とはいえ、Emacs(Emacs20系)でもちゃんと使える。 Emacs20系を使っている場合、以下のパッケージを別途導入する。

  • w3-el-e20
;;;; ~/.emacs/local_doxymacs.el

;; Doxymacs呼出
(require 'doxymacs)

;; C/C++モード、PHPモードで自動起動する場合の設定
(add-hook 'c-mode-common-hook 'doxymacs-mode) 
(add-hook 'php-mode-pear-hook 'doxymacs-mode) 

;; font-lock modeにdoxymacsを対応付ける
(defun my-doxymacs-font-lock-hook ()
    (if (or
        (eq major-mode 'c-mode)     ;; c-mode
        (eq major-mode 'c++-mode)   ;; c++-mode
        (eq major-mode 'php-mode)   ;; php-mode
        (eq major-mode 'java-mode)  ;; java-mode
        )
        (doxymacs-font-lock)))
(add-hook 'font-lock-mode-hook 'my-doxymacs-font-lock-hook)


(require 'doxymacs)

自動起動しない場合は M-x doxymacs-mode でdoxymacsモードに移れる。 font-lock については M-x doxymacs-font-lock
以下、ショートカット集など。

ファイルコメント

C-c d i

/**
 * @file   index.php
 * @author riyo
 * @date   Mon Sep 22 01:54:19 2003
 * 
 * @brief  
 * 
 * 
 */

@author 部分にはユーザのFull Nameフィールドが使われる

関数コメント

C-c d f

/**
 * 
 * 
 * @param hoge
 * @param fuga
 * 
 * @return 
 */

関数の開始宣言直前の行で実行すれば、関数を解析して @param @return を加えてくれる。

Class内関数群のグルーピングコメント

C-c d @

//@{
//@}

複数行コメント

C-c d m

/**
 *
 *
 */

一行コメントを記述

C-c d s

///

こればかりは直接書いた方が速い。。。

YaTeX + YaHTML

元来HTMLはタグ打ち派なウチとしては、そこんじょらのテキストエディタだとあまりの面倒臭さにげんなり。かといってビジュアルなHTMLエディタでは生成するHTMLがあまりに劣悪この上ないため微塵も使いたくない。 そんな事もあってLispでタグ補間とか可能なEmacsに落ち着いたわけなんだけど、そのなかでもスゴイLispがこれ。

まぁ本当はTeX次いでにHTMLも補間しちゃいました、なLispなんだけど。でもとにかく凄い。

DLしたパッケージを展開。

$ mkdir lisp; cd lisp
$ tar xvfz yatex1.72.tar.gz
...

続いて以下の設定を記述すれば、インストールせずとも個々人のフォルダで利用できる。

;;;; ~/.emacs/local_yatex.el

;; Yet Another TeX mode for Emacs
;; 野鳥のemacs-lispファイル格納場所
(setq load-path (cons (expand-file-name "~/lisp/yatex") load-path))
;; Infoディレクトリの追加
(setq Info-default-directory-list
      (cons "~/lisp/yatex"
            Info-default-directory-list))

YaTeXの設定。
さくっと適当に。

;;;; ~/.emacs/local_yatex.el

;; YaTeX modeの設定
(cond
 ((locate-library "yatex")
  (autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)

  ;; 拡張子が .tex のファイルを開くときに yatex-mode にする
  (setq auto-mode-alist (cons '("\\.tex$" . yatex-mode) auto-mode-alist))

  ;; auto-fillする時のカラム
  (setq YaTeX-fill-column 10000)

  ;; 漢字コードの指定(1=sjis, 2=jis, 3=euc)
  (setq YaTeX-kanji-code 2)

  ;; ログ表示ウィンドウの大きさ
  (setq YaTeX-default-pop-window-height 8)

  ;; 外部コマンドの指定(パスが通ってない場合は絶対パスで記述)
  (setq tex-command "platex")
  (setq dvi2-command "xdvi-ja -s 10")
  (setq bibtex-command "jbibtex")

  ;; yatex-mode 初期化時の設定
  (add-hook 'yatex-mode-hook
            (function
             (lambda ()
               ;; outline-minor-mode の設定(使用しない場合は不要)
               (outline-minor-mode t)   ; outline-minor-mode を起動
               (make-local-variable 'outline-regexp)
               (setq outline-regexp     ; 見出しの正規表現
                     (concat "[ \t]*\\\\"
                             "\\(appendix\\|documentstyle\\|part\\|chapter\\|"
                             "section\\|subsection\\|subsubsection\\|"
                             "paragraph\\|subparagraph\\)"
                             "\\*?[ \t]*[[{]"))

               ;; font-lock 用の設定(使用しない場合は不要)
               (setq YaTeX-use-font-lock t)
               )
             ))))

cond 部分はyatexが読み込まれているかチェックしてるだけ。 condlocate-library は、無くても問題無いっちゃ問題無い。

YaHTMLの設定
さくっと適当に。

;;;; ~/.emacs/local_yatex.el

;; YaHTML modeの設定
(cond
 ((locate-library "yahtml")
  (autoload 'yahtml-mode "yahtml" "Yet Another html mode" t)

  ;; 拡張子が .html, .htm のファイルを開くときに yahtml-mode にする
  (setq auto-mode-alist (cons '("\\.t?html?$" . yahtml-mode) auto-mode-alist))

  ;; auto-fillする時のカラム
  (setq yahtml-fill-column 10000)

  ;; 漢字コードの指定(1=sjis, 2=jis, 3=euc)
  (setq yahtml-kanji-code 3)

  ;; HTML のタグを大文字にする
  (setq yahtml-prefer-upcases t)

  ;; 属性指定子を大文字にする
  ;;(setq yahtml-prefer-upcase-attributes t)

  ;; yahtml モードの起動が遅い場合に次の設定を有効にする
  ;; アクセス制限ファイル .htaccess を参照しないようにする
  (setq yahtml-server-type nil)

  ;; 外部コマンドの指定(パスが通ってない場合は絶対パスで記述)
  (setq yahtml-www-browser "firefox")
  (setq yahtml-lint-program "jweblint")

  ;; yahtml-mode 初期化時の設定
  (add-hook 'yahtml-mode-hook
            (function
             (lambda ()
               ;; outline-minor-mode の設定(使用しない場合は不要)
               (outline-minor-mode t)   ; outline-minor-mode を起動
               ;; 見出しの正規表現
               (make-local-variable 'outline-regexp)
               (setq outline-regexp "^.*<[Hh][1-6]\\>") 
               ;; 見出し終わりの正規表現
               (make-local-variable 'outline-heading-end-regexp)
               (setq outline-heading-end-regexp "</[Hh][1-6]>")
               ;; 見出しレベルの計算式
               (make-local-variable 'outline-level)
               (setq outline-level
                     (function (lambda () (char-after (1- (match-end 0))))))

               ;; font-lock の設定
               (setq YaTeX-use-font-lock t)
               )
             ))))


(provide 'local_yatex)

cond 部分はyahtmlが読み込まれているかチェックしてるだけ。 condlocate-library は、無くても問題無いっちゃ問題無い。

Mew

メーラーもEmacsで統合しちゃえ。HTMLメール? なにそれこわい。

# apt-get install mew-beta

メーラーはテキストエディタ派生で十分。てなわけでEmacs Lisp仕様メールクライアントの有名所。シンプルだしHTMLメールにウィルスメール糞食らえだし何よりEmacsで作業中にふとメールを読みたくなった時にちょっとのキー操作で起動できるってのは素晴らしくて好んで使ってます。 特にEmacsだとコンソール上でも動くんで、リモートログインしてメール見るにも便利。

例えば以下のようなサーバを用いるものとすると、最低限こんな設定が必要。 ここで POP/SSL については stunnel というパッケージが必要なので導入しておく。Ver.4だとEmacsが固まるらしいので注意。

;;;; ~/.emacs/local_mew.el

;;; Mewモード使用可
(autoload 'mew "mew" nil t)
(autoload 'mew-send "mew" nil t)
(autoload 'mew-user-agent-compose "mew" nil t)

;; POP/SSL用設定
(setq mew-prog-ssl "/usr/sbin/stunnel")
(setq mew-ssl-verify-level 0)

;;; アカウントの設定
(setq mew-config-alist
    '(("default"
       ("name"        . "Riyo")
       ("user"        . "riyo")
       ("mail-domain" . "hyakki.local")
       ("smtp-server" . "smtp.hyakki.local")
       ;; SMTPAuth使う場合は以下
       ;;("smtp-user"   . "riyo")
       ;;("smtp-auth"   . t)
       ("pop-server"  . "pop.hyakki.local")
       ;; POP認証無しの場合は以下
       ("pop-auth"    . pass)
       ;; POPAuth使う場合は以下
       ;;("pop-auth"    . apop)
       ;; POP/SSL使う場合は以下
       ;;("pop-ssl"     . t)
       ;;("pop-ssl-port". "pop3s")
       ("pop-user"    . "riyo"))

      ;; 複数アカウント所持の場合は以下のように追加設定をしていく。
      ("astaroth"
       ("name"        . "Yatsuhashi")
       ("user"        . "8hashi")
       ("mail-domain" . "hoge.co.jp")
       ("smtp-server" . "smtp.hoge.co.jp")
       ("pop-server"  . "pop.hoge.co.jp")
       ("pop-auth"    . pass)
       ("pop-user"    . "8hashi"))
     )
)

;; 他様々な設定

(provide 'local_mew)

全てを一度に載せると長くなるので、以下機能毎に説明。

複数の署名を使う場合

メール作成時に署名を付けたい場合、署名が1種類だけなら以下のように指定する。

;;;; ~/.emacs/local_mew.el

;;; シグネチャファイルの指定
(setq mew-signature-file "~/signature.txt")

送信先ごと複数の署名が欲しい場合は、以下のパッケージを導入してやると良い。

;;;; ~/.emacs/local_mew.el

;; ロード
(add-to-list 'load-path "~/.emacs21/c-sig/")

(autoload 'add-signature "c-sig" "c-sig" t)
(autoload 'delete-signature "c-sig" "c-sig" t)
(autoload 'insert-signature-eref "c-sig" "c-sig" t)             ;; 対話的に選択
(autoload 'insert-signature-automatically "c-sig" "c-sig" t)    ;; 検索結果で挿入
(autoload 'insert-signature-randomly "c-sig" "c-sig" t)         ;; ランダムに挿入

;;; Mewでシグネチャを対話的に選択する設定
(add-hook 'mew-draft-mode-hook
    (function (lambda ()
                      (define-key mew-draft-mode-map "\C-c\C-i" 'insert-signature-eref)))) 

署名の登録は M-x add-signature にて。登録用バッファが開くので、好きに書き込んだら C-c C-c にて登録、 C-c Tab で署名貼付。署名を複数登録した場合、ここで np で署名を選択できる。
因みに、c-sigはメール本文末尾の空行を削除して署名を貼付するみたい(設定に依るかも)。メールの見栄えを考えるなら、署名の最初に2行くらい空行を入れると良いかも。

procmail設定

procmailで自動整理されたメールとか、 +inbox に収まってないメールって多分無視する事が多いと思われる。そんなメール類もまとめて最新受信メールとして追尾してくれるパッケージ。

  • prom-mew
;;;; ~/.emacs/local_mew.el

;; ロード
(autoload 'prom-mew "prom-mew" "mew for using procmail" t)

;; procmail が出力するログファイル(複数指定可)
;; ~/.procmail の LOGFILE で指定したもの。
(setq proc-log-list (list "~/Mail/procmail.log"))

;; ログの保存用ファイル
;;(setq proc-keep-log "~/Mail/prom-mew.log")
(setq proc-keep-log nil)

;; ロックファイル
;; ~/.procmail の LOCKFILE で指定したもの。
(setq proc-lock-file "~/Mail/.lock")

;; 追尾しないディレクトリ
;; inboxをそうしたのは、通常はmewで見るためprom-mewに
;; ログが残ると不便だから
(setq prom-ignore-check-folders '("/$" "^\\+trash" "^\\+tmp" "^\\+draft" "^\\+inbox"))

;; メール全受信
(setq mew-pop-size 0)

httpアドレスのブラウズ設定

受信メールにhttpアドレスが書かれてる場合とか、クリック一つでブラウズするための設定。

;;;; ~/.emacs/local_mew.el

;; URL をマウス中クリックでブラウザ起動する様にする
(autoload 'browse-url-at-mouse "browse-url"
  "Ask a WWW browser to load a URL clicked with the mouse." t)
(add-hook 'mew-message-mode-hook
    (function
        (lambda()
               (local-set-key [mouse-2] 'browse-url-at-mouse)
        )))

;; ブラウザに Mozilla を使用する
(setq mew-prog-text/html-ext "mozilla")
;;(define-key mew-message-mode-map [mouse-2] 'browse-url-at-mouse)
(setq browse-url-netscape-program "mozilla")
(setq thing-at-point-url-path-regexp "[~/A-Za-z0-9---_.${}#%,:]+")

;;; ブラウザに w3m を使用する
;;(setq mew-mime-multipart-alternative-list '("Text/Html" "Text/Plain" "*."))

;;(condition-case nil
;;    (require 'mew-w3m)
;;  (file-error nil))
;;(setq w3m-type 'w3m-m17n)

印刷設定

;;;; ~/.emacs/local_mew.el

;; 印刷コマンド設定
(setq mew-print-command-format "mpage -2 -P")
(defun mew-print-region (begin end)
  (interactive "r")
  (shell-command-on-region begin end mew-print-command-format))

(defun mew-print-buffer ()
  (interactive)
  (mew-print-region (point-min) (point-max)))
(setq mew-print-function (function mew-print-buffer))

メール自動振り分け設定

;;;; ~/.emacs/local_mew.el

;; 推測に使うタグ
(setq mew-refile-guess-key-list
      '("Subject:" "From:" "To:"))

;; 推測規則
(setq mew-refile-guess-alist
      '(("Subject:"
         ("Sync" . "+from/sync")
         ("Backup" . "+from/backup")
         ))
)

;; 候補をひとつだけ提示
(setq mew-refile-ctrl-multi nil)

;; 推測に、明示的規則のみ利用
;(setq mew-refile-guess-control
;      '(mew-refile-guess-by-alist
;        mew-refile-ctrl-auto-boundary))

その他設定

細々あるので、コメントを御参照ください。

~/.emacs/local_mew.el その他設定
;;;; ~/.emacs/local_mew.el

;;; ヘッダ部への日本語入力を許可
(setq mew-use-overlay-keymap nil)

;;; サーバにメールを残す
;;(setq mew-pop-delete nil)

;;; Emacs 21 read-mail機能オプション
(if (boundp 'read-mail-command)
    (setq read-mail-command 'mew))

;;; メッセージ送信設定オプション
(if (boundp 'mail-user-agent)
    (setq mail-user-agent 'mew-user-agent))
(if (fboundp 'define-mail-user-agent)
    (define-mail-user-agent
      'mew-user-agent
      'mew-user-agent-compose
      'mew-draft-send-letter
      'mew-draft-kill
      'mew-send-hook))

;;; 起動時にメールを取りにいかないようにする
(setq mew-auto-get nil)

;;; メッセージのバックアップを取る
(setq mew-fcc "+Backup")

;;; パスワードの保存
(setq mew-use-cached-passwd t)

;;; 自分のアドレスを明示することで自分に Cc をつけなくする
(setq mew-cc  nil)
(setq mew-mail-address-list
      '("^riyo@hyakki.local$"
        "^8hashi@hoge.co.jp$"))

;;; Reply-To ヘッダがある場合そのアドレスにだけ返信
;;(setq mew-replyto-to-list '("Reply-To:"))
;;(setq mew-replyto-cc-list nil)

;; ねこ抹殺
;;(setq mew-demo nil)

;; フォルダ別けの推測を明示
;;(setq mew-case-guess-alist
;;      '(("X-Mailer:"
;;        ("Outlook" . "microsoft"))
;;       ))
;;(setq mew-case-guess-when-prepared t) ;; 草稿用意時に送信ケースを従わせる
;;(setq mew-case-guess-when-replied  t) ;; 返信時に送信ケースを従わせる
;;(setq mew-case-guess-when-composed t) ;; メッセージ作成時に送信ケースを従わせる
;;(setq mew-case-guess-addition      t)

;; Meadow設定 : notepadで見られるようにするのかな?
;;(setq mew-w32-prog-print     "notepad.exe")
;;(setq mew-w32-prog-print-arg "/p")
;;(setq mew-w32-cs-print       'shift_jis-dos)
;;(define-process-argument-editing "/notepad\.exe$"
;;  (lambda (x)
;;    (general-process-argument-editing-function x nil t)))

;; メール検索 for mg
;;(setq mew-prog-grep "mg")
;;(setq mew-prog-grep-opts '("-j" "jis" "-l" "-e" "-x" "&mime"))

;; Summaryモードのスレッド表示("tt"でツリー表示してくれる)
(setq mew-use-fancy-thread t)
(setq mew-fancy-thread-indent-strings ["├" "└" "│" " "])
(setq mew-use-thread-separator t)

;; 自分宛のメッセージに自動で"*"マークを付加
;;(setq mew-summary-form-mark-review t)

;; 重複メールは自動で削除マークを付加
(setq mew-summary-form-mark-delete t)

;; メール着信時にベルを鳴らす
;;(setq mew-use-biff t)
;;(setq mew-use-biff-bell t)

Tips

サーバにキューが残った時の対処法

メールがでかい場合など、Mewは本文の一部だけを取得して残りをサーバに置きっぱなしにする事が多い。そういう時にはマーク部に T と付いてるんだけど、正直どうでも良いメールなんかだったりすると忘れてそのまま削除。。。なんて事もあったりする。
そんな場合は +mdrop フォルダでメールを取得する。使用法は以下の通り。

  • s : サーバーに残っているメールを一覧表示。(ヘッダーのみ取得)
  • d : サーバーから削除。( D マーク)
  • o : サーバーから移動(受信と削除)。( o マーク)
  • c : サーバーからコピー(受信のみ)。( o マーク)
  • x : マークの処理を実行。
Cc / Bcc / Dcc
  • Cc : 宛先に対し、オリジナルを SMTP で To と共に配信
  • Bcc : 宛先に対し、Bcc を削って SMTP で To/Cc へ配送後、MIME でくるんで SMTP で Bcc へ配信
  • Dcc : 宛先に対し、Dcc を削って SMTP で To/Cc/Dcc へ配信

こんな感じでヘッダが分かれている。。。らしい。

DDSKK

Windows環境で動くくせに、WindowsのIMで日本語入力しようとすると変換中の文字列が表示されない。ここはもうちょい頑張って欲しかった……まあ嘆いていても仕方無いので、Emacs用のIMを用意してやる。
SKK厨のワタクシ、ここはDDSKKで決めよう。

以下から最新パッケージをDL、解凍。
- Index of /skk/maintrunk

解凍フォルダ直下の「makeit.bat」を以下に倣って修正。

rem #### makeit.bat

set PREFIX=C:\common\usr\share\emacs-24.2
set EMACS=%PREFIX%\bin\emacs.exe
set LISPDIR=%PREFIX%\site-lisp
set DEFAULT_MAKE_ARG=elc

ここでは、Windows版GNU Emacsが C:\common\usr\share\emacs-24.2\ 以下にある前提。場所が違ったら、それに沿ってPREFIX修正すること。

修正したらMake、Install。

> makeit.bat all
...
> makeit.bat install
...

Windows環境でのDDSKK設定は取り敢えず以下のような感じで良いんじゃないかな。

;;;; ~/.emacs/local_ddskk.el

;;; to use skk as IM
(setq skk-large-jisyo "c:/common/lib/SKK-JISYO.L")  ; 辞書ファイル
(global-set-key "\C-x\C-j" 'skk-mode)
(global-set-key "\C-xj" 'skk-mode)
(global-set-key "\C-j" nil)
(autoload 'skk-mode "skk" nil t)

でも本心としては、WIndowsのIM使えるようにして欲しい。辞書が別個になっちゃうのが痛い。

howm

PC UNIX関連文書をWikiで管理するようになって、ちょっと書きメモの楽しさが解った。んで、そんなようなelisp無いかなぁと探して見付けたものがこれ。 PukiWikiとかと比べてしまうと微妙にWikiっぽいようなそうでないような、て感じなのだが、使い始めてみるとこれはこれでなかなかアレです。

てなわけで取り敢えずこいつで日記などを書き始めてみるのも一興。

一応Debianパッケージ作ってた人が居たみたいなんだけど、最近じゃ更新してないみたい(2005/1/12現在)。 なのでソースからさっくり入れることに。取り敢えずtarボールを貰ってくる。

  • howm-1.2.1.tar.gz

おもむろにインスコ。

$ tar xvfz howm-1.2.1.tar.gz
...
$ ./configure
...
$ make
...
# make install
...

ユーザごとインストールしたい場合はこう。以下では ~/.emacs/howm/ 以下にlispファイルが収納される。

$ ./configure --with-lispdir=$HOME/.emacs/howm --prefix=$HOME
...
$ make
...
$ make install
...

因みに、不要になったら以下の通りにアンインスコ。

# make uninstall
...

取り敢えず起動できるようになるまで。あとおまけ。

;;;; ~/.emacs/local_howm.el

;; 書式変更
(setq howm-view-title-header "*") ;; タイトル

;; ロード
(add-to-list 'load-path "~/.emacs21/howm/")
(autoload 'howm-menu "howm-mode" "Hitori Otegaru Wiki Modoki" t)
(global-set-key "\C-c,," 'howm-menu)
(setq howm-menu-lang 'ja)
(require 'howm)

;; カラー設定
(set-face-foreground 'howm-mode-keyword-face "Salmon")      ;; <<<
(set-face-foreground 'howm-mode-ref-face "Salmon")          ;; >>>
;;(set-face-background 'howm-mode-wiki-face "chocolate4")   ;; [[]] の背景
(set-face-background 'howm-mode-title-face "red4")          ;; = の背景
(set-face-foreground 'action-lock-face "SprintGreen4")      ;; 下線文字
(set-face-underline 'action-lock-face t)                    ;; 下線は文字と同色 (Emacs 21)
(set-face-underline 'action-lock-face "dark cyan")          ;; 下線 (Emacs 21)
(set-face-foreground 'howm-menu-key-face "orange")          ;; メニューの shortcut

;; 内容バッファにも下線 (もちろん RET も効く)
(add-hook 'howm-view-contents-mode-hook
          (lambda ()
            (setq default-directory howm-directory)
            (howm-mode 1)))
(defadvice riffle-contents-show (around howm-mode (item-list) activate)
  ad-do-it
  (when howm-mode
    (howm-initialize-buffer)))

;; C-c C-cでコミット (保存+バッファkill)
(defun my-save-and-kill-buffer ()
  (interactive)
  (save-buffer)
  (kill-buffer nil))
(define-key howm-mode-map "\C-c\C-c" 'my-save-and-kill-buffer)

;; 1日1ファイル
(setq howm-file-name-format "%Y/%m/%Y-%m-%d.howm")

;; メニューをメモ扱いしない
;; mv ~/howm/0000-00-00-000000.howm ~/howm/menu.howm しといて…
(setq howm-menu-top nil)
(setq howm-menu-file "~/howm/menu.howm")

;; 「最近のメモ」一覧時にタイトル表示
(setq howm-list-recent-title t)
;; 全メモ一覧時にタイトル表示
(setq howm-list-all-title t)
;; 一覧を日付順で
(setq howm-list-normalizer 'howm-view-sort-by-reverse-date)

;; Enterで編集時に一覧バッファを消す
(setq howm-view-summary-persistent nil)

;; キーワード一覧の設置場所
(setq howm-keyword-file "~/howm/.howm-keys")

(provide 'local_howm)

howmは基本的に1メモ1ファイルなのだが、ぶっちゃけそんなに要るもんでなし。でもまぁ1日1ファイルくらいにすればファイル整理とかもしやすいと思われる。
howmを立ち上げるにはEmacs上で Ctrl-c , ,とやってやれば良い。

以下、幾つか設定に関するコメント。

  • 「書式変更」は、必ずhowmロード設定の前に記述すること。
  • 「カラー設定」は M-x list-colors-display 参照。まぁRGBでも良いけど。 その下「内容バッファにも下線(もちろん RET も効く)」は、howmで一覧とかの閲覧時にもカラー設定等を適用してくれる。
  • メモを書いた後の保存方法はEmacsでのテキスト保存方法と同じ。でもバッファに編集中のメモが残ってしまい使い難い。かといって一々 C-x k で殺して回るのも面倒。で、「C-c C-cでコミット (保存+バッファkill)」の設定で、保存~バッファ殺戮までを C-c C-c に割り当てている。

Riece

ふと、寂しくなる時がある。

いきなり何だと思うかも知れんが、そんな時には人と話すのが一番良いわけで。ネット世界は正に不夜城、ふらりとチャットに参加してみれば人が結構居たりして。 で、そんなチャットシステムのなかにIRCてのがある。そのクライアントアプリをEmacs Lispで作成したもの。凄いよなぁ。。。何でも出来ちゃうのかね。

RieceはIRCで出来る事殆どの機能が備わっている。でも、パッケージが別になってるものもあるので、取り敢えずウチが使ってるものを紹介しておく。

  • riece
    Riece本体。
  • riece-async
    Emacs が busy or suspend 状態になることに備え、PING に応答するローカルプロキシ経由で IRC サーバに接続。
  • riece-ndcc
    DCC (Direct Client to Client protocol)によるファイル転送(Emacs 21.3 の make-network-process による実装)。

取り敢えず起動できるようになるまで。

;;;; ~/.emacs/local_riece.el

;;riece設定
(autoload 'riece "riece" nil t)

;; Add-ons
(add-to-list 'riece-addons 'riece-ndcc)     ;; DCC送受信
(add-to-list 'riece-addons 'riece-log)      ;; ログ収集
(add-to-list 'riece-addons 'riece-alias)    ;; エイリアス
(add-to-list 'riece-addons 'riece-keyword)  ;; キーワード強調
(add-to-list 'riece-addons 'riece-log)      ;; ログ収集
(add-to-list 'riece-addons 'riece-async)    ;; サスペンド対策
(add-to-list 'riece-addons 'riece-mini)     ;; ミニバッファriece

(setq riece-blink-parens t)                 ;; コマンド内の括弧を点滅
(setq riece-rety-with-new-nickname t)       ;; ニックネーム使用済みの場合に新しい名前で入る
(setq riece-user-agent (quote emacs-riece)) ;; UA

チャンネルに自動ログイン。
ここの例ではRiece起動時に irc.hoge.net というIRCサーバに接続し、 #ほげ というチャンネルにログインする。

;;;; ~/.emacs/local_riece.el

;; IRC Servers
(setq riece-server "hoge"
    riece-server-alist
    '(("hoge"   :host "irc.hoge.net"
               :service 6667
               :nickname "riyo"
               :coding iso-2022-jp
               :function riece-async-open-network-stream))
    )

;;起動時にログインするチャンネル
(setq riece-startup-channel-list
    '("#ほげ"))

DCC設定。
DCCはIRCの仲間同士でファイルの送受信を行なうプロトコル。まぁデフォルトディレクトリの設定くらいで良いんじゃなかろーか。
尚、インターネット接続でファイアウォール噛ませている人は、パケットフィルタ等で6660-6667のポートを空けておく必要がある。

;;;; ~/.emacs/local_riece.el

;;DCC送受信ディレクトリ
(setq liece-dcc-directory "~/tmp/")

ログ設定。
チャット開始からチャット終了までのログを残すことができる。 日本語名のチャンネルは文字化けしたりするので以下のようにディレクトリ名の変更をした方が良い。

;;;; ~/.emacs/local_riece.el

;; ログ設定
(setq riece-log-coding-system 'japanese-shift-jis)
(setq riece-log-directory-map '(("#ほげ" . "hoge")))

キーワード反応。
特定のキーワード発言時に音を鳴らしたりする。自分のニックネームを登録しとくと便利だけど、嫌がらせされるかも(w なお、音声ファイルの指定は絶対ディレクトリでないと駄目っぽい。

;;;; ~/.emacs/local_riece.el

;; キーワード設定
(defun ringing ()
    "esdplay taki.wav"
    (call-process "esdplay" nil 0 t "/home/riyo/Wave/hoge.wav"))
(setq riece-keywords '("riyo" "りよ" "リヨ"))
(add-hook 'riece-keyword-notify-functions
    (lambda (keyword message) (ringing)))

ミニバッファで会話する設定。
実は使ってみたものの、少々不便で以降使ってない。まぁそれでも、一応設定はこんな感じで。

;;;; ~/.emacs/local_riece.el

;; ミニバッファrieceへ移行
(global-set-key "\C-cm" 'riece-mini-send-message)

TRAMP

人伝てに得た情報。どうやら Emacs で TRAMP なる、SSH 越しにリモートにあるファイルを弄ることの出来る elisp があるらしい。。。elisp なんだから別に Meadow に限ったものではなく、勿論 Emacs 系のエディタで使えるそうな。 そりゃ凄い、と思いつつ情報が少なめで中々コレといった設定方法を見付けられなかったのだけれど、何の事ぁ無く、Meadow では既に導入済みだったみたい。うへほ。 以前は ange-ftp なるパッケージ名で、名前から察するに FTP を用いたリモート操作が出来たのかな?これが、Meadow3.00/Emacs22 からは tramp として統合された、とのこと。

で、見付けて設定したのは Meadow なんで、この情報はこちらに書いておこう。

まずは SSH 接続するためのクライアントが必要。Windowsの場合、PuTTY 付属の plink が使える。

続いて ~/.emacs の設定。以下の設定では、ダウンロードした plink.exeC:\share\bin\ 以下に設置した場合の設定例。

;;;; ~/.emacs/local_tramp.el

;; .emacs

(setq exec-path (cons (expand-file-name "c:/share/bin") exec-path))
(modify-coding-system-alist 'process "plink.exe" 'utf-8-unix)
(setq tramp-default-method "plink.exe"
      tramp-completion-without-shell-p t)
(require 'tramp)
(add-to-list 'tramp-remote-path "/home")
(modify-coding-system-alist 'process "plink" 'euc-japan-unix)

Tips

ショートカットいろいろ

  • 文字コードを変更したい
    M-x RET f (文字コード指定)
  • 文字コードを指定してファイルを開きたい
    M-x M-m c (文字コード指定) M-x M-f (ファイル指定)
  • 全行再インデントしたい
    C-x h (全行選択) M-C-\