2008-03-07 Fri

Emacs を使っているときに TDD を意識するための Emacs Lisp

この記事を読んで、素敵なEmacs Lispだなと思いました。

- TDDの勘所とTDD支援超簡易Emacs Lisp - aikeの日記
-- http://d.hatena.ne.jp/aike/20080217

今回一番厳密に守っていたのは「Think」「Red」「Green」「Refactoring」のモード切り替え。今どこのモードで作業をしているのかを意識して、例えばテストNGが残っている状態(Red)では絶対にリファクタリングをしない、というような進め方をしていました。


背景よりはカーソルかな、と思ったけれど、
カーソルが白いと、見つけられなくなっちゃいます。

その後、以下を参照して、Emacsのステータスバーの色を、C-c + mで変更できるようにしました。

- unknownplace.org - 2008/02/21 - TDD支援elisp
-- http://unknownplace.org/memo/2008/02/21#e001

僕は背景が黒なので、考え中の色を黒にしました。

以下を.emacsに追記しました。

;;
;; via http://unknownplace.org/memo/2008/02/21#e001
;; C-c + mでステータスバーの色が変わる。デフォを黒にした。

(defvar tdd-bgcolor-alist
      '(("Think"      ."black")
	 ("Red"        ."#ff4444")
	 ("Green"      ."#44dd44")
	 ("Refactoring"."#ffaa44")))

