2010年12月アーカイブ

今回は FreeBSD じゃなくて CentOS 5.1 上の話。
今回のプロジェクトは、Linux上での組込のクロス開発で、言語はC++。
LinuxはWindows上で動くVMWare ServerにCentOS 5.1 をインストールしてある。

emacs 23.2のインストール

CentOSには emacs 21 がインストールされていたのだけれど、最近の emacs lisp パッケージは emacs 22以上にしか対応していないものが多いので、emacs 23 をインストールすることに。
とりあえず、 yum search emacs とかしてみても 21 しか出てこないので、23を探すことに。
webで調べたところでは、RedHat el5 用の rpm を持ってきて入れると言う情報もあったのだけれど、該当記事のリンク先にはファイルが残っていなかったので、ソースから入れることに。
emacs-23.2.tar.gz を本家から持ってきて、configure してみると、libgif/libungifがないと言われる。
yum search gif すると giflib と言うパッケージが見つかったので、yum install giflib すると rpm が見つからなくてエラーになった。
yumの設定が古すぎるのかも知れないが、Linuxは良くわからないので gif なしで進めることに。
configure --with-gif=no で無事に進んだので、make && make install で /usr/local にインストールされる。
bash で、
alias em='emacsclient -n'
しているのだけれど、em hoge.c とかやると /usr/bin/emacsclient が見つからないと言われる。emacs は起動できるのだけれど。
csh で言う rehash にあたるものがわからなかったので、twitterでつぶやいたら hash -r だと教えてもらった。

anything

