[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

46. 処理の自動化 ― マクロ (2005/05/08)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=macro"
"MeadowMemo/処理の自動化―マクロ"へのコメント(無し)
検索全文Elisp


この章で紹介していること

自分でわざわざプログラムを書くほどではないけど,簡単な繰り返し作業などを効率的に 行いたいということがあります.

そんな時にはマクロが便利です.これは自分の操作手順をそのまま登録し,その作業を簡 単に繰り返すことはできるのです.

そこで,ここでは,マクロについて紹介します.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

46.1 キーボードマクロ (2005/03/24)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=keyboard%20macro"
"MeadowMemo/キーボードマクロ"へのコメント(2007/12/28)
検索全文Elisp
要約

キーボードマクロを使うと,キー操作をそのまま登録して,操作を簡単に繰り返すことが できる.

何が問題なのか?

定型的な作業の時,全く同じ操作を延々と繰り返すことがあります.こんな時,毎回同じ 操作をするのは非常に面倒です.

何ができるのか?

実際にキーを操作して,その作業をそのまま登録することができます.

そして,その後で,その作業をそのまま,簡単に簡単に繰り返すことができます.

設定済みMeadowでは

Meadowの標準機能です.

設定方法

不要です.

簡単なキーボードマクロ

まず,f3 を入力します.すると,ミニバッファに

Defining kbd macro...

と表示されます.ここで,繰り返したい作業を実際に行います.そして,終了したら, f4 を入力します.すると,ミニバッファに

Keyboard macro defined

と表示され,キーボードマクロが定義されました.

次に,f4 を入力すると,定義した作業が実行されます.

キー入力時の補足ですが, 1 個だけ特別なキーがあります.C-x q です.これを途 中で入力すると,それ以降のマクロを実行するかユーザに確認を求めるようになります. 例えば,あるところまでは常に実行したいけど,そこから先は自分で判断したい時などに は,操作の切れ目で C-x q と入力しておくと便利です.

マクロに名前をつける

f3f4 で定義したマクロに名前をつけることができます.そのためには, マクロを作ったら M-x name-last-kbd-macro を実行して名前をつけます.こうして おくと,普通の関数と同じように M-x で呼び出すことができます.

ただし,このマクロは Meadowを終了すると消えてしまいます.そこで,保存しておきたい マクロができたら M-x insert-kbd-macro として書き出し, .emacs に追加してお くといいでしょう.

高度なキーボードマクロ

まず C-x C-k e と入力します.そうすると,ミニバッファに

 Keyboard macro to edit (C-x e, M-x, C-h l, or keys): 

とでます.ここで,C-x eM-xC-h l を押します.ただし, 15.6.1 キーバインドについて (2004/01/30) のように C-h に DEL を割り当てているとC-h l は使えません.M-x は一度名前を定義しないと使えませんので,ここではC-x e と入力します.

そうすると,ミニバッファに

No Keyboard macro defined. Create one? (y or n)

のように表示されます(f3f4 であらかじめ定義していれば,これは聞か れません).ここでは,y と答えます.すると,以下のようなバッファができます.

;; Keyboard Macro Editor.  Press C-c C-c to finish; press C-x k RET to cancel.
;; Original keys: 

Command: last-kbd-macro
Key: none

Macro:

後は簡単.そのまま,キー入力を書いていけばいいのです.編集が終わったら,C-c C-c で保存します.キャンセルは C-x k です.その後で,C-x e を押すと, ここで書いた処理が実行されます.

例えば

;; Keyboard Macro Editor.  Press C-c C-c to finish; press C-x k RET to cancel.
;; Original keys: 

Command: last-kbd-macro
Key: none

Macro:

3*C-k

のように,「3*C-k」と書きます.すると,f4 でキーボードマクロを実行すると, 3度 C-k を入力したことと同じ作業,つまり,3 行消す作業を実行できます.こう いう風に * を使うことで多数回の繰り返しも簡単にできます.

また,

C-x C-f ~/.emacs M-<

といったマクロも可能です.

凝ったことをやろうとすると,emacs lisp を書かないとできませんが,簡単なことならキー ボードマクロで結構簡単にできます.

46.1.1 キーボードマクロを Lisp に変換 ― macro-generate (2005/03/24)  
46.1.2 マクロを各行に適用 ― macros+.el  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

46.1.1 キーボードマクロを Lisp に変換 ― macro-generate (2005/03/24)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=macro-generate"
"MeadowMemo/キーボードマクロをLispに変換―macro-generate"へのコメント(無し)
検索全文Elisp
要約

定義したキーボードマクロを簡単に EmacsLisp の関数に変換できる.

何が問題なのか?

通常,キーボードマクロを保存すると,

 
(fset 'mkbd-macro
   [?\C-a ?\; ?\; ?  down])

のように,キー操作がそのまま書かれ,あまり見栄えがよくありません.

何ができるのか?

上記のマクロを

 
(defun mkbd-macro () "my macro.
macroised by akihisa  Thu Mar 24 14:49:04 2005"
  (interactive)
  (beginning-of-line 1)
  (insert ";; ")
  (next-line 1)

)

のような関数に変換できます.

設定済みMeadowでは

インストールしていませんので,インストールと設定が必要です.

インストール方法

macro-generate.el をダウンロードし,Emacs Lisp 以外の部分は削除(あるいは,コメントアウト)した上で, ロードパス上に置きます.

設定方法

以下を .emacs に追加します.

 
(autoload 'gen-start-generating
  "macro" nil t)
(autoload 'gen-stop-generating
  "macro" nil t)

詳しい使い方

M-x gen-start-generating でキーボードマクロの定義を開始します.普通のマク ロと同様にキー操作を行います.そして,M-x gen-stop-generating で終了します.

次に,M-x gen-expand-macro とます.すると,ミニバッファで書き出すバッファ を求められます.

Buffer for expansion : (default test.el) 

次に関数名を入力します.

New function name :

次に関数の簡単な概要を入力します.

Doc string : 

これで,指定したバッファの末尾に,関数が挿入されます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

46.1.2 マクロを各行に適用 ― macros+.el

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=macros-plus"
"MeadowMemo/マクロを各行に適用―macros+.el"へのコメント(無し)
検索全文Elisp
要約

リージョン内の各行にマクロを用いて簡単に整形を行うなどといった操作を簡単に行うこ とができます.

何が問題なのか?

多くの行をコメントにしたいなど,マクロを用いて行いたい操作があるとします.

しかし,行が多くなると,マクロで実行するためには,何度もマクロを実行する必要があ り,面倒です.

何ができるのか?

マクロを適用したい行をリージョンで選択し,コマンドを実行するだけで,リージョン内 の各行にマクロを実行できます.

設定済みMeadowでは

インストールしていませんので,インストールと設定が必要です.

インストール方法

macros-plus.el をダウンロー ドし,macros+.el の名前でロードパスの通ったところへ置きます.

設定方法

以下を .emacs に追加します.

 
(eval-after-load
    "macros" '(require 'macros+))

