<目 次>
リージョンを右方向にシフトする
ファイルをグラフィカルに比較・マージする
テンプレート付きの日付自動入力
インクリメンタルサーチ(I-search)関連
現在行を分かりやすく
起動時に.emacs以外のファイルを読み込んで開始する
emacs20ベース(UNIX)の.emacs
指定ディレクトリ以下の複数の拡張子を持つファイルに対してサブディレクトリまでgrepする
TAGSファイルによるソース解析
日本語manを見る
Wanderlust
関連ツール
ifdefブロックをジャンプする
OR検索
M-x grep で日本語入力
CVSでバージョン管理
文字の表示色を変更
mcompleteの表示色を変更
diredで拡張子ソート
ftp上のファイルを直接編集する
邪魔な条件コンパイルを見えなくする
私の.emacs



■リージョンを右方向にシフトする
  • まず、普通にリージョンを選択します。
  • 次に、C-x r t、と入力
  • ミニバッファにスペースなり、タブコードなりを入力
    ちなみに、私の設定だと、タブコードは、M-i、です。
参考に、リージョン処理には以下のようなものがあります(ネタ元:Meadow Memo)。
  • C-x r o : 矩形領域だけスペースを確保する (open-rectangle)
  • C-x r c : 矩形領域を消去する.スペースは確保. (clear-rectangle)
  • C-x r d : 矩形領域を消去する.スペースも消す. (delete-rectangle)
  • C-x r t : 矩形領域を文字で置き変える (string-rectangle)


■ファイルをグラフィカルに比較・マージする
Meadowなら、ファイルをグラフィカルに比較・マージするのも簡単です。
但し、動作には、Cygwinに含まれるdiffコマンドが必要になりますので、予めインストールしておいてください。
勿論、プレーンなUNIX環境でEmacsをお使いの場合は、そのままで使用できます。(diffが入ってないなんて事は、まずないでしょう。)
準備ができたら、以下のようにします。
  • ファイルを比較する
    M-x ediff-files
    一つ目のファイル名を入力
    二つ目のファイル名を入力
    で、nで次の相違位置、pで前の相違位置に移動できます。終了は、qです。
  • ファイルをマージする
    M-x emerge-files
    相違位置の移動はediffと同じです。
    aを押すとbufferAの内容が、Bを押すとbufferBの内容が、Mergeバッファに挿入されます。
    終了はqで、MergeバッファをリネームすることでMerge完了です。
ちなみに、開いているバッファを比較・マージすることもできます。上の、filesをbuffersにするだけでOKです。
また、ediffに関してのみですが、三つのファイルを比較できます。ediff-buffers3,ediff-files3というコマンドがコレです。
複数人で開発作業を行っていると、ひとつのソースを3人で編集していることもあるでしょうから、何かと役に立ちます。
あと、若干の設定をすると便利なのですが、標準だと、emergeのウィンドウが別フレームで起動してしまうため、使いにくいと思います。そこで、以下の設定を追加しておくと、同じフレームにコマンド受付入力部が表示されるので、使いやすくなります。また、ついでに、現在のバッファと次のバッファを比較するcompare-bufferコマンドの設定も載せておきます。必要に応じて変更してください。

余談ですが、管理者の人って、開発の現場を理想的な形でしか理解していないので(というか、現場の経験がない場合が多い)、こういうこと(複数人で同じソースを編集すること-多くても二人とか、と考えているようですが実際はそうはいかない場合が多い)を想定していないケースが多いんですね。で、結局は、しわ寄せが全部開発者の負担になっちゃうんですね。
結局は、手動マージが多発するワケで、中途半端なソースコードバージョン管理ツールを導入するなら、一般でよく使われているCVSやRCS(ロック式なので個人的には却下ですが...)を採用してくれれば、問題ないケースが殆どなんです。
せっかく、UNIXの開発環境なのに、なんで、Windowsのクライアントソフトが必要なシステム作りなんかするんでしょうかね。プログラマはコマンド入力なんてすぐに慣れるのに...