今回導入したかったのは anything.el 。
EmacsWikiにあるパッケージを簡単にインストールするための auto-install.el を入れたかったので、rootで
# cd /usr/local/share/emacs/site-lisp
# wget http://www.emacswiki.org/emacs/download/auto-install.el
でauto-install.elを持ってくる。
そして、~root/.emacsに以下を追加。
(require 'auto-install)
(setq auto-install-directory "/usr/local/share/emacs/site-lisp/")
(auto-install-update-emacswiki-package-name t)
(auto-install-compatibility-setup)
これで、M-x auto-install-batch RET anything RET すると、いろいろなファイルのダウンロードを始めるのでおとなしく待つ。
ダウンロードが終わると、ダウンロードしたファイルを開いてステータスラインに C-c C-c を押せって出るので、C-c C-c を押していくとバイトコンパイルしてインストールされていく。
途中、anything-migemo.el を保存するときに、「変換できない文字があるよ?」的なエラーが出て encoding を聞いてきたので、utf-8を指定する。(たぶん、rootのlocaleが utf-8になっている場合は出ない)
また、anything-gtags.el のときに「gtags がないよ?」みたいなエラーが出るが、無視。
これで、anythingがインストールされたので、個人設定。
anything.elでぐぐると、だいたい (require 'anything-config) して anything-sources を設定しろ的なことが書いてあるけど、anything-config.elを読むと "Setting `anything-sources' is DEPRECATED" って書いてある。
anything.el はすごい勢いで進化しているので、最近は anything-config をrequireするのではなく anything-startupをrequireするらしい。
(require 'anything-startup)
(anything-iswitchb-setup)
(global-set-key "\^x\^f" 'anything-filelist+)
(define-key anything-map "\C-p" 'anything-previous-line)
(define-key anything-map "\C-n" 'anything-next-line)
(define-key anything-map "\C-v" 'anything-next-page)
(define-key anything-map "\M-v" 'anything-previous-page)
とりあえず私がしたのは上記の設定。emacs の iswitchb-mode って知らなかったんだけど、C-x b するときに候補が出て選べると言うもの。
ちなみに、
(iswitchb-mode 1)
(anything-iswitchb-setup)
と両方書くとはまるので注意。
もっといろいろ設定したい人は、rubikitchさんのはてなダイアリーを見ると良い。
この設定で、C-x b の挙動が変わって候補一覧から適当に文字を入力すると絞り込めるようになる。
anythingで他に何ができるかを知りたかったら、C-h b すると現在のバッファのキーバインド一覧が出る(かつ、C-h b にもanythingが効いている)ので、ミニバッファで anything と打つと <f5> a のプレフィックスでいろいろな機能が割り当てられていることがわかる。まだ全然わかってないけど。
とりあえず、デフォルトの <f5> a と言うのは指が動かないので、別のプレフィックスを考える。
いまいちしっくりくるものが思いつかなかったので、暫定でC-c C-f に割り当ててみる。
M-x anything-configuration RET (これも、M-x に anything が効いているので、any con くらい打つと最初の候補になる)で設定画面が出るので、Anything Command Map Prefix Key のところに設定して保存してやると、.emacsに以下が追加される。
(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(anything-command-map-prefix-key "\C-c\C-f"))

フォント

さて、次はフォント。emacs21からemacs23にしたらウィンドウサイズがちょっと大きくなった。
emacs23の記事を読むと、TrueTypeでアンチエイリアシングでうはうはだよ~と言う記事が多いので、フォント設定をしてみることにする。
Xをまともに使っていたのは X11R4とかR5のころなので、XFree86になってXorgになってのフォント関連はまったくわからない。
xfontselとか言うコマンドは現存しているようだけれど、なんか違うっぽい。
いろいろ調べていると fc-list と言うコマンドでフォントの一覧が出るようだ。
日本語っぽいフォントは sazanami って言うやつっぽかったので、とりあえずIPAフォントInconsolata-dz と言うフォントを入れてみた。
ttf/otfファイルは、/usr/share/fonts/japanese/TrueType/ にコピーしてみた。少なくとも、Inconsolata-dz.otf を japanese に入れるのはおかしいのだが、別に問題ないだろう。
これで、fc-list に IPAフォントと Inconsolata-dz が出るようになったので、.emacs に以下を追加した。
(when window-system
  (progn
    (set-default-font "Inconsolata\-dz-9")
    (set-fontset-font (frame-parameter nil 'font)
                      'japanese-jisx0208
                      (font-spec :family "IPAMincho" :size 14 ))
    (setq default-frame-alist
	  (append
	   '(
	     (width . 80)
	     (height . 52)
	     (font . "Inconsolata\-dz-9")
	     )
	   default-frame-alist))
    ))
肝は、set-default-font と default-frame-alist の font の両方にフォントを設定すること。これをやらないと、起動時とフレームオープン時で変わってしまうのだそうだ。記事によっては、default-frame-alist の代わりに ~/.Xdefaults に書いてあるものも多かったが、私の環境では ~/.Xdefaults がなかったので。
上記はさらっと書いてあるけど、実際はフォント名の指定を間違えたりして、なかなか日本語とアルファベットの幅が揃わなくて苦労した。

auto-complete

などと寄り道をしつつ、本当に今回やりたかったコード補完に進む。
一つ前のプロジェクトで、auto-complete.el と言うものを使って PHP のコードを補完していたので、今回もそれを使う。
auto-complete-1.3.1.tar.bz2を持ってきて、make install でインストールできる。インストール先を聞いてくるので、/usr/local/share/emacs/site-lispとか入れる
.emacs に以下を追加すると、auto-completeが有効になる。
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "/usr/local/share/emacs/site-lisp/ac-dict")
(ac-config-default)
標準の設定で、c++-mode 等では auto-complete-modeが有効になるようだ。
auto-completeのマニュアルを読んでいると、ac-sources に補完の情報源が追加できるようで、その中に Semantic を使ったC/C++でメンバー名補完と言うものを見つけた。
これこそ今回欲しかったもののように思えたので、マニュアルのリンク先を見ると、CEDETと言うemacs用の開発環境(?)の一部らしいことがわかった。
さっそく cedet-1.0と言うのを持ってきてインストールしてみたが、実はemacs 23.2 からは標準で入っていたと言うことが後でわかった。
両者は微妙に違う(semanticdbの作成場所が違う)ようで、emacs 23.2 を使っているのであればわざわざ別途 cedet-1.0 を入れるのは有害っぽい。
.emacs に
(require 'cedet)
と入れて、さらに c++-mode-hook に指定した関数の中に
  (semantic-mode 1)
  (setq ac-sources (append ac-sources '(ac-source-semantic)))
とか入れてやると、auto-complete の補完時に semantic の解析結果が追加されるようになるらしい。

anythingもauto-completeも、ちゃんと理解してsourcesを追加してやればどんどん強力になりそうだけど、まずは入り口と言うことでエントリを起こしてみた。
2010年12月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

このアーカイブについて

このページには、2010年12月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2010年11月です。

次のアーカイブは2011年4月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.1.1