詳しい使い方

まずはマクロを定義します.そして,そのマクロを使いたい範囲をリージョンで選択しま す.

次に,M-x apply-macro-to-region-lines を実行します.すると,リージョン内の 各行を対象に,マクロを実行できます.

マクロを何度も繰り返す必要もなく,便利です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

46.2 コマンドの繰り返し (2005/05/08)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=repeat"
"MeadowMemo/コマンドの繰り返し"へのコメント(無し)
検索全文Elisp
要約

カーソル移動など1キーで実行できるコマンドは簡単に繰り返し実行することができる.

何が問題なのか?

キーボードマクロは便利なんですが,登録という手間がかかります.

何ができるのか?

直前の操作を簡単に繰り返したり,コマンドによっては,指定した回数だけ実行させるこ とができます.

インストール方法

標準機能なためインストールも設定も不要です.

詳しい使い方

10.4.1 関数への引数 ― C-u (2003/11/24) で少し紹介しましたが,一部のコマンドは C-u 10 のようにして 実行すると 10 回繰り返すことができます.例えば,C-u 10 C-f で 10 文字先へカー ソルを移動できます.

別の方法として, repeat があります.

例えば, C-kとした後で, C-x z とすると, 直前のコマンド C-k が実 行されます. その後, z を押すと, 連続して C-k が実行されます.

例えば,C-u 5 C-f C-x zzzz とすると, z を入力するだけで,5 文字ずつ 移動できるようになるわけです.

46.2.1 繰り返し処理の自動繰り返し ― dmacro (2005/03/24)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

46.2.1 繰り返し処理の自動繰り返し ― dmacro (2005/03/24)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=dmacro"
"MeadowMemo/繰り返し処理の自動繰り返し―dmacro"へのコメント(無し)
検索全文Elisp
要約

複雑な繰り返し操作でも自動で検出し,簡単に操作を繰り返すことができます.

何が問題なのか?

C-kC-f のように単純なことならいいのですが,

┌─┐┌─┐┌─┐┌─┐┌─┐┌─┐┌─┐┌─┐
└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘

という絵を書く時に, いちいち書いていくと面倒です.

かといって,その都度,マクロを登録していくのも面倒なものです.

何ができるのか?

繰り返し操作を自動的に検出し,簡単に繰り返すことができます.

設定済みMeadowでは

インストールと設定済みです.C-t に割り当てています.

インストール方法

http://www.csl.sony.co.jp/person/masui/papers/JSSSTDmacro/dmacro.el?04291400,dmacro.el よりダウンロードし, ロードパスの通ったところへ置きます.

設定方法

以下を.emacs に追加します. キーバインドは適当に変更してください.

 
(defconst *dmacro-key* "\C-t" "繰返し指定キー")
(global-set-key *dmacro-key* 'dmacro-exec)
(autoload 'dmacro-exec "dmacro" nil t)

詳しい使い方

例えば,

┌─┐  ─
└─┘

の後で, C-t とするだけでどんどん繰り返していけます.

他にも,

1行目
2行目
3行目
4行目

に対して,1行目にカーソルを移動し,C-a ;; SPC 下カーソルキー C-a とすると,

;; 1行目
2行目
3行目
4行目

となり,カーソルは2行目に移動します.ここで,C-t とすると,行った操作が C-a ;; SPC 下カーソルキー C-a ですので,dmacro は C-a から始まる部分 から,次の C-a の直前までが繰り返し作業だと判断します.

その結果,C-t だけで簡単に各行をコメントにすることができるのです.


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]