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

42. プログラム関連 ― 一般用 (2007/11/29)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=programing"
"MeadowMemo/プログラム関連―一般用"へのコメント(無し)


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

以下では,最初に言語別に便利な機能やパッケージを紹介します.その後で,一般的に使え そうなものを紹介していきます.



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

42.1 Emacs lisp / C / Perl / Ruby のマニュアルを便利に (2003/10/22)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=mode%20info"
"MeadowMemo/Emacslisp/C/Perl/Rubyのマニュアルを便利に"へのコメント(無し)
Web ページ

何が問題なのか?

Emacs Lisp を編集した際に re-search-forward の引数は何だったかなということがあり ます.

しかし,それを調べるためには,実際のコマンドを探し読んでいく必要があります.

何ができるのか?

そんな時に, mode-info があると,

-- コマンド: re-search-forward REGEXP &optional LIMIT NOERROR REPEAT
     この関数は、カレントバッファにおいて前方へ向けて正規表現 REGEXP に一
     致するテキストの文字列を探索する。関数は REGEXP に一致しないテキスト
     はすべて飛び越え、みつけた一致箇所の末尾へポイントを置く。ポイント
     の新たな値を返す。

という風に即座に適切なヘルプを表示することができます. Emacs Lisp だけでなく, C や Ruby , Perl にも対応していますので,これを入れておくと非常に便利になります.

インストール方法は?

インストールのためには, mode-info の他に,必要なマニュアルをダウンロードする必 要があります.

以下,インストール手順です.



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

42.2 プロジェクト単位で管理 − pbf-mode (2003/06/08)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=pbf"
"MeadowMemo/プロジェクト単位で管理−pbf-mode"へのコメント(無し)

何が問題なのか?

プログラムを書いていると,プログラムの cvs ディレクトリや文字コードは大体決まっ ているものです.それを,毎回指定するのは面倒です.

何ができるのか?

pbf-mode を使えば,プロジェクト単位でタブ幅や文字コードなどを指定できます.

インストール方法は?

pbf-modeか https://bookshelf.jp/elc/pbf-mode.elから, pbf-mode.el をダウンロードし, ロードパスの通ったところへ置きます.

設定方法は?

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

 
(require 'pbf-mode)
(pbf-setup)
(pbf-mode t)

さらに,プロジェクトの定義を ~/.pbf.el に書きます

 
(pbf-project HOME nil
             "My private."
          :directory (expand-file-name "~/"))
(pbf-project MYLISP nil
             "mylisp."
          :directory (expand-file-name "~/mylisp/"))

という風に書きます.:directory の他に c-style なども指定できるので,必要ならばソー スを読むか,pbf-mode で探 してください.



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

42.3 便利な機能メモ (2003/11/24)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=programing%20tips"
"MeadowMemo/便利な機能メモ"へのコメント(無し)

42.3.1 自動で字下げ ― indent-region (2003/11/24)   
42.3.2 indent-tabs-maybe   
42.3.3 リージョンをコメントに ― comment-region (2003/06/08)   
42.3.4 タブ <=> スペース変換 ― tabify, untabify (2003/06/08)   



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

42.3.1 自動で字下げ ― indent-region (2003/11/24)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=indentregion"
"MeadowMemo/自動で字下げ―indent-region"へのコメント(無し)

C や emacs-lisp を作っているとき, Emacs では自動で適切な字下げを行います. しかし, プログラムをどんどん編集していくと, 字下げがバラバラになって見苦しくなってしまい ます. そんな時, リージョンを選択し, M-x indent-regionと入力します. すると, リージョン部分が正しく字下げされます.

この字下げの方法についても細かくカスタマイズできます.



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

42.3.2 indent-tabs-maybe

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=indent-tabs-maybe"
"MeadowMemo/indent-tabs-maybe"へのコメント(無し)
要約

インデントにタブを使うか使わないかを自動判定してくれます.

情報源

ELL

何が問題なのか?

自分が作ったプログラムだけならともかく,他人のソースを編集すると設定を変える必要 に迫られることがあります.

例えば,インデントにタブを使うかどうかは好みによって変わります.

何ができるのか?

ソース内にタブがあれば,インデントにタブを使うと判断し,設定を自動的に修正してく れます.

設定済みMeadowでは

インストールが必要です.

インストール方法

indent-tabs-maybe.el を ダウンロードしてロードパスの通ったところへ置きます(オリジナルから一部修正してあ ります).

設定方法

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

 
(require 'indent-tabs-maybe)

詳しい使い方

ファイルを開くと,自動的に最初の方のテキストからインデントにタブを使うかどうかを 判断してくれます.



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

42.3.3 リージョンをコメントに ― comment-region (2003/06/08)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=commentregion"
"MeadowMemo/リージョンをコメントに―comment-region"へのコメント(無し)

プログラムであやしそうなところをコメントにしたりということはよくあります.だけど, そのたびにコメントを記入していくのは大変です.

そこで,便利なのが comment-region です.方法はリージョンで選択して,M-x comment-region で一気にコメントにできます.コメントをはずすのは C-u M-x comment-region でできます.

Meadow 1.99 だと M-x comment-box も使うことができます.これは,リージョン を /* */ などでコメントにしてくれます.

別の方法としては,リージョンで選択してC-x r t ;;という風に矩形処理を利用す る方法もあります.



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

42.3.4 タブ <=> スペース変換 ― tabify, untabify (2003/06/08)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=tabify"
"MeadowMemo/タブ=スペース変換―tabify,untabify"へのコメント(2007/12/28)

ファイル中のタブをスペースに, あるいは逆にスペースをタブに変換する機能です.

使い方は簡単で, リージョンを選択し, M-x tabifyでタブへ, M-x untabify でスペースへ変換できます.

大したことのない地味な機能ですが, これが非常に便利です.



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

42.4 タグジャンプ − 関数定義へジャンプ etags (2003/11/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=etags"
"MeadowMemo/タグジャンプ−関数定義へジャンプetags"へのコメント(無し)

Emacs lisp や C , C++ などのプログラムを書いていると,この関数定義はどうなって いたかなと考えることはよくあります.しかし,このたびにファイルを開いて検索してと いうのは非常に面倒です.

そこで,タグジャンプという非常に便利な機能があります.これは,どのファイルに何と いう関数があるかのリスト (タグファイル) を作成しておき,それをもとに関数を定義し ているファイルの関数定義部分を開いてくれます.

タグファイルの作成

この機能を使うためには,まずタグファイルを作る必要があります.作り方は簡単. shell で

 etags *.el

のように指定します.これで TAGS というファイルができます.複数のディレクトリは

 etags mylisp/*.el bin/*.[hc]

のようにすればできます.これで,カレントディレクトリに TAGS というファイルができ ます.

タグジャンプ

タグジャンプは M-. (find-tag) でできます.初回に限り,TABSPC で補完しようとすると, TAGS ファイルの場所を聞いてきますので,作った TAGS ファイルを指定します.

これで,TABSPC での補完を使いながら関数を指定でき,一気に関数定 義へ飛ぶことができます.

逆に戻るのは M-* (pop-tag-mark) です.

タグファイルに登録されているファイルを検索

さらに, TAGS ファイルに登録されているファイルのみを全文検索することもできます. 方法は M-x tags-search です.次の検索結果へは,M-, で飛ぶことができ ます.同じように置換もできます.M-x tags-query-replace です.

その他の機能

同名の関数を持つファイルが複数あった時は,C-u M-. で次へ飛ぶことができます. 前へ戻るのは C-u - M-. です.

他の機能として

TAGS ファイルの切り替え → M-x visit-tags-table

関数の一覧を表示 → M-x list-tags

正規表現に一致した関数のみを表示 → M-x tags-apropos

タグファイルの情報をリセット → M-x tags-reset-tags-tables

タグファイルが読み込まれていると,M-TAB で関数の補完もできます.毎回,コピー したりといった手間が省け,非常に便利です.

これを使い出すと Meadow が手放せなくなってきます.

42.4.1 タグファイルの自動生成 (2003/11/18)   



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

42.4.1 タグファイルの自動生成 (2003/11/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=tagsfile%20maker"
"MeadowMemo/タグファイルの自動生成"へのコメント(無し)
要約

TAGS ファイルを自動的に作成できます.

情報源

EmacsWiki:TagFile

何が問題なのか?

etags を使えば関数や変数にジャンプできるといっても,いちいちコマンドラインで TAGS ファイルを作成するのも面倒です.

何ができるのか?

タグジャンプする際に TAGS ファイルがなければ TAGS ファイルを作成してくれます.

設定方法

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

 
(defadvice find-tag (before c-tag-file activate)
  "Automatically create tags file."
  (let ((tag-file (concat default-directory "TAGS")))
    (unless (file-exists-p tag-file)
      (shell-command "etags *.[ch] *.el .*.el -o TAGS 2>/dev/null"))
    (visit-tags-table tag-file)))

詳しい使い方

普通にM-x find-tagでジャンプします. TAGS ファイルがなければ,作成してくれま す.



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

42.5 タグジャンプ − gtags , global (2007/11/29)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=gtags"
"MeadowMemo/タグジャンプ−gtags,global"へのコメント(無し)

何が問題なのか?

etags で通常は問題ないですが,大規模なプログラムになってくるとタグの生成が面倒で すし,複数の候補には対応していません.

そこで, etags よりも高機能な gtags がお勧めです. gtags は C , C++ , Yacc , Java に対応しています.

ただ,欠点もあって少しインストールが面倒です. Cygwin だと,. /configure;make;make install でインストールできたように見えるんですが,まともに 使えないので, Borland でコンパイルする必要があります.

インストール方法は?

まずは,コンパイル方法を説明します.コンパイルには Borland のコンパイラが必要で す.

まず. PATH を修正して, Cygwin のパスをはずしておきます.

そして,GNU GLOBALより最新の global をダウンロードし,解凍しておきます.

次に, global-4.5.1/w32 の中のファイルなどをすべて global-4.5.1 へコピーします. そして, global-4.5.1/makefile.inc の WILDOBJ , BINDIR , MANDIR を以下を参考に 修正します.

 
CC     = bcc32
AR     = tlib
LIBS   = ..\libutil\libgloutil.lib ..\libdb\libglodb.lib ..\libglibc\libgloglibc.lib
#WILDOBJ= \bc5\lib\32bit\wildargs.obj# BCC++ 5.02
WILDOBJ= "E:\Program Files\Borland\CBuilder5\Lib\wildargs.obj"# BCC++ 5.5
CFLAGS = -DHAVE_CONFIG_H -DBINDIR="\"/usr/bin\"" -I..\libutil -I..\libdb -I..\libglibc -I..\machine
BINDIR = d:\home\bin
MANDIR = e:\cygwin\usr\man\man1\

後は,コマンドプロンプトを起動し,以下のようにしてコンパイルとインストールを行い ます.コンパイル時には山のように警告が出ますが,気にしなくても大丈夫です.

 cd global-4.6
 make.bat
 make.bat install

これで, BINDIR , MANDIR で指定したディレクトリに実行ファイルと man がコピーさ れます.

コンパイルする環境がない場合は global-4.6.lzhをダウンロードし, gtags.el をロードパスの通ったところへ,それ以外をパスの通ったところへコピーしま す.

設定方法は?

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

 
(autoload 'gtags-mode "gtags" "" t)
(setq gtags-mode-hook
      '(lambda ()
         (local-set-key "\M-t" 'gtags-find-tag)
         (local-set-key "\M-r" 'gtags-find-rtag)
         (local-set-key "\M-s" 'gtags-find-symbol)
         (local-set-key "\C-t" 'gtags-pop-stack)
         ))

これで, gtags.el を使うことができます.

詳しい使い方は?

まず,タグファイルを作ります.方法は簡単.

cd source
gtags -v

のように,ソースのあるディレクトリへ移動して, gtags コマンドを実行するだけです. これで,サブディレクトリも再帰的に検索して,タグファイルを作成してくれます.これ で,ソースディレクトリにいくつかのファイルができます.

次に,ソースファイルの中の適当なファイルを開きます.そして,M-x gtags-mode として, gtags-mode にします.

が可能です.他にも,

などが可能です.

gtags-mode にいちいち切り替えるのは面倒なので,適当なフックで以下のように設定し ておきます.ついでに,以下のようにしてM-rなどで入力する関数の補完候補も作 成しておきます.

 
(add-hook 'c-mode-common-hook
          '(lambda()
             (gtags-mode 1)
             (gtags-make-complete-list)
             ))



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

42.6 関数定義へジャンプ ― imenu (2003/11/21)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=imenu"
"MeadowMemo/関数定義へジャンプ―imenu"へのコメント(無し)

要約

TAGS を作成しなくても関数定義へジャンプできる

何が問題なのか?

etags を使えば,関数の定義部分へジャンプできます.しかし,ソースが 1 ファイルし かない時に etags を使って TAGS ファイルを作るというのは大袈裟すぎます.かといって, isearch で済ますのも面倒なものです.

何ができるのか?

TAGS ファイルを作成しなくても,関数定義部分へジャンプできます.

ただし,ジャンプできるのは現在のファイル内にある関数のみになります.

インストール方法

標準で附属しています.

設定方法

不要です.

詳しい使い方

Elisp や C のソースを開き,M-x imenu とします.そうすると,現在のファイル から関数定義部分を検索し,一覧を作成してくれます.

これにより,関数を補完入力することができ,その関数の定義部分へ簡単にジャンプでき ます.

便利な設定

以下を追加すると, C や Elisp で自動的に imenu が読み込まれ, imenu のメニューが できます.これで,メニューから好きな関数へジャンプできます.また,C-c gで imenu を起動できます.

 
(require 'imenu)
(defcustom imenu-modes
  '(emacs-lisp-mode c-mode c++-mode makefile-mode)
  "List of major modes for which Imenu mode should be used."
  :group 'imenu
  :type '(choice (const :tag "All modes" t)
                 (repeat (symbol :tag "Major mode"))))
(defun my-imenu-ff-hook ()
  "File find hook for Imenu mode."
  (if (member major-mode imenu-modes)
      (imenu-add-to-menubar "imenu")))
(add-hook 'find-file-hooks 'my-imenu-ff-hook t)

(global-set-key "\C-cg" 'imenu)

mcomplete と組み合わせる

ネタ元:http://homepage1.nifty.com/bmonkey/emacs/elisp/.emacs

以下の設定を追加すると,mcomplete と組み合わせることができます. これにより,関数名や変数名の入力が便利になります.

当然ですが, mcomplete.el が必要です.

 
(defadvice imenu--completion-buffer
  (around mcomplete activate preactivate)
  "Support for mcomplete-mode."
  (require 'mcomplete)
  (let ((imenu-always-use-completion-buffer-p 'never)
        (mode mcomplete-mode)
        ;; the order of completion methods
        (mcomplete-default-method-set '(mcomplete-substr-method
                                        mcomplete-prefix-method))
        ;; when to display completion candidates in the minibuffer
        (mcomplete-default-exhibit-start-chars 0)
        (completion-ignore-case t))
    ;; display *Completions* buffer on entering the minibuffer
    (setq unread-command-events
          (cons (funcall (if (fboundp 'character-to-event)
                             'character-to-event
                           'identity)
                         ?\?)
                unread-command-events))
    (turn-on-mcomplete-mode)
    (unwind-protect
        ad-do-it
      (unless mode
        (turn-off-mcomplete-mode)))))



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

42.7 関数を一覧表示する ― navi.el (2004/02/03)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=navi"
"MeadowMemo/関数を一覧表示する―navi.el"へのコメント(無し)

何ができるのか?

スクリーンショット

関数を一覧表示して, ジャンプできます. 対応言語は "C++","C","Pascal","Java","Emacs-Lisp","Lisp Interaction","Perl","CPerl","TeX","Text","HTML","Ruby"です. ほんの少し編集すれば 他の言語や Texinfo などでも簡単に使えます.

インストール方法は?

http://www.ne.jp/asahi/love/suna/pub/soft/navi.el/index.htmlよりダウンロー ドして,ロードパスの通ったところに置きます.

設定方法は?

以下を.emacs に追加します

 
(load-library "navi")
(global-set-key [f11] 'call-navi)
(global-set-key "\C-x\C-l" 'call-navi)
(defun call-navi ()
  (interactive)
  (navi (buffer-name)))

詳しい使い方は?

後はソースを開いて,f11jyalC-x C-lで関数の一覧が表示されます.

うまく動かない

モードラインを短くで紹介した設定を使っていると動きませ ん.どこかの日記で回避する方法が紹介されてましたが,行方不明になってしまいました.



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

42.8 関数を一覧表示する ― summarye.el (2003/07/26)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=summarye"
"MeadowMemo/関数を一覧表示する―summarye.el"へのコメント(無し)

何ができるのか?

navi.el のように関数などの一覧を表示できます.

インストール方法

https://bookshelf.jp/elc/summarye.elをダウンロードし,ロードパスの通っ たところへ置きます.

設定方法

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

 
(autoload 'se/make-summary-buffer "summarye" nil t)

詳しい使い方

TeX のファイルや Elisp などで,M-x se/make-summary-bufferとします.そうすると, 関数などの一覧が表示されます.

一覧表示部分では削除 (一覧から削除するだけ) や並び換えなどができます.M-x help-for-help bで確認できますので,いろいろと試してみてください.



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

42.9 対応する括弧が知りたい (2006/03/16)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=kakko%20kakko"
"MeadowMemo/対応する括弧が知りたい"へのコメント(無し)

Emacs lisp はとにかく括弧が多い言語です. そのため, 括弧の閉じ忘れで動かないとい うこともよくあります.

こんな人に便利なのが対応する括弧を分かりやすくするためのパッケージです.

42.9.1 括弧単位,関数単位でのカーソル移動 (2003/06/08)   
42.9.2 括弧をハイライトする ― show-paren (2003/06/08)   
42.9.3 mic-paren (2003/06/08)   
42.9.4 対応する括弧へ飛ぶ (2006/03/16)   



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

42.9.1 括弧単位,関数単位でのカーソル移動 (2003/06/08)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=move%20paren"
"MeadowMemo/括弧単位,関数単位でのカーソル移動"へのコメント(無し)

Lisp は非常に括弧の多い言語です.それだけに対応する括弧が分かりにくくなります. また, C 言語などでも括弧をスムーズに移動できると,非常に便利になります.ここで は,そんな括弧に関連した標準のコマンドを紹介します.

さらに,全体がどうなっているのか知りたい時には,C-x $ (set-selective-display) が便利です.これは,C-u 3 C-x $のように,引数を与 えて使います.こうすると, 3 文字以上字下げされているものは表示されなくなります. そのため,全体を見回すのに便利です.

再度,C-x $とすると,隠れていた部分を元に戻すことができます.

ただし,このようにテキストの一部を隠すコマンドは物理行移動の Emacs Lisp や設定な どとの相性が悪いです.ものによっては,カーソルが変なところへ移動してしまうことも あります.



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

42.9.2 括弧をハイライトする ― show-paren (2003/06/08)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=show-paren"
"MeadowMemo/括弧をハイライトする―show-paren"へのコメント(無し)

対応する括弧をハイライトすることができます.

Meadow には標準で附属してますので,以下を .emacs に追加するだけで使うことができ ます.これで,括弧のところにカーソルを置くと,対応する括弧の色が変わります.

 
(show-paren-mode t)

括弧の色は

で変更できます.

デフォルトのままだと,片方の括弧が画面外にあるとどこにあるのか分かりませんので

 
(setq show-paren-style 'mixed)
(set-face-background 'show-paren-match-face "gray10")
(set-face-foreground 'show-paren-match-face "SkyBlue")

のように設定しておくといいでしょう.こうしておくと,片方の括弧が画面外にある時に は,括弧ではなく括弧の中の色が変化します.

デフォルトのままだと,色が派手すぎるので,適当に変更した方がいいです.

常に括弧の中の色を変えたい時には

 
(setq show-paren-style 'expression)

とするとできます.



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

42.9.3 mic-paren (2003/06/08)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=mic-paren"
"MeadowMemo/mic-paren"へのコメント(無し)

何ができるのか?

show-paren は対応する括弧をハイライトすることができますが, mic-paren ならその間 の文字を強調して表示することができます.

インストール方法は?

使い方は http://www.docs.uu.se/~mic/emacs.html よりダウンロードし, ロード パスの通ったディレクトリに置きます.

設定方法は?

以下を .emacs に記入します.

 
(if window-system
    (progn
      (require 'mic-paren)
      (paren-activate)     ; activating
      (setq paren-match-face 'bold)
      (setq paren-sexp-mode t)
      ))

詳しい使い方は?

これで, カーソルを括弧の所に持って行くと, 対応する括弧の間にある文字が Bold で表 示されます.

(setq paren-match-face 'bold) を (setq paren-match-face 'region) とするとリージョ ンと同じ色になります.



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

42.9.4 対応する括弧へ飛ぶ (2006/03/16)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=kakko%20warp"
"MeadowMemo/対応する括弧へ飛ぶ"へのコメント(無し)

以下のように .emacs に記入しておくと C-x %で対応する括弧に簡単に飛べるよう になります.

 
(progn
  (defvar com-point nil
    "Remember com point as a marker. \(buffer specific\)")
  (set-default 'com-point (make-marker))
  (defun getcom (arg)
    "Get com part of prefix-argument ARG."
    (cond ((null arg) nil)
          ((consp arg) (cdr arg))
          (t nil)))
  (defun paren-match (arg)
    "Go to the matching parenthesis."
    (interactive "P")
    (let ((com (getcom arg)))
      (if (numberp arg)
          (if (or (> arg 99) (< arg 1))
              (error "Prefix must be between 1 and 99.")
            (goto-char
             (if (> (point-max) 80000)
                 (* (/ (point-max) 100) arg)
               (/ (* (point-max) arg) 100)))
            (back-to-indentation))
        (cond ((looking-at "[\(\[{]")
               (if com (move-marker com-point (point)))
               (forward-sexp 1)
               (if com
                   (paren-match nil com)
                 (backward-char)))
              ((looking-at "[])]}")
               (forward-char)
               (if com (move-marker com-point (point)))
               (backward-sexp 1)
               (if com (paren-match nil com)))
              (t (error ""))))))
  (define-key ctl-x-map "%" 'paren-match))

同じようなことは

 
;; By an unknown contributor
(global-set-key "%" 'match-paren)

(defun match-paren (arg)
  "Go to the matching paren if on a paren; otherwise insert %."
  (interactive "p")
  (cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1))
        ((looking-at "\\s\)") (forward-char 1) (backward-list 1))
        (t (self-insert-command (or arg 1)))))

としてもできます.これは,%で対応する括弧へカーソルを移動できます.カーソ ルが括弧の上になければ,単に%が挿入されます.



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

42.10 簡単なプログラムをコンパイル − YaCompile (2003/09/21)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=yacompile"
"MeadowMemo/簡単なプログラムをコンパイル−YaCompile"へのコメント(2007/12/28)

ネタ元:昔どこかの ML に投稿されたものです.

Makefile を作るほど大きなものではなく, 1 ファイルの小さなプログラムをコンパイル する時に便利なものです.コメント部分にコンパイルするコマンドを書いておけば,それ をもとにコンパイルしてくれます.

使い方はコメントを参照.

 
;;
;; YaTeX like compile
;;
;; フックを使って current-comment-prefix をセットしておく。
;;;; (add-hook 'c-mode-common-hook
;;  '(lambda ()
;;      (define-key c-mode-map "\C-c\C-c" 'YaCompile)
;;      (setq current-comment-prefix "/*")))
;;
;; とかね。そうすると、"/*!g++ -o test test.c" みたいな行をバッファ先
;; 頭からサーチして、"/*!" 以降行末までをコンパイルのコマンドとして使
;; うわけだ。あ、"/*!g++ -o test test.c" は行頭にないとダメよ。
;;
(defvar current-comment-prefix "#" "*Default prefix string")
(make-variable-buffer-local 'current-comment-prefix)
(defun YaCompile ()
  (interactive)
  (require 'compile)
  (let ((cmd compile-command))
    (save-excursion
      (goto-char (point-min))
      (if (re-search-forward
           (concat "^" (regexp-quote current-comment-prefix) "!\\(.*\\)$")
           nil t)
          (setq cmd (buffer-substring
                     (match-beginning 1) (match-end 1)))))
    (setq compile-command
          (read-from-minibuffer "Compile command: "
                                cmd nil nil
                                '(compile-history . 1))))
  (compile compile-command))



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

42.11 ソースの書式を統一 ― develock (2005/10/01)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=develock"
"MeadowMemo/ソースの書式を統一―develock"へのコメント(無し)
要約

スペースだけの行など好ましくない部分を強調表示し,修正を促します

何が問題なのか?

プログラムのソースや HTML などでは慣習的に好ましいとされる書式があります.

例えば,括弧の後に無駄なスペースは入れないとか.しかし,そのような好ましくない部 分があったとしても,スペースは普通表示されませんので気付きにくいものです.

何ができるのか?

好ましくないとされる部分を強調表示できます.

インストール方法

develock.el.gzをダウンロードして, ロードパスの通ったところに置きます.

設定方法

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

 
(load "develock")

詳しい使い方

これで, Emacs Lisp のファイルなどを開くと,色がついているはずです.

デフォルトではオンにしたくない場合は,以下を.emacs に追加します.

 
(setq develock-auto-enable nil)

そして,オンにしたい時のみ,M-x develock-modeとします.

具体的にどういうものに色がつくかは以下の通り.ただし,以下のすべての色がつくとは 限りません.どの色がつくかはモードによって変わりますので,ソースで確認してくださ い,

;; 長い行では前半と後半の色が変わります
;; 前半:develock-long-line-face-1
;; 後半:develock-long-line-face-2
;; keywo が微妙に変わってます
(defcustom develock-lisp-font-lock-keywords

;; スペースのみが続く行
;; これも前半,後半で色が変わります
;; 前半:develock-whitespace-face-2
;; 後半:develock-whitespace-face-3
---------------------------------------------

;; 行末のスペースに色がつきます
;; フェイス:develock-whitespace-face-1
(setq fill-column 80)_

;; タブの前にスペースがあるとき
;; 前半:develock-whitespace-face-1
;; 後半:develock-whitespace-face-2
------(setq

;; タブ スペース タブとなる時
;; 最初のタブ:develock-whitespace-face-2
---------(setq

;; タブやスペースのみの行
;; develock-whitespace-face-2
-

;; 独りぼっちの括弧
;; develock-lonely-parentheses-face
 (
  ;; () の直前・直後に文字があればいい
  (develock-refontify-buffers)
  )

;; 括弧のあとのスペース
;; develock-whitespace-face-2
(develock-refontify-buffers)-
(-
)

;; メールアドレス
;; develock-reachable-mail-address-face
[email protected]

;; 半角カタカナ
;; ここでは全角で表示しているが,
;; 半角だと思ってください
;; develock-bad-manner-face
メール

;; A NAME="how to read" のようなタグ
;; で NAME の部分は小文字で
;; develock-upper-case-attribute-face
;; A の部分も小文字で
;; develock-upper-case-tag-face}
<A NAME="how to read"></A>

コメント

develock はあくまで慣習的なものです.したがって,共同で作っているソースを調子に 乗って変更すると反感を買うこともあります.ご注意を.


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