■テンプレート付きの日付自動入力
ソースコードを書いていて、変更箇所にコメントを入れるとき、マニュアル入力で
/* 04.06.06 add name */
なんて感じで入力している方が多いと思います。
この日付部分は毎日変わるものなので、自動入力は難しいと思われるかもしれませんが、emacsに装備されているlispを使えば簡単にできます。
nameのところを自分の名前に書き換えればOKです。
また、コメントにあるようにformat-time-stringを書き換えれば時間の表示形式やタイムゾーン、曜日を表示したりすることも可能ですので、お好みに合わせて設定してください。
設定方法は、M-x describe-function format-time-string
と入力すれば表示されます。
といった感じで、まさに自由自在に設定できます。


■インクリメンタルサーチ(I-search)関連
Meadow/Emacsで検索といえば、インクリメンタルサーチ(I-search)ですね。
ただ、使いこなせていない方が多いようなので、ちょっと紹介します。
  1. 単語単位で検索候補を入力する
    検索時に文字入力を楽にするには、I-searchを使わなければ、C-yでペーストしてしまえば、よいのですが、I-searchの場合、これは、使えません。
    I-searchモードに入ったら、C-wを押してみてください。単語単位で入力されます。
    C-wする毎に、単語を拡張してくれます。
  2. 文字単位で追加、削除する
    1.の方法は便利なのですが、文字単位で追加、削除ができないのが難点です。
    そこで、以下の設定を追加すると、I-search中に、C-f,C-bで文字単位での追加、削除が可能になります。
  3. I-search中に、occur(バッファ内検索)する
    まず、occurってご存知でしょうか。
    これは、現在のバッファ内を検索して一覧として表示してくれるelispです。
    使い出すと、便利で手放せなくなるのですが、何故か愛用者が少ないのです。
    以下の設定を追加すると、I-searchで検索中の語句で、occurできます。
    上の設定があると、あまり使い道がないかもしれませんが、カーソルの近くにある単語で、occurをかけるには、以下の設定を追加すればOKです。


ページ先頭へ



■現在行を分かりやすく

hl-line.elを入手します。
以下の設定を.emacsに追加します。

;;;
; アンダーラインを設定
(load "hl-line")
;(setq hl-line-face 'underline)
(setq hl-line-face 'bold)
(hl-line-mode)
(copy-face 'highlight 'my-hl-line)
(set-face-background 'my-hl-line "cornsilk2")
(setq hl-line-face 'my-hl-line)

経験的には、背景色に近い色を設定したほうが見やすくなります。
私の場合、lemonchiffonを指定しているので、それにあった設定になっています。
使用可能な色は、M-x list-colors-displayで確認してください。
また、M-x customize-groupとし、hl-lineを指定することで、CUIで設定することも可能です。
余談ですが、faceをアンダーラインにすると、アンダースコアが見にくくなる(文字色と同じにするとまったく見えない)ので、止めたほうがよいでしょう。

06年7月29日更新
Meadow 2.10 (ASAGAO)では仕様変更されたようで、以下のようにすればOK
(load "hl-line")
(copy-face 'highlight 'my-hl-line)
(set-face-background 'my-hl-line "#e0e0c0")
(setq hl-line-face 'my-hl-line)
(global-hl-line-mode)
	  
色は自分の環境に合わせて調節してください。

ページ先頭へ



■起動時に.emacs以外のファイルを読み込んで開始する

以下のように起動すればOKです。

emacs -q -l file

fileに起動時に読み込みたいファイルを指定するだけです。

ページ先頭へ



■emacs20ベース(UNIX)の.emacs

.emacsです。.emacsにリネームしてお使いください。
標準で用意されているLISPのみを使用していますので、UNIXでEmacsを利用されている方には便利にお使いいただけるかと思います。
なお、起動時の配置位置や背景色はコメントにしていますので、お気に召すようであればコメントアウトしてお使いください。
各機能についてはコメントしてあるので分かると思います。

ちなみに常用している.emacsは、標準以外のLISPを多数利用している関係で3倍以上になっています。目指せ、100KB。なんてね。
主なものは、ce-scroll,skk,woman,mode-info,abbrev-complete,browse-kill-ring,dabbrev-highlight,edict,gnuserve(Windows only),hl-line,html-helper-mode,japanese-holidays,keisen-mule,navi,session,といったところです。他のものも試してみたのですが、Fri Dec 26 19:07:01 2003現在、このあたりで落ち着いています。

ページ先頭へ



■指定ディレクトリ以下の複数の拡張子を持つファイルに対してサブディレクトリまでgrepする

以下の設定を.emacsに追加してください。
但し、Bashの関数を使用していますので、他のシェルでは変更する必要があります。
拡張子がasm,txt,h,cの場合の例です。

(setq grep-command "for i in *.asm *.txt *.[hc];
do find path -name \"$i\" -print;done|xargs grep -n -i ")

使い方:M-x grep
とすると、上記文字列が表示されますので、 pathを探索開始ディレクトリに書き換え、最終位置までカーソルを移動し、探索文字列を入力すればOKです。

最近のfindを使用している場合は-orを使用すればそれで済むのですが、古めのfindだと、or検索ができないので、こんなことをする必要があります。
正規表現に明るい方は、上記拡張子にマッチする記述をすればそれで済むかもしれません。知っていたら教えてください。

ページ先頭へ



■TAGSファイルによるソース解析
emacs/Meadowでは、タグファイルによるソース解析がサポートされています。
ここでは、その方法をみていきます。
TAGSファイルの考え方そのものはなにもemacsだけでなく、viでも同様なことは可能です。
私の場合、emacsしか使用しないので、というだけです。
  • できること
    関数、マクロ、型などの定義位置に一発でジャンプできる。
    もちろん、元の位置に戻ることも可能。
    これが、意味するところは・・・そう、仮想的なステップ実行が可能になります。
    変数の状態までは分かりませんが、処理の流れを追えるだけでも解析にはとても重宝します。
    いちいち、この関数の定義位置は、...とgrepするのが苦痛と感じている方にお勧め。
    TAGSファイル管理下のファイル群からの検索、置換が可能。
  • 必要なもの
    Meadowなどのemacs系のエディタ
    ctags/etagsなどのタグファイル生成ソフトウェア
  • タグファイルの作り方
    emacsでは、標準でTAGSというファイル名で作成するのが一般的です。
    ctagsを使う場合、多くの場合、-eというオプションを指定すると、TAGSというファイル名で作成してくれます。
    基本的には、対象ディレクトリに移動し、etags -t ファイル名
    とするだけです。
    ただ、サブディレクトリの検索はできないので、find,xargsと組み合わせる必要があります。
    find トップディレクトリ -name ワイルドカード -print | xargs etags -t
    とかでしょうか。
    findが-orをサポートしていない場合などで複数のワイルドカードを指定したい場合、ShellのLOOP機能であるfor文などを使用する必要があります。ここでは、触れませんが簡単なので、man forやWebで調べてみてください。
    この場合、ディレクトリは相対になるので、注意が必要です。やってみて、TAGSファイルを開いてみれば分かります。
  • 使い方
    • TAGSファイルを指定する
      最初にfind-tag(M-.)すると場所を聞いてきますので、場所を指定するだけです。
      場所を変更したい場合は、visit-tags-tableを実行すると、指定できます。
    • 定義位置にジャンプする
      飛びたい関数へカーソルを移動して、find-tag(M-.)でジャンプできます。
    • ジャンプする前の位置に戻る
      pop-tag-mark(M-*)
      ただし、emacs19ベースのmuleでは実装されていません。
    • TAGSファイル管理化のファイルから検索
      tags-search
      検索対象ファイルが予め決まっている場合は、grepでなく、こちらが便利。
      正規表現での指定も可能です。
      次候補へ進むには、C-u M-,
    • TAGSファイル管理化のファイルを一括置換
      tags-query-replace
    • 主なキーバインド
      機能キーバインドコマンド名
      M-.find-tag定義位置へジャンプ
      M-*pop-tag-markジャンプ前の場所へ戻る
      M-,tags-loop-continue他の候補へジャンプ
      ESC C-.find-tag-regexp正規表現でジャンプ指定
      C-x 4 .find-tag-other-window
      C-x 5 .find-tag-other-frame
余談ですが、ソフトウェア解析ページに掲載している、functree(C言語関数ツリー)を併用すると、さらに理解を深めることができるでしょう。
このツールは、DOSだけでなくUNIXでも動作するコマンドラインタイプのツールなので、emacs/Meadowとの相性がバッチリです。ShellモードでもShellCommandでも使えますので、便利です。

ページ先頭へ


■日本語manを見る
Cygwinに付属のmanは、英語で記述されています。英語の得意な人にはこれでもよいのですが、日本語で読めたほうがより、ベターですね。
ということで、ここでは、Meadowで、日本語manが見えるようになるまでを紹介します。
Cygwinに直接、日本語環境を構築してもよいのですが、Meadow+WOMANの方が、はるかに楽に目標を達成できます。
余裕のある方は、Cygwin環境でのインストールにもチャレンジしてみてください。
      まずは、日本語manをインストールします。
      ソースレベルでインストールできる方は、以下の作業は不要です。JM Projectにあるtar.gzファイルをダウンロードし、インストールすればOKです。
    • rpmをインストールできる環境を用意する
      ftpサイトから、rpm-3.0.6.bin.tar.gz をDLして、'/'で展開して、
      $ rpm --initdb
      $ mkdir /etc/mtab
      を実行すれば、rpm のインストールと DB の初期化とディレクトリの準備が完了です。
      この作業で rpm パッケージをインストールする準備が整いました。
    • 日本語manをインストールします
      JM Projectにあるrpmファイルをダウンロードし、
      $ rpm -i --nodeps --force --ignoreos ファイル名
      として、インストールします。
      エラーが表示されますが、気にしなくてOKです。
  • MeadowにWOMANを組み込む
    Francis Wright's Emacs Packagesから、WOMAN.ELをダウンロードし、lispパスの通った場所へ配置します。
    次の内容を.emacsに追加します。
    インストールパスを変更した場合は、適宜読み替えてください。
    Meadowを再起動もしくは、各lisp文の最終行でC-xC-eとします。
  • 日本語manを見る
    M-x woman
    と入力し、ミニバッファから、確認したいコマンド名を入力します。
    TABキーで補完が利きますので、どんなコマンドがあるか確認してみるだけでもしばらくは遊べるでしょう。
    勿論、日本語manに用意されていないコマンドは、英語での表示になります。
    同じコマンド名が存在する場合は、パスを選択するウィンドウが表示されますので、希望位置にカーソルを合わせ、Enterキーで確定すればOKです。

ページ先頭へ


■Wanderlust
  • キーバインド
    メールを書く (フォルダモード or サマリモードで) w
    引用せずに返信する (サマリモードで) a
    引用してに返信する (サマリモードで) A
    フォワードする (サマリモードで) f
    編集中のドラフトを破棄する (ドラフトバッファで) Ctrl-c Ctrl-k
    メールを送信する(ドラフトバッファ消去) (ドラフトバッファで) Ctrl-c Ctrl-c
    メールを送信する(ドラフトバッファを残す) (ドラフトバッファで) Ctrl-c Ctrl-s
    ファイルを添付する (ドラフトバッファで) Ctrl-c Ctrl-x Tab
    署名の挿入 (ドラフトバッファで) Ctrl-c Ctrl-w
    アドレス帳を編集する Ctrl-c Ctrl-a


    a : アドレス追加
    e : アドレス編集
    d : アドレス削除
    q : アドレス編集から出る
    x : ドラフトバッファに反映

    Summaryモード
    @ : アドレス追加

ページ先頭へ


■関連ツール
  • gnuserv
    Meadowを普通に関連付けし、ファイルをダブルクリック後、Meadowが起動中の場合は別フレームにそのファイルが表示されます。
    これでは、ちょっと不便なので、こんな時は、gnuserv というツールを使えば万事解決です。

ページ先頭へ


■ifdefブロックをジャンプする
以下のようにすると、ifdefブロックをジャンプできます
  • endifへジャンプ
    ifdefの行にカーソルをあわせてから、
    C-c C-n
  • ifdefへジャンプ
    endifの次の行にカーソルをあわせてから、
    C-c C-p

ページ先頭へ


■OR検索
バッファをOR検索するには、以下のようにすればOKです。
後ろへ向かって検索するなら、M-x isearch-forward-regexp
前へ向かって検索するなら、M-x isearch-backward-regexp
とし、ミニバッファから、キーワード1\|キーワード2\|キーワード3
で、検索できます。後は、普通のインクリメンタルサーチなので、C-s,C-rでOKです。
これは正規表現の一つなのですが、これだけで書籍になる位の内容になるものなので、ここでは、省略します。興味のある方は、上記リンク先の書籍や正規表現をキーワードに検索してみてください。

ページ先頭へ


■M-x grep で日本語入力
Meadow(1.15以下)に限らず、Emacs20.2では、標準状態では、M-x grep で日本語検索できません。
shellモードではできるのに、何でだろう?という方も多いかと思います。
そこで、以下を.emacsに追加すると、日本語検索可能になります。
勿論、grepは日本語対応版を使用してください。

ページ先頭へ


■CVSでバージョン管理
一般にバージョン管理に使用されているCVS.Emacs/Meadowでは、予めアクセスがしやすいようになっています。ここでは、Windowsのローカル環境での導入から運用方法まで説明します。
RCS/VSSは、ロック式なので、一人の人が作業中だと、check inするまで何もできなくなる可能性があります。CVSでもロックを使えるのですが、優れたマージ機能が搭載されていますので、一般的には、ロック式で使うことは少ないようです。初期状態でも非ロック式です。
  • 導入
    • CygwinのCVSパッケージをインストール
    • CVSROOTの置き場所を決める
      c:/home/CVSROOT を置き場所にする場合は、
      環境変数CVSROOTに:local:/cygdrive/c/home/CVSROOT
      と設定しておきます。Win9xならAUTOEXEC.BAT,
      NT系ならマイコンピュータ右クリック→詳細タブ→環境変数
      から設定すればOKです。
      ※UNIXで利用の場合は、:local:は不要で、普通にパスを指定するだけでOKです。
    • CVSを初期化する
      cvs init
      とすると、c:/home/CVSROOTとその直下にCVSROOTが作成されます。
  • 使用開始
    • プロジェクトファイルの準備
      c:/home/sample/hello/hello.cをサンプルとして準備します。
    • プロジェクトファイルをCVSに登録
      cvs import -m "start" sample/hello vendor_tag hello_01_00
      とすれば、~/sample/hello以下のファイルが登録されます。
      CVSROOTで登録したディレクトリ以下にsample以下ができている筈です。
  • 運用方法
    • チェックアウト
      CVS管理下のファイルをローカル環境で使用可能にすることをいいます。
      チェックアウトしたいディレクトリに移動し、
      cvs checkout sample/hello
      とすると、sampleディレクトリ以下が作成されます。
      ここまででコマンドラインの作業は終了です。勿論、以下の作業をコマンドで行うことも可能ですが、せっかくEmacs/Meadowが使用できるのですから、使わない手はありませんね。
    • 現在のファイルとCVS管理化のファイルの比較
      C-x v = とすると、別バッファにCVS管理下のファイルが表示され、異なる場所が、簡単に確認できます。
      ファイルを変更中に、あれ?どこ変えたっけ?といったときに、重宝します。
      余談ですが、SunOSだと、tkDiffというX用のツールがさらに見易いです。
    • チェックイン(commit)・・・最新ファイルをCVSに反映
      チェックアウトしたファイルをオープンすると、モードラインにCVS管理下のバージョン番号が表示されます。
      チェックアウトしたファイルを変更します。
      VSSと異なり、Commit中以外は、ロックされませんので、 チェックイン前にC-x v = で旧バージョンと比較しておきましょう。
      確認が終わったら、
      C-x v v とすると、チェックインできます。
      コメント入力用のウィンドウが開きますので、入力したら
      C-c C-c とすると、更新されます。
      モードラインのバージョン番号も変更された筈ですので、確認しておきましょう。
      ちなみに、チェックインのコマンド名は、commit です。
    • 履歴の表示
      C-x v l とすると、別バッファに履歴が表示されます。
      必要なくなったら、C-x 0 で消せばよいでしょう。
    • 旧バージョンの取得
      作業中に、一つ前の状態に戻したい場合、
      C-x v u と入力すると、ファイルが変更されている場合は、確認がありますので、同意すると、一つ前の状態に戻ります。
    • 旧バージョンの表示
      C-x v ~ とし、ミニバッファにバージョン番号を入力すると、別バッファにそのバージョンのファイルが表示されます。
      M-x compare-windows で比較すればよいでしょう。
    • スナップショットを作成
      正式には、TAG打ち、とよばれる作業になります。
      C-x v s とし、タグ名を入力すればOKです。
      指定したスナップショットを復元するには、C-x v r です。
  • ドキュメント
    • info
      infoのvcにドキュメントが用意されています。
    • 日本語info
      ftp.ascii.co.jpにEmacs20の日本語infoがあります。
      texiなので、emacs.texiを読み込んでM-x texinfo-format-buffer とすれば、infoにできます。
      なお、ack.texiはパッケージに含まれないので、予め用意しておく必要があります。
  • キーバインド一覧
    キーバインド コマンド名 機能
    C-x v ~ vc-version-other-window コマンドをタイプした後、バージョン番号をミニバッファに入力すると、対象バージョンのファイルが別ファイルに表示されます。
    ここで、M-x ediff-buffersでバッファ名を指定(通常は、リターンキー2回でOK)すれば、カラフルな画面で比較できるので、分かりやすいでしょう。
    C-x v = vc-diff CVSに格納されているファイルと現在編集中のファイルを比較します。
    C-x v v vc-next-action commit(check in)。これがなければ、何もできませんね。
    C-x v u vc-revert-buffer 現在編集中のバッファを破棄し、CVSで管理しているファイルを再ロードします。
    ま、やり直しです。
    C-x v s vc-create-snapshot タグ打ちです。
    私は、コマンドラインからcvs tagを使っています。
    C-x v r vc-retrieve-snapshot スナップショットの復元です。
    C-x v m vc-merge cvs merge
    編集中ファイルとCVSで管理しているファイルに違いがあれば、比較した上で、矛盾点を教えてくれます。
    commit前にやっておきましょう
    C-x v l vc-print-log cvs log
    C-x v i vc-register cvs import
    コマンドラインから普通にcvs importしたほうが良いでしょう。
    -Iオプションを併用すれば除外ファイル指定で一気にimportできますし。
    C-x v h vc-insert-headers
    C-x v g vc-annotate 誰がいつどこを変更したかを表示してくれます。
    C-x v d vc-directory カレントディレクトリにcommitやマージしていないファイルがあれば、dired画面として表示してくれます。
    C-x v c vc-cancel-version
    C-x v a vc-update-change-log
  • CVSコマンドで便利な技
    • 今までにコミットされたファイルの一覧を見る
      cvs history -cl -z +0900
      historyには、沢山のオプションがあるので、色々と試してみると面白いでしょう。
    • ローカル環境にまだコミットされていないファイルを確認
      cvs diff|grep 'RCS file'
      変更ファイルが見つかったら、
      cvs diff ファイル名
      でそのファイルの変更点を確認すればよいでしょう。
      変更ファイルが少ない場合は、最初から、cvs diff だけでOKです。
どうでしょうか。これなら、WinCVSなんて必要ないですよね。
皆さん、食わず嫌いは止めて、Emacs/Meadowを使い倒しましょう。

ページ先頭へ


■文字の表示色を変更
mcompleteの表示色を変更では、直接ELファイルを書き換える方法を説明しましたが、実は、フェイスを変更することでも可能です。
  • M-x list-faces-display でフェイス一覧を表示
  • mcomplete-何たら、がmcomplete関連のフェイス名です。ここで表示されたフェイスのうち、見づらいものを変更すればよいでしょう。
  • *scratch*バッファで、
    (set-face-foreground 'フェイス名 ("色の名前"|"rgb:rr/gg/bb"))C-x C-e
    とすれば、反映されます。
    気に入ったら、.emacsの最後に追加しておけばOKです。(ELファイルロード前に書いても意味がありませんので、念のため)
これを使えば、コメントの色が見づらい場合などは、同じように変更することが可能になります。
font-lock-modeの色が見づらいと感じている方は、ぜひお試しを。

■おまけ、Cソースの色を変更する方法
例えば、font-lockを使って色付けをしているc-modeでCソースの編集をしている場合(多分、殆どの人がこれに該当します)は、
font-lock-で始まるフェイス名の該当する部分を見つけ出して、上述したset-face-foregroundを使用して上書きしてあげればOKです。
コメントの色なら、font-lock-comment-face
定数の色なら、font-lock-constant-face
関数名の色なら、font-lock-function-name-face
キーワード(ifとかforとか)の色なら、font-lock-keyword-face
文字列の色なら、font-lock-string-face(これがデフォルトでみにくいんですよね)
変数名の色なら、font-lock-variable-name-face
って具合に対応するわけです。

ページ先頭へ



■mcompleteの表示色を変更
mcomplete,mcomplete-historyは、icompleteと並び、ないと不便ですね。
ただ、デフォルト状態では、背景色によっては見にくいです。
そこで、表示色を変更してみましょう。
  • 対象ELファイルを開きます
  • foreground を検索します
  • ダブルコーテーションで囲まれた部分を見やすい色に変更します
他のLISPファイルでも色が見にくい場合は、同じ方法で変更可能です。
なお、色見本を表示するには、M-x list-colors-display とします。

ページ先頭へ


■diredで拡張子ソート
diredを起動したら、以下のようにします。
  • C-u s
  • オプションが表示されるので、X(ラージX)を追加する
基本的には、lsのオプションがそのまま使えますので、自由にソート可能です。
もちろん、lsが-Xをサポートしていない場合は(SunOSなど)、使えません。

ページ先頭へ


■ftp上のファイルを直接編集する
C-x C-f /ユーザ名@サーバ名:ファイル名
とするだけです。あとは、ローカルファイルと同じように編集できます。

ページ先頭へ


■邪魔な条件コンパイルを見えなくする
大きいプロジェクトのソースは仕向け別に#ifdefや#ifで条件コンパイルするようになっている場合が殆どです。そのままでは、とても見れたものではないので、Meadowで不要な個所は非表示にしてしまいましょう。
  • hide-ifdef-modeを使う
    • hide-ifdef-modeに入る
      M-x hide-ifdef-mode として、hide-ifdef-modeに入ります。モードラインにその旨が表示されます。
    • 不要なブロックを削除する
      まず、不要なブロックのどこかにカーソルを移動し、M-x hide-ifdef-block とすると、そのブロックが削除されます。削除されるといってもソースから消えるわけではなく、見えなくなるだけですので、ご安心を。
    • 削除したブロックを復活する
      ブロックのどこかにカーソルを移動し、M-x show-ifdef-block とすると、対象ブロックを復活できます。
      M-x show-ifdefs とすると、今まで削除したブロックが全部見えるようになります。
    • 自動的に隠す
      .emacsに
      (setq hide-ifdef-define-alist ( append (list '(シンボル名 シンボル名) )))
      のように登録しておき、M-x hide-ifdef-use-define-alist とすると、自動的に隠せます。
      但し、#ifの処理が上手く行かない様なので、私は手動でやっています。(Meadow1.55)
  • マクロ展開機能を使う
    Meadow/Emacsでは、プリプロセッサと連動して必要な部分だけを展開可能です。
    但し、プリプロセッサなので、#defineで定義されたマクロまで展開します。
    Meadow+Cygwinの場合は、.emacsに
    (setq c-macro-preprocessor "cpp -C -E -Iインクルードパス -Iインクルードパス")
    と設定しておき、リージョンで必要個所を選択した後、
    M-x c-macro-expand とすると、別ウィンドウに結果が表示されます。
    こちらは、プリプロセッサを使用しているため、#ifでも#ifdefでも正しく表示されます。
    Cygwinをインストールされているなら、こちらをお勧めします。
    但し、ファイルがディレクトリ構成になっていたり、ファイルごとにインクルードパスが異なる場合には、この方法だと、ちょっと面倒です。
    ソフトウェア解析術で紹介している、makefileとプリプロセッサを組み合わせる方法を使ったほうが早いかもしれません。

ページ先頭へ

■Emacsに関連する書籍

(データ提供:Amazon.co.jp)



ページ先頭へ




■お知らせと連絡先

このウェブサイトで取り上げて欲しい話題や分かりにくい点などありましたら、
以下のメールアドレス宛にメッセージをいただければ、参考にさせていただきます。

メールアドレスは、work_komiあっとまーくyahoo.co.jpです。
(「あっとまーく」は、半角英数のあっとまーくに変換してね。)

また、XBOXをお使いの方は、ゲーマータグ(akbox)にてフレンドリクエストを受け付けています。