2007年9月15日土曜日

Emacsでファイルを開くとき、前回開いた位置を復元する

 ファイルを開くとき、前回作業していた位置から続きを再開したいですよね。
~/.emacsに以下を追記します。
;====================================
; セッション
;====================================
;Emacsを終了してもファイルを編集してた位置や
;minibuffer への入力内容を覚えててくれます。
(when (require 'session nil t)
(setq session-initialize '(de-saveplace session keys menus places)
session-globals-include '((kill-ring 50)
(session-file-alist 500 t)
(file-name-history 10000)))
;; これがないと file-name-history に500個保存する前に max-string に達する
(setq session-globals-max-string 100000000)
;; デフォルトでは30!
(setq history-length t)
(add-hook 'after-init-hook 'session-initialize))

2007年9月13日木曜日

Emacsで複数のウィンドウを開いた状態を記憶しておき、いつでも復元できるようにする

 例えば、Aとういう作業をしていて、そのAの作業が複数のウィンドウを開いてする作業で、それぞれのウィンドウは自分に使いやすい様に微妙なサイズで開かれている。そして、一旦Aの作業を中断して別のBという作業をしなければいけなくて、新規にBのためのウィンドウを開いて作業し、作業が終わって、Aの作業に戻るとき、いちいち複数開いていたウィンドウを開きなおし、サイズも一つ一つ微調整しなければならない。
 これははっきり言ってかなり面倒です。そこで、ウィンドウの状態を記憶させておき、その状態に素早く復帰できる機能があれば、複数のプロジェクトをスイッチを切り替えるがごとく素早く行ったり来たり出来ます。
 複数のウィンドウ状態を維持して作業している人には超お薦めです。