(defvar tdd-bgcolor-mode 3)
(defvar tdd-bgcolor-mode-name "")
(let (
      (cell (or (memq 'mode-line-position mode-line-format) 
		 (memq 'mode-line-buffer-identification mode-line-format))) 
      (newcdr 'tdd-bgcolor-mode-name)) 
  (unless (member newcdr mode-line-format) 
    (setcdr cell (cons newcdr (cdr cell)))))

(defun tdd-bgcolor-rotate ()
  (interactive)
  (let (pair)
    (if (>= tdd-bgcolor-mode 3)
	 (setq tdd-bgcolor-mode 0)
      (setq tdd-bgcolor-mode
		 (+ tdd-bgcolor-mode 1)))
    (setq pair
      (nth tdd-bgcolor-mode tdd-bgcolor-alist))
    (setq tdd-bgcolor-mode-name (format "[%s]" (car pair)))
    (message tdd-bgcolor-mode-name)
    (set-face-foreground 'mode-line (cdr pair))))

(global-set-key "\C-cm" 'tdd-bgcolor-rotate)

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2007-04-07 Sat

Emacsで指定範囲内の文字を全部小文字に

Emacsで指定範囲内の文字を、小文字に統一したくなった。
そんなときはdowncase-region。

範囲内の文字を全部(小|大)文字にしたい


小文字にしたいM-x downcase-region
大文字にしたいM-x upcase-region

切り張りしたSQLを、全部小文字にしたかったんだよね。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2006-01-29 Sun

このEmacsプラグインは便利 (2)

id:naoyaさんによる、はてなの質問を読んで、私が今までに使ったことが
ないEmacsプラグインを順に使ってみることにしました、の第2段です。

今日も、使ったことがないものを順に試します。

●auto-save-buffers
設定した時間以上タイピングが保存されなかった場合は自動的に保存して
くれるマクロです。

このマクロは大変に便利です。この記事はauto-save-buffersを設定して
から書き始めました。最初は、ものすごい勢いで保存を繰り返すので心配
になりましたけれど、保存を忘れて泣きを見るよりも数倍良いですし、こ
れから死ぬまでに行なうファイルを保存する動作に費やす時間が減る、と
考えると、かなりお得なプラグインだといえます。

高林さんが配布ページにて、丁寧に解説をしてくださっています。
http://namazu.org/~satoru/misc/auto-save/

これに慣れると「ファイルの保存」を手動で行うなんてばかばかしいと
気づくはずである。


Ctrl+x Ctrl+sが無くなっただけでこんなに快適だとは思いませんでした。
auto-save-buffersに慣れすぎて、 auto-save-buffersの設定されていな
い環境で大変な間違えを犯さないように注意が必要ですね。



●emacs-w3m
emacs-w3mは以前から使っています。

インストールや設定は以下の解説どおりに行なえば大丈夫でした。
http://emacs-w3m.namazu.org/

操作方法も、以下のページを見れば分かりました。
http://emacs-w3m.namazu.org/info/emacs-w3m-ja.html

どんなときにemacs-w3mを使うのか、というと、sshで外部の計算機にログ
インして、外部のローカルマシンで立ち上がっているサーバ上のWikiにア
クセスしたりする場合、が多いです。

非常に軽いブラウザなので、ちょっとした確認などにオススメです。



●navi-2ch
このプラグインは以下からソースを入手して、ドキュメントを読みながら
インストールしましたけれど、インストールに少し手間取りました。

http://navi2ch.sourceforge.net/

.emacsに以下のような記述を加えます。

(push "/usr/local/share/emacs/site-lisp/navi2ch" load-path)
(require 'navi2ch)
(setq navi2ch-list-bbstable-url
"http://menu.2ch.net/bbsmenu.html")
(autoload 'navi2ch "navi2ch" "Navigator for 2ch for Emacs" t)


解説すると、make installでインストールさてたnavi2chディレクトリを
任意の場所にmvしたので、パスを通します。
さらに、bbsメニューが移動しているので、メニューの位置を教えます。

その後、ターミナルで
$ emacs -f navi2ch
とすれば、ドキュメントに書いてある操作方法どおりで2chの閲覧が可能
です。軽くて便利かもしれません。あんまり使わないので実感が無いのは
残念です。



●kill-summary
Ctrl+SpaceしてCtrl+wすると、文字列の切り取りができるのですが、その
切り取った文字列はkill-ringと呼ばれる変数に保存されます。
kill-ring変数はリストなので、過去に切り取った文字列は履歴として
kill-ringに残っています。kill-ringから履歴を楽に取り出せれば嬉しい、
という欲望をかなえてくれるマクロです。

http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Programs/elisp/kill-summary.el

詳細はソースを見れば分かります。

.emacsに以下のような記述をします。

(autoload 'kill-summary "kill-summary" nil t)
(define-key global-map "\ey" 'kill-summary)


そして、M-x(Shift+x)して、kill-summaryと入力すれば、便利なコピペラ
イフが満喫できます。幸せ。



●perltidy-region
id:typesterさんが紹介していたマクロです。
perltidyを気軽に利用するためのマクロです。

http://unknownplace.org/memo/2005/12/11#e001

事前にapt-get install perltidyとか、やっておけば使えます。
これで、ソースコードの整形に必要な時間が削減されます。



と、今日はこのくらいで終わりにします。
まだまだ使いたいマクロが一杯あるので、今後も自分で試してみて良さそ
うなものについて書きたいと思います。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2006-01-24 Tue

このEmacsプラグインは便利 (1)

id:naoyaさんによる、はてなの質問を読んで、私が今までに使ったことが
ないEmacsプラグインを順に使ってみることにしました。
今までの経験から言って、自分が知らないものは使わなくても調べた方が
早道なことが多かったので、今回も期待しています。



●riece
rieceはEmacs上で使えるIRCクライアントです。
rieceはScreen上で操作を簡潔できるのが、非常に便利だと感じました。
rieceのインストールですが、debianの場合は

apt-get install riece

を実行するだけです。簡単!!どんどん利用したいですね。

実際にireceを起動して、任意のチャンネルに接続するときは以下のよう
な手順を踏みます。

・Screenで新規にEmacsを開く
・M-x load-liblaryのあとrieceと入力
・M-x riece(rieceを起動)
・irc.tokyo.wide.ad.jpへ接続(東京都在住なので、何となく)
・接続時の名前を決定、変更する
・C-c jしたあと、#から始まる任意のチャンネルへ接続

# 私の環境では、M-xはShift-ESC、C-cはCtrl+cでした。



●dmacro.el
dmacro.elはインストールして30分後には虜になりました。
dmacro.elはエディタを使う人間にとって、強烈に便利だということが分
かりました。

dmacro.elはマクロが規則性を見出せる入力をすると、C-tするだけで規則
性を再現してくれます。つまり、繰り返し入力や削除の手間が削減できま
す。革命的!!と思っていたら、マクロは1993年製でしたよ無知は罪。

dmacro.elのデモをしてみると、たとえば

[src]
・1/20
・1/21
・1/22
・1/23
・1/24
[src]



[src]
×1/20
×1/21
・1/22
・1/23
・1/24
[src]

と手入力で変更した後、C-tを押すだけで、

[src]
×1/20
×1/21
×1/22
×1/23
・1/24
[src]

のように、「×」の入力を繰り返してくれるのです。素晴らしい!!
dmacro.elは文字の削除も入力と同じく検出・自動化してくれます。
dmacro.elは、実際に使ってみると人間が如何に繰り返し作業に時間をと
られているのかを教えてくれました。



以上です。
また新たにマクロを導入したら、記事を書くことにします。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2006-01-23 Mon

EmacsでChangelogメモをためす。(1)

[2005-11-21]から、更新していないChangelogですが、ここ2ヶ月ほど考え
たり、別に日記を書いたりしてみて、更新の手間が省ければ、ちょくちょ
く更新できそうだな、と感じました。

いままでは秀丸を使っていたのですが、今年の初めにプログラミングを
Emacsで行なうようになったり、zsh+screenでウハー、とかやっていたら
秀丸でChangelogをつけることが不便に感じてしまいました。
あとは、Changelogが肥大化しているので、chalowによるChangelogの処理
に膨大な時間がかかります。
さらに処理後に出来上がるファイルをFTPクライアントでアップロードす
るのが面倒くさい。まいった。やる気がしない。

本当はchalowをやめようかとも思ったのですが、Changelogを書くときに
独自の表記で記述している部分が多いので、今回はchalowを使い続けるこ
とにしました。
今後は独自の表記を減らしつつ、満足のいく方向を考えようと思います。

今は更新、確認からアップロードまでを極力Emacs上で行なうか、もしく
chalowをGUIに組み込んでサーバに置いてしまうか、どちらかをやろう
としています。

これからしばらくかけて、手間を省くための手間についてメモします。




まずは、EmacsでChangelogを書く、という動作ができるように準備します。

はじめに、たつをさんのところを参照して、
.emacsに設定を書き加えます。
もちろん、そのまま使わずに書き換えますよ。
(setq user-mail-address "satou at ...")
(setq user-full-name "SATOU Toshinori")
(defun memo ()
  (interactive)
  (add-change-log-entry nil "~/ChangeLog")


その後、Changelogを始めて作る、または、Changelogに日が変わって始め
て入力するときは、

 $ emacs

でEmacsを起動したあと、

M-x 4 a

と入力すると、.emacsの設定が反映されて日付が挿入されます。
# Ctrl+x 4 aね

これで、Changelog自体は普通に記述することができるようになります。
かなり気軽なので、確かにタスクをメモする際に有効です。

 * p:今日のタスク
 ・思いついたタスク名
 ○着手しているタスク
 ●終わったタスク
 ×取りやめたタスク
 ?疑問なタスク


人によって、タスクのメモの仕方はまちまちですけれど、私は上記のよう
な記述でメモしています。
圧倒的にタスクを思いつく回数が多いので、思いついたタスクだけは短い
動作でマークを付与できるようにしています。

ここのところ、私はメモをするときに、くだけた文体を使っていたので、
このメモを書きながら、公開することを前提にメモすることの大切を改め
て実感しました。とにかく頭を使います。書く文字の量が増えます。

次は、画像をどう扱うかを考えます。
Windowsで画像を取り込んで、どのようにcoLinux上のdebianから扱うのか
を作業しながら考えます。
ナイスアイディアがある方は教えてください。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |