Myページ
ホーム
コミュニティの人々
ソフトウェア
技術紹介
適用分野
Tyzohとは
ご意見お問い合わせ

kkatoのブログ

emacsマクロ:C言語でポインタ型への置き換え

Cでコード書いていて、t型の変数を後でt*型(tへのポインタ型)に変更したくなることってよくありませんか?(あまりないですか、すみません)

例えばaをintの配列のつもりで使っていたのに、後で配列へのポインタに変更したくなったりすると、
a[i]=hoge;
というのを
(*a)[i]=hoge;
に書き換えなければいけません。

こういうのが大量にあっていやになるケースに出くわしたので、emacsのマクロ書いてみました。以下そのコード


(defun f ()
  "thisandthat."
  (interactive)
  (re-search-forward "[_a-zA-z]+" nil t)
  (setq s (buffer-substring (match-beginning 0) (match-end 0)))
  (delete-region (match-beginning 0) (match-end 0))
  (insert "(*") (insert s) (insert ")")
  (goto-char (+ (match-end 0) 3))
)
あとは何か適当なキーにバインドして、置き換えたい変数の直前にカーソルを持っていって実行すればいいです。

ちなみにemacsでまともなマクロ書いたのは初めてです。


タグ:

kkato (2010-09-10 19:32) | コメント(2)| トラックバック(0)

トラックバック(0)

トラックバックURL:

コメント

どうも、久しぶりに、杉野です。

こういう、emacs スクリプトを見ると、elisp って、つくづく、関数型言語の顔をした、手続き型言語だなぁ、と思いますね。

もちろん、関数型言語として使うこともできるけど、emacs の buffer を使った瞬間に、手続き型言語チックになってしまう。これは、きっと、buffer = 大域変数 → 手続き型、ということに違いない。

P.S.
いずれにしても、最近、ぜんぜん、プログラム書いてないなぁ。shell script でさえ、書いてない。
あっ、そんなことない、自宅用の家計簿破壊事件の調査用に、数行書いたか。

[ 2010年10月21日 09:17 | sugino ]

どうも杉野さん、お久しぶりです。
elispが手続き型的になってしまうのは、言語仕様というよりAPIが原因かと思っています。
あと、エディタは手続的に考えないと考え辛いというのもある。

[ 2011年1月17日 14:35 | kkato ]

コメントを投稿

名前

電子メール

URL

ログイン情報を記憶

コメント (スタイル用のHTMLタグを使うことができます)

プロフィール

kkato

・10年以上前からのdebian使いです。
・C++, Ruby, perl, ocamlなどの言語をよく使います。
・数値計算などが得意です。
・スパムメールの文面をよく読むのが好きです。
ホームページ:
http://sites.google.com/site/kimikazu/

カテゴリ

RSSフィード

コミュニティの人々 | ソフトウェア | 技術紹介 | 適用分野 | Tyzohとは | ご意見お問い合わせ

Copyright (C) 2004-2011 Nihon Unisys, Ltd. All Rights Reserved.
Powered by Movable Type Open Source