window.elを使います。標準で入っていると思いますが、入っていない場合は、
sudo apt-get install emacs-goodies-el
として導入し、~/.emacsに以下を追記します。
;;====================================
;;; 分割したウィンドウ状態を保存・復元する
;;===================================
;; デフォルトは C-c C-w
(require 'windows)
;; 新規にフレームを作らない
(setq win:use-frame nil)
(win:startup-with-window)
(define-key ctl-x-map "C" 'see-you-again)

使い方

 例.
 別のウィンドウを作りたいときは、C-c C-w 2 と押すと、下のエコー領域にスクリーンショットのようにメニューが出ますので、C を押します。

すると新たに新規ウィンドウが作成され、モード行の右側に [2] と表示されます。
 以前のウィンドウに戻りたいときは、C-c C-w 1 と押せば、以前のウィンドウ状態に復帰できます。

2007年9月9日日曜日

Emacsで全角空白、タブ、改行文字を表示させる

 定番ですね。
 二通りの方法があります。
  • まずは、font-lockをコチョコチョする場合。

~/.emacsに以下を追記します。
;====================================
;;全角スペースとかに色を付ける
;====================================
(defface my-face-b-1 '((t (:background "medium aquamarine"))) nil)
(defface my-face-b-1 '((t (:background "dark turquoise"))) nil)
(defface my-face-b-2 '((t (:background "cyan"))) nil)
(defface my-face-b-2 '((t (:background "SeaGreen"))) nil)
(defface my-face-u-1 '((t (:foreground "SteelBlue" :underline t))) nil)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)
(defadvice font-lock-mode (before my-font-lock-mode ())
(font-lock-add-keywords
major-mode
'(
(" " 0 my-face-b-1 append)
("\t" 0 my-face-b-2 append)
("[ ]+$" 0 my-face-u-1 append)
)))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)
(add-hook 'find-file-hooks '(lambda ()
(if font-lock-mode
nil
(font-lock-mode t))))

  • jaspace.elを使う場合

こちらから落としてきて~/.lisp/当たりに放り込み、~/.emacsに以下を追記します。
;====================================
;;jaspace.el を使った全角空白、タブ、改行表示モード
;;切り替えは M-x jaspace-mode-on or -off
;====================================
(require 'jaspace)
;; 全角空白を表示させる。
(setq jaspace-alternate-jaspace-string "□")
;; 改行記号を表示させる。
(setq jaspace-alternate-eol-string "↓\n")
;; タブ記号を表示。
;;(setq jaspace-highlight-tabs t) ; highlight tabs

;; EXPERIMENTAL: On Emacs 21.3.50.1 (as of June 2004) or 22.0.5.1, a tab
;; character may also be shown as the alternate character if
;; font-lock-mode is enabled.
;; タブ記号を表示。
(setq jaspace-highlight-tabs ?>) ; use ^ as a tab marker

2007年9月7日金曜日

Emacsを自分の使いやすいように色を変える

 前景色、背景色など、自分の好みに変えます。見た目は大事ですからね。
 color-theme.elを使います。いくつかのプリセットされたカラーテーマから選ぶので楽です。
 たしか標準で入っているはずです。入っていなかった場合は、
sudo apt-get install emacs-goodies-el
とするか、
sudo apt-get install emacs-color-themes
として入れておき、~/.emacsに
;====================================
; color
;====================================
(require 'color-theme)

と書いておきます。

あとは M-x color-theme-select とすれば、テーマセレクト画面になりますので、自分の好みのテーマを試してみてください。
お気に入りのテーマが決まったら、~/.emacsに以下のように書いておきます。
(color-theme-dark-blue)

私はdark-blueというテーマを使用しています。

2007年9月5日水曜日

Emacsを指定したサイズで開く

Emacsを縦横指定したサイズで、指定した座標で開きます。

~/.emacsに以下を追記。
;====================================
;フレーム位置設定(ウィンドウ)
;====================================
(setq initial-frame-alist
(append
'((top . 22) ; フレームの Y 位置(ピクセル数)
(left . 45) ; フレームの X 位置(ピクセル数)
(width . 82) ; フレーム幅(文字数)
(height . 41) ; フレーム高(文字数)
) initial-frame-alist))

しかし、~/.Xresources に以下を記述したほうが起動は早い。
! emacsの初期サイズとウィンドウ位置
! width x height + top + left
emacs.geometry: 82x41+10+0

2007年9月3日月曜日

Emacsでアンチエイリアス

コメント欄でemacsのアンチエイリアスのことを聞かれたので、いまさらながら、Emacs23でアンチエイリアスの簡単な導入メモなどをば。
 現在feistyではemacs21が提供されており、先ごろ公開されたemacs22はubuntuの次のバージョンであるGutsyで正式に提供されるようです。Gutsyは10月18日にリリースされる予定です。
ですがemacs22でも日本語のアンチエイリアスはサポートされていません。
ubuntuで他のアプリは綺麗なフォント表示なのにEmacsだけは汚いビットマップフォントだとお嘆きの方はEmacs23を導入してみましょう。ただし、emacs23は開発版ですので、その点十分に理解して使ってください。

さて、Emacs23を自前でビルドするのもいいのですが、幸いなことにしてemacs23をubuntu用にビルドしてパッケージ化してくれている人がいます。ですのでこちらにお世話になった方が楽だし便利なのでお世話になっちゃいましょう。
パッケージのありかと導入手順はこちら

導入後の基本設定。

無事インストが完了したら、~/.emacsに以下のように追記します。
; emacs23 用設定
(cond ( (string-match "^23\." emacs-version)
(cond (window-system
(set-default-font "Bitstream Vera Sans Mono-15")
(set-fontset-font (frame-parameter nil 'font)
'japanese-jisx0208
'("IPA モナー ゴシック" . "unicode-bmp"))
))))
私はemacs21と併用しているので、(cond ( (string-match "^23\." emacs-version)でバージョン判定を入れています。
設定が終わったら、emacs-snapshot-gtk として起動し、アンチエイリアス表示されていたら成功。されていなかったら、~/.Xresource に
Emacs.FontBackend: xft
を書き込んで試してみてください。



なお、複数のemacsを入れていてemacsの関連付けが変わってしまったという人は、こちらを参照してください。

2008/06/11:追記:


 ubuntu 8.04 からはリポジトリに取り込まれましたので、上記リポジトリの追加をしなくても
sudo apt-get install emacs-snapshot-gtk
でインストール出来ます。

2007年8月30日木曜日

Emacsで快適な翻訳環境を

Darが便利なので常用することに決めたのですが、日本語化されていないので、自分で適当にチマチマと翻訳することにしました。
最近のlinuxのアプリは言語に依存する部分を別ファイル形式にして、それを差し替えていろんな言語に対応できるようになっています。
この言語ファイルが拡張子poの付いたテキストファイルで、これを変換してバイナリ形式のmoファイルにし、/usr/share/locale-langpack/ja/LC_MESSAGES/あたりに放り込むことで簡単に日本語化することが出来るのです。そこで早速poファイルを編集するための環境作りを。いそいそ。

Emacsにpo-modeを


とりあえずEmacsでpoファイルを編集するためのpo-modeが入っていなかったので、
sudo apt-get install gettext-el
してpo-modeをインストール。とくに~/.emacsに設定することもなく。さっそく、Darのソースを落としてきて展開し、中のpo/ディレクトリに移動し、
cp dar-pot ja.po
としてdarの言語テンプレートから日本語のja.poファイルを作り、emacsで開いてみました。

操作方法

u次の未翻訳項目に移動
C-j元の言語をコピペする
RET項目の翻訳状態に入る
C-c C-cその項目の翻訳を終了する。
C-c C-k今いる項目の翻訳状態から抜ける。
Vpoファイルに異常が無いか確認してからタイムスタンプを修正し、上書き保存する。
s該当個所のソースコードを開く。
Epo-modeを抜ける。
な感じで。h キーで簡易ヘルプも表示されます。POファイル自体はタダのテキストファイルで、msgid "" が元の言語で、msgstr "" に翻訳した言葉を書いていきます。

ネット接続で英文を翻訳

emacsでpo-modeで翻訳できる環境にはなったけど、これだけだとつらいので、Emacs でテキスト翻訳をする Emacs Lisp パッケージ text-translator をさくっと導入します。リンク先からダウンロードしてきて ~/.lisp に放り込み、~/.emacs に以下を追記します。
(require 'text-translator)
;;翻訳キー設定
(global-set-key "\C-xt" 'text-translator)
(global-set-key "\C-x\M-T" 'text-translator-translate-last-string)
適当にC-xtにキーを設定し、おもむろに英文を範囲選択してからキーを押すと、見事に和訳された文章が表示されました。いろんな翻訳サイトに対応していて、ほかにもルー語変換も出来るそうです^^;


ん〜シームレスにemacs内で完結するというのは気持ちがいいですね。普通だったら、翻訳したい文章をコピーして、Webブラウザで翻訳サイトを開き、テキスト入力部分にコピペし、翻訳ボタンをクリック。
英和辞書なら、和英辞書ソフトをを立ち上げて、同じくコピペするという・・・これだけの作業をマウスを使ってあっちのソフトからこっちのソフトへ行ったり来たりは、何回もやっているとむきゃーとなりますね^^;

emacsから英辞郎を利用する


上のだけではアレなんで英和辞書もemacsから使えるようにします。英辞郎の辞書データは別途用意してください。
手順としては、英辞郎のテキストファイルを sdic-eijiro パッケージに含まれているスクリプトでsdic形式に変換し、sdic.elを導入する、です。

インストール

sudo apt-get install sdic-eijiro sdic
  • 辞書の変換
  • 以下手順メモ
    mkdir ~/sdic
    cd ~/sdic
    nkf -S -e EIJIRO98.TXT | perl /usr/share/sdic/eijiro.pl > eijiro.sdic
    nkf -S -e WAEIJIRO98.TXT | perl /usr/share/sdic/eijiro.pl --waei > waeijiro.sdic
    sudo ln -s ~/sdic/eijiro.sdic /usr/share/dict/eijiro.sdic
    sudo ln -s ~/sdic/waeijiro.sdic /usr/share/dict/waeijiro.sdic
    ~/.emacsに、
    (global-set-key "\C-cw" 'sdic-describe-word) ;;英辞郎で翻訳する。

    を追記して、キーバインドをC-cw に設定。試しに英単語上でC-cwしてみると見事に訳が。

ただ検索速度が遅すぎたので、sufary を導入してみました。
sudo apt-get install sufary
をした後に、再度
sudo apt-get install --reinstall sdic-eijiro
してみたところ、自動的にeijiro.sdic.arryが作成されました。結構時間がかかります。
その後特に何も設定せずともsufaryが効いているみたいで、検索速度が飛躍的に早まり、快適に使えるようになりました♪


これでemacsで快適な翻訳作業が構築完了。試しに
msgfmt -v ja.po -o ja.mo
sudo cp ja.mo /usr/share/locale-langpack/ja/LC_MESSAGES/dar.mo
してみて無事darの日本語化が成功。
  • 英文章を翻訳したい時は、
    翻訳したい箇所を範囲選択し、おもむろにC-xt
  • 英単語を翻訳したい時は、
    翻訳したい単語の上にカーソルを持っていき、おもむろにC-cw
ん〜〜〜便利だぁw

オマケの翻訳中のdar画面
●20070902追記:
apt-cache search sdic してみると、
sdic - Emacs-Lisp program to view dictionaries
sdic-edict - EDICT dictionaries for sdic (installer)
sdic-eijiro - Installer for EIJIRO dictionaries for sdic
sdic-gene95 - Installer for GENE95 dictionaries for sdic

と出てきます。ubuntuの日本語版に標準で入っているGjiten日本語辞典が使用している英和辞書の形式がEDICTなので、sdic-edictパッケージを導入すればemacsから辞書の再利用ができるかもしれません。わざわざ英辞郎を用意するなんて・・・という人にはお薦めかもしれません。