2007年12月30日日曜日

Emacsでファイル情報を表示させる

Emacsでカレントバッファで開いているファイルのプロパティというかタイムスタンプを見てみたくなったので、軽くでっちあげてみた。

~/.emacsに以下を追記。

;;;; File-Info - ファイル情報
;;;====================================
;;; 2007年12月29日(土曜日) 21:07:43 JST
;;; カレントバッファのファイル情報を表示する。
(defun file-info () "
カレントバッファのファイル情報を表示する。"
(interactive)
(if (buffer-file-name (current-buffer))
(progn
(let* ((file-name (buffer-file-name (current-buffer)))
(f-attr (file-attributes file-name))
(a-time (nth 4 f-attr)) ; 最終アクセス時刻
(m-time (nth 5 f-attr)) ; 最終修正時刻
(f-size (nth 7 f-attr)) ; ファイルサイズ
(f-mode (nth 8 f-attr)) ; ファイル属性
(mes1 (format "ファイルパス: %s\n" file-name))
(mes2 (format "最終参照時刻: %s\n"
(format-time-string
"%Y-%m-%d %H:%M:%S" a-time)))
(mes3 (format "最終修正時刻: %s\n"
(format-time-string
"%Y-%m-%d %H:%M:%S" m-time)))
(mes4 (format "ファイルサイズ: %s byte\n" f-size))
(mes5 (format "ファイル属性: %s" f-mode))
(mess (concat mes1 mes2 mes3 mes4 mes5)))
(message "%s" mess)))
nil ))

(global-set-key "\C-ci" 'file-info) ; file情報を表示する。
これでM-x file-infoC-c i でカレントバッファの絶対パス最終アクセス時刻最終修正時刻ファイルサイズ、がミニバッファに表示される。

作ってから思ったけど、なんか意味あるのかなこれ・・・orz
ファイルのタイムスタンプが知りたくて書いてみたんだけど。まあいいかw

  • 20080112追記
    ファイル属性も表示するように変更してみた。

2007年12月19日水曜日

ubuntuにDockを入れてみた

以前kiba-dockというdockを試してみたんですが、あまりにもバギーで実用に耐えず、使用するのをやめてしまいました。
Dockに関してはWindowsのほうが種類も豊富で、また完成度も高く、ubuntuでは少し残念な思いをしていたところ、Avant Window Navigatorというのを知り、試しに導入してみたところ、なかなかいい感じなので常用することにしてみました。

インストール

/etc/apt/sources.listを開いてリポジトリを追加します。
deb http://download.tuxfamily.org/syzygy42 gutsy avant-window-navigator
deb-src http://download.tuxfamily.org/syzygy42 gutsy avant-window-navigator
gpgキーの追加
wget http://download.tuxfamily.org/syzygy42/reacocard.asc
sudo apt-key add reacocard.asc
rm reacocard.asc
sudo apt-get update
そしてパッケージを入れる。
sudo apt-get update
sudo apt-get install avant-window-navigator-bzr awn-core-applets-bzr

あとはメインメニューのアクセサリにavant-window-navigatorが登録されますのでクリックで起動。
設定はメインメニューのシステム→設定→Awn managerで出来る。

現在安定して動作していて実用上なんの問題もなく使えています。



現在のデスクトップの状態。壁紙はてきとう

2007年12月16日日曜日

ubuntuのOpenOfficeでアンチエイリアス

ubuntuのOpenOfficeはメニューがビットマップフォントで表示され、本文も10ポイント程度の小さい文字はビットマップになっています。
他のアプリはアンチエイリアスの効いたアウトラインフォントなのにOOoだけがビットマップ、というのも寂しいのでこれをアンチエイリアスの効いた状態になるようにします。

メインメニューの上で右クリックし、メニューの編集を選択してクリックし、OOoの項目のプロパティを編集して、コマンドの部分に、
env SAL_EMBEDDED_BITMAP_PRIORITY=0
を追記するだけです。ooffice -writer %Uとなっていたら、
env SAL_EMBEDDED_BITMAP_PRIORITY=0 ooffice -writer %U
ですね。
これで綺麗なフォントでOOoが表示されます。

適用前


適用後


2007年12月14日金曜日

CheckGmailが動かなくなった

いつも使っているCheckGmailがログイン画面が出て、ログイン出来なくなった。
Gmailの仕様変更?
とりあえずBugらしい。

Patchを落としてきて適用して解決。やっぱり便利だね、CheckGmail

以下作業メモ

wget http://launchpadlibrarian.net/10888124/encoding.patch
cd /usr/bin
sudo patch < ~/encoding.patch

2007年12月1日土曜日

Emacsの学習過程

Emacsの使い方を学んでいくとき、みんなどんな段階を踏んでいくのだろうか。
ちょっと書き出してみた。

  1. 付属のチュートリアルをやってみる

  2. 基本的なキーバインドを必死で憶える

  3. 他人の設定をコピペする。

  4. キーバインドを変えてみる。

  5. 貼り付けた設定をちょっぴりいじってみる。

  6. フックの意味を知る。

  7. ちょっとした関数を作ってみる。

  8. ある日突然lispの素晴しさに目覚める。

  9. メジャーモードを実装する。


こんな感じ?

つーか、日本語環境の設定で最初に躓く人が多そうだけどね・・・

2007年11月21日水曜日

DDSKKで複数の辞書を追加する

WindowsのATOKで使っていたカタカナ→英語変換辞書が便利だったので、skkでも辞書の追加をしてみました。

とりあえず、顔文字辞書と、2ch用語辞書も追加w

以下のような感じで~/.skkに記述。

;; 顔文字
;; http://www.bookshelf.jp/pukiwiki/pukiwiki.php?SKK%20%BC%AD%BD%F1#content_1_5
(add-to-list 'skk-search-prog-list
'(skk-search-jisyo-file
"/home/hogehoge/skk-dic/SKK-JISYO.KAO"
10000)
t)
;; 2ch用語
;; http://omaemona.wiki.sourceforge.net/2chDic
(add-to-list 'skk-search-prog-list
'(skk-search-jisyo-file
"/home/hogehoge/skk-dic/SKK-JISYO.2ch"
10000)
t)

;; カタカナ-英語 変換辞書
(add-to-list 'skk-search-prog-list
'(skk-search-jisyo-file
"/home/hogehoge/skk-dic/katakana-eigo.jisyo.L"
10000)
t)
uim-skkのほうは複数辞書の追加は出来ないっぽい。

2007年11月20日火曜日

SKKで全角空白を入力する

DDSKKの場合

~/.skk に以下を追記
(add-to-list 'skk-rom-kana-rule-list
'("z " nil " "))

uim-skkの場合

~/.uim に以下を追記
(require-module "skk")
(define ja-rk-rule
(append '(
((("z" " "). ())(" " " " " "))
)
ja-rk-rule))

~/.uim は文字コードをeuc-jpで書いて下さい。

これで 「z 」(zキーを押してスペースキー)で全角空白が入力出来る。

2007年11月19日月曜日

ubuntuでflvファイルからmp3を抜き出す

最近は、youtube やら、ニコニコ動画やらフラッシュ形式のflvファイルが花盛りです。
見ていると、けっこう良い曲があり、かといってBGMでフラッシュを再生し続けるのは重いので音声だけを抜き出してみることにします。

抜き出しにはffmpegを使います。

インストール

sudo apt-get install ffmpeg

使い方

使い方は簡単で、hogehoge.flvからmp3を抜き出したいなら、
ffmpeg -i hogehoge.flv -vn -acodec copy hogehoge.mp3
とやると、flvファイルからmp3が抜き出せます。

これでいつでもどこでもみっくみく〜♪

参考

2007年11月18日日曜日

postfix のport25ブロッキング対策

とうとううちのISPにも迷惑メール防止のためのポート25ブロック対策が導入されました。

というわけで、しょうがないので、gmailを利用して送信できるように設定をいじってみました。

以下導入メモ

●/etc/postfix/master.cf
submission inet n       -       -       -       -       smtpd
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

の行頭の「#」を削除して有効に。

●etc/postfix/main.cf を以下のように編集

relayhost = [smtp.gmail.com]:587

# SMTPクライアントの SASL 認証を有効に
smtp_sasl_auth_enable = yes
#smtp_sasl_mechanism_filter = cram-md5, login
smtp_sasl_mechanism_filter = plain
smtp_use_tls=yes

# SMTPクライアント用テーブルの指定
smtp_sasl_password_maps = hash:/etc/postfix/isp_auth

# anonymousを不可に
smtp_sasl_security_options = noanonymous
●次に /etc/postfix/isp_auth を編集する。
[smtp.gmail.com]:587 アカウント名:パスワード
編集し終ったら、
sudo postmap /etc/postfix/isp_auth
としてdbファイルを生成。元の/etc/postfix/isp_authは、
sudo chmod 640 /etc/postfix/isp_auth
としてルート以外読まれないようにするか、削除しておこう。
最後に、
sudo /etc/init.d/postfix restart
としてpostfix を再起動して設定を反映させる。

確認

mail -s 'サブジェクト' 宛先メールアドレス
本文を入力。

終らせかたは Ctrl + D を二回押す。

無事送信出来ていたらOK

2007年11月17日土曜日

ubuntuでDNSキャッシュを有効にする

WindowsにはDNSの情報をキャッシュしてそちらを参照する機能がありますが、ubuntuには標準ではありません。
私の環境ではDNSの名前引きに時間がかかっているので、DNSキャッシュサーバー(DNSリレーともforwarderとも、キャッシュサーバーとも)を入れることにしました。

やりたいことはキャッシュなので、そのためにわざわざDNSサーバであるBINDを導入するのも大袈裟ですし、メモリもCPUも喰うということで調べてみたら、dnsmasq という軽量なDNSキャッシュサーバーソフトというまさにぴったりなものが見付かったので入れてみました。

インストール

sudo apt-get install dnsmasq resolvconf
導入は至って簡単で、他に設定することもありません。一応再起動してみて、別のPCのDNSサーバー情報をdnsmasqを入れたPCを見るように設定して試してみましたが、ちゃんと名前が引けているようです。

やっぱり名前引きがキャッシュされていると効果は覿面で、快適になりました。

参考

2007年11月16日金曜日

skk を入れてみた

最近あちこちでskkの話を聞くので、試しに導入してみました。
skk はわかりやすく言うと、日本語入力ソフトに任せている文法解析を人間がやってしまおうというものです。
つまり、紙とペンで文章を書く時と同じということですね。
文法解析を日本語入力ソフトにまかせないわけですから、送り仮名の誤変換がありません。
口語体で文章を書いていてうまく変換されずに、文節の区切りを修正する手間もありません。

自分でいちいち指定するのって面倒くさい〜と思うかもしれませんが、よく考えて下さい。
普段紙とペンで文章を書くとき、自分で漢字を書いて、送り仮名を決定しますよね。この感覚をPC上にも持ち込んだと考えれば、そう、今までの連文節変換の思考から切り替えれば、実は案外すんなりと慣れる事が出来ると思います。まぁ、その切り替えがなかなか難しいのかも知れませんが。

具体的にどんなものかは、以下の説明が分かりやすいと思います。

http://ja.wikipedia.org/wiki/SKK

以下導入メモ


とりあえず、scim-skk を入れてみました。が、辞書から登録語を削除する機能がなかったので使うのをやめました。かわりに、評判のいいuim-skk を入れてみました。
sudo apt-get install scim-uim uim-skk uim-gtk2.0
uim-skkを使うためのscim-uimブリッジを入れて、uimのGUI設定ツールを入れています。
  • GUIでの設定は、 uim-perf-gtk コマンドになります。
ついでにemacsも使っているので、DDSKKも入れました。
sudo apt-get install ddskk
DDSKKのユーザ辞書が、~/.skk-jisyo
UIM-SKKのユーザ辞書が、~/.skk-uim-jisyo
になります。それぞれ別個のファイルとして存在するので、
sudo apt-get install skktools
として辞書ツールを入れて、skkdic-expr と、skkdic-sort コマンドを使って二つの辞書をマージするスクリプトを書いて、crontabで毎回PC起動時に一回実行するように設定しました。
次にメインのラージ辞書は /usr/share/skk/SKK-JISYO.L ですが、これを最新の辞書にするために、ネットから取得するスクリプトを書いて一週間に一回更新するよう/etc/cron.weekly/に放り込みました。


使い始めてまだ一週間も立っていませんが、なかなかに面白い日本語変換ツールだと思います。ともかく変換が賢いですねー。送り仮名の変換ミスが起らないし。ミスったらそれは自分が悪いのだしw
あとは辞書にない単語があると即座に単語登録モードになるのでどんどんユーザ辞書に単語が追加されて行き、どんどん自分用にカスタマイズされて賢くなっていくのが実感できて嬉しいです。


基本的な使い方

  • DDSKKでの起動
    C-x C-j
  • カタカナ入力
    qキーでカタカナモードになる。
    shiftキーで変換モードで、最後にqキーでもカタカナに変換出来る。
  • 半角英数モード
    lキーで透過モード。つまり半角英数モードになる。
    元に戻るには、C-j
  • 全角英数モード
    Lキー
    元に戻るには、C-j

  • よく使う記号の入力は
    • 「〜」波線
      z~」で波線が入力される。

    • 「・」全角中黒
      z/」で全角中黒が入力される。

    • その他
      z- 「〜」に変換
      z. 「…」に変換
      z/ 「・」に変換
      z, 「‥」に変換
      zz 「っ」に変換
      z[ 「『」に変換
      z] 「』」に変換
      zh 「←」に変換
      zj 「↓」に変換
      zk 「↑」に変換
      zl 「→」に変換



    • 辞書登録
      辞書にない単語が入力されると自動的に「単語登録モード」になります。
      そこで「登録語」を入力する。送り仮名は入力する必要はありません。


    • 辞書から単語を削除
      削除したい単語を変換し、未確定状態で「X」キーを 押す。すると削除して良いのか聞いてくるので、 選択するだけ。



2007年11月2日金曜日

シーゲイト、ディスク容量をめぐる訴訟で払い戻しを実施へ

これって、和解しちゃダメって思うんですよね。
1K=1000byte ってのは正しい単位系なのに。

こんな無茶苦茶な裁判がまかりとおると無知な人間の声の大きいほうが正しいなんてことになりかねないわけで。

2007年10月23日火曜日

ubuntuのEvinceで日本語PDFが表示できない

evinceで日本語PDFが文字化けして表示された。
ここの手順どおりにして解決した。

evince のほうが Adobe Reader よりも軽快に動作するのでプレビューにはこっちの方がいいかも。

以下導入メモ。
sudo apt-get install evince ghostscript cmap-adobe-japan1 xpdf-japanese

sudo mkdir -p /usr/share/poppler/cidToUnicode
sudo ln --symbolic /usr/share/xpdf/japanese/Adobe-Japan1.cidToUnicode \
/usr/share/poppler/cidToUnicode/Adobe-Japan1
sudo mkdir -p /usr/share/poppler/cMap
sudo ln --symbolic /usr/share/fonts/cmap/adobe-japan1 /usr/share/poppler/cMap/Adobe-Japan1


無事日本語PDFが表示された.

2007年10月22日月曜日

ubuntuの日本語のディレクトリ名を直してみた

Gutsyにアップグレードして、Portland Projectの成果により、homeディレクトリ直下に、「デスクトップ」やら「ドキュメント」「画像」「ビデオ」などなどの日本語のディレクトリが作られるようになりました。

 これはOSに関わらず、共通のフォルダを提供しようというものでVistaやMacOSXでも同じようなフォルダ構成になっていると思います。

これはこれでありかなと。これからの初心者がubuntuに振れるときには違和感なく触れられるだろうしと。

ただ、日本語のディレクトリ名は端末から打ち込むとき、いちいち日本語入力システムを立ち上げないといけないし、だいいいち日本語入力システムが使えるとも限らないわけで、まぁ昔から使っていた人にとっては意味のないものです。

そこでこれらのディレクトリ名を英語に修正します。
端末から、
LANG=C xdg-user-dirs-gtk-update
とすれば、設定画面がますので、そのままOKボタンを押せば、これらのディレクトリ名が英語に置き換わります。
これでコンソールからのアクセスもばっちり。

2007年10月21日日曜日

Gutsy にアップデートメモ

18日に7.10 Gutsy がリリースされたのでさっそくアップデートしてみました。
ubuntu開発チームとJAチームに心から感謝を!

さて、公式サイトに手順どおりにアップデート開始。
長い時間の果てに失敗しました。orz
まあ、6.06からアップグレードし続けてきた環境なので、いろいろゴチャゴチャになっているので失敗してもおかしくはないんですけど、悲しい・・・

  • 新しいカーネルで起動失敗する
    device-mapper がエラーを吐いてドライブのマウントが失敗し起動出来なかった。調べたら、evms が悪さをしているらしいので削除して再起動。無事起動成功。

  • ネットに繋がらない
    ネットに繋がらなくなった。ping は通るのに。調べたらfirestarterが悪さをしていた。いったん削除して入れ直して解決。

  • compiz の設定
    今までberylにドライバは envy を使っていれていた環境だったので、リストラクチャドモジュールを入れてから、制限付きドライバのインストールでnvidia-glxをインストール。
    今度からXorg.confを編集せずともGUIなインターフェースで気楽に設定できるようになったので、かなり楽々と画面まわりの設定が出来た。
    メインメニューのシステム→設定→外観の設定から視覚効果でExtraでcompizが無事動いた。
    ただこのままでは細かい設定が出来ないので、
    sudo apt-get install compizconfig-settings-manager
    で設定ツールを導入。berylほどではないがかなりの設定ができるように。
    あとは beryl-manager みたいなトレイアイコンツールがあればいいんだがubuntuにはまだリポジトリにはないみたいだ。

  • itunesサーバが動かない
    mt-daapd とmdns-scan を使っているのだけれど、mdns-scanfirestarterが有効になっていると動かない。なんでやねん。とりあえずfirestarterを無効にすることで回避。

  • homeディレクトリに日本語のディレクトリが勝手に出来ていた
    「テンプレート」「ドキュメント」「ビデオ」「音楽」「画像」「公開」などの日本語のディレクトリが出来ていた・・・なんじゃこりゃ。マイクロソフトの製品じゃあるまいし。日本語入力システムがなかったらどうアクセスしろというんじゃーぼけ〜
     どうやら Portland という標準化規格ができてそれのせいらしい。ようはどのディストリでもWindowsでもMacOSXでも共通に「ドキュメント」とか「ビデオ」とか「画像」とかのディレクトリにアクセスできる手段を提供しようということらしい。
    大きなお世話だ。
    ~/.config/user-dirs.dirsの中に設定が書いてある。ここを修正すればいいみたい。

  • フレームバッファがblacklist入り
    フレームバッファモジュールがロードされているとハイバネートがうまくいかないらしく、blacklist入りになっていた。直接コンソールを使う機会もあまりないから、まぁいいか。

  • Firestarterがよく落ちる
    Firestarterがコアダンプする。なんだろうねー不安定だよね。


とまあこんな感じでトラブりましたが無事動いていますw
でもpython2.4とか残ってて、削除したけど、他にも使ってないファイルが残ってそうだなあ。
次の? LTS版を入れるときはクリーンインストールですね。

ちなみに劇的にアプリの起動が早くなりました。なんだこれは〜w compiz も快適に動作しているようで今後に期待。
もうしばらくして様子をみたらemacs22を入れてみるかな。

2007年10月5日金曜日

Emacsのアウトライン機能を使いこなす

 論文を書くときや小説やシナリオを書くときなど、ある程度構造的な文章を書く場合、アウトライン機能は大変便利な機能です。これがないと作業出来ないという人もいるでしょう。

 ubuntuでも独立したアウトラインプロセッサソフトもいくつかありますが、エディタに内蔵されているアウトライン機能は普通のテキストでシームレスにアウトライン機能が利用できるのが最大の特徴でしょう。反対にアウトライン専用ソフトは独自のファイル形式でエディタ内蔵よりもはるかに複雑な装飾が出来るものが多いです。

 Emacsでアウトライン機能を使うには、M-x outline-mode とすることでアウトラインモードになり、各見出しが色付されて表示されます。

 emacsではアウトラインの見出しは行頭に「」アスタリスクを付けることで見出しとします。
 *見出し
 **小見出し
 ***小小見出し
こんな感じですね。

 もちろんこの見出し記号は自由に変えることも可能です。

基本的な操作方法

すべての本文を折り畳むC-c C-t
最上位の見出しだけにするC-c C-q
すべてを展開するC-c C-a
カーソル位置の見出しの本文を折り畳むC-c C-d
カーソル位置の見出しの本文を展開するC-c C-s

これぐらい覚えておけば大丈夫でしょう。

●見出しだけを別ウィンドウに表示しておきたい

 アウトライン機能ですから、見出しだけを別ウィンドウに表示させ、常に文章全体の構造を把握しておきたい、という場合もあるでしょう。
 そういうときは、間接バッファ機能を使います。~/.emacs に以下を追記します。

(defun outtree ()
"outline-tree
見出しを別ウィンドウで表示させる.
by yama @ Thu Mar 29 23:37:45 2007"
(interactive)
(if 'outline-mode (outline-mode))
(hide-body)
(let* ((basename (princ (buffer-name)))
(newtmp (concat basename "-tree")))
(if (get-buffer newtmp)
(unless (get-buffer-window newtmp)
(split-window-vertically 10)
(switch-to-buffer newtmp)
(other-window 1))
(progn
(make-indirect-buffer (current-buffer) newtmp)
(split-window-vertically 10)
(switch-to-buffer newtmp)
(if 'outline-mode (outline-mode))
(hide-sublevels 1)
(other-window 1)))))
M-x outtree で別ウィンドウに見出しだけが表示されます。


●もうちょっと便利に

Ee - Emacs Information Manager というelispパッケージがあるのですが、こいつは何でもかんでも階層化して表示しちゃおうというもので、その中に ee-outline というのがあります。
 階層化して表示するわけですから、とうぜんoutline-modeとの相性もいいです。

インストール

ubuntuのリポジトリにはないみたいなので直接取ってきます。
wget http://www.jurta.org/emacs/ee/emacs-ee-0.0.2.tar.gz
tar zxvf emacs-ee-0.0.2.tar.gz
mv emacs-ee-0.0.2 ee
mv ee ~/.lisp
として~/.lisp/ee に放り込み、~/.emacs に以下を追記してloadpathを通します。
(setq load-path (cons "~/.lisp/ee" load-path))
そしてさらに~/.emacsに以下を追記します。
;;====================================
;;; Ee - Emacs Information Manager
;;===================================
(require 'ee-autoloads)

;; アウトラインの該当個所を表示
;; ee のアウトライン表示で該当箇所を別ウィンドウに表示できる.
(defadvice previous-line
(after ee activate)
(if (and (eq major-mode 'ee-mode)
(string-match "ee-outline" (buffer-name (current-buffer))))
(ee-outline-display-buffer)))

(defadvice next-line
(after ee activate)
(if (and (eq major-mode 'ee-mode)
(string-match "ee-outline" (buffer-name (current-buffer))))
(ee-outline-display-buffer)))

(defadvice ee-view-record-select-or-expansion-show-or-hide
(around ee-delete-window activate)
(if (and (eq major-mode 'ee-mode)
(string-match "ee-outline" (buffer-name (current-buffer))))
(progn
ad-do-it
(delete-other-windows))
ad-do-it))

(defun my-ee-outline ()
"事前にoutline-modeを起動してからee-outlineにする"
(interactive)
(outline-mode)
(ee-outline))

;; C-c o で起動。
(global-set-key "\C-co" 'my-ee-outline)

使い方

  • C-c o でアウトラインのツリー表示が表示されます。
  • カーソルを動かすことで画面が縦に分割され、該当する部位が逐次表示されます。
  • カーソルの左右で折りたたみ、展開。
  • 該当見出しでリターンキーでその場所を開きます。あるいは o キーでフォーカスが移動します。
  • h キーでヘルプが出ます。


もっともっと便利にっ

これ以上の便利さを追求すると、アウトライン機能のみならず、ToDoやスケジュール、リンク機能を備え、一人WiKiまで出来ちゃう org-mode がいいかもしれません。アウトライン機能のキー設定も TAB キー一つで折り畳み、展開が行え、各見出しの並び替えなども楽にできるようになっています。

導入は emacs22 以降なら標準で入っていますので、 M-x org-mode とするだけです。

詳しい使い方は、何しろ機能が豊富過ぎて説明しきれません。幸いマニュアルを翻訳してくれている方がいますのでそちらを参照してください。

2007年10月3日水曜日

emacsからbloggerへ投稿するg-clientを試してみる

Emacsからbloggerに投稿したくて、GoogleのAPIを使えるemacsのフロントエンド、g-client
を試してみる。
まずは、g-client.tar.bz2 を落としてきてmakeしたが、g-cus-load.elが生成されなかった。
ので、svn から先端を取ってきてmakeし、~/.emacsにpathを追記した。以下手順。
svn export http://emacspeak.googlecode.com/svn/trunk/lisp/g-client/
cd g-client
make
以下を~/.emacsに追記。
(load-library "g")
(setq g-user-email "gmailのアカウント")
(setq gcal-user-email "カレンダーのアカウント")
(setq gblogger-user-email "bloggerのアカウント")
(setq browse-url-browser-function 'w3m-browse-url)
としたんだが、動かない。どうやらcurlと、elispのnxml-mode を使っているみたいなので、
sudo apt-get install cur nxml-mode
としてインスト。あとemacs-w3mも必要。
M-x gblogger-blog
とすると、パスワードを聞かれるので入力。自分のblogが表示されるので、postlinkのurlをコピー。
M-x gblogger-new-entry
で投稿feedを聞かれるので、ここにペースト。
あとはタイトルを書き、本文を書いて、 C-c C-c すれば投稿に成功していた。
が、いまいち使いにくいな・・・いちいち投稿URLを入れないといけないのかな。
ラベルはどうやって付ければいいのかな。
あとカレンダーが動かないw

2007年10月2日火曜日

bashの履歴に日付も加える

小ネタです。

bash3 からの機能なのですね。知らなかった。
やり方は~/.bashrc に、
HISTTIMEFORMAT="%y/%m/%d %H:%M:%S : "
と書くだけ。

これで tcsh みたいに履歴にそのコマンドを実行した時間も記録されるようになる。これをやると、前回のコマンド実行時からどれくらいコマンドを打っていないかということが、つまり仕事をサボっているということがバレてしまうのだぁっw

あとは、履歴に残したくないコマンドの指定なんかもできる。
HISTIGNORE=ls:history
とかしておけば、指定したコマンドが履歴に残らなくなる。

履歴はデフォルトでは500行だが、
HISTSIZE=1200
とか書けば1200行保存されます。

2007年10月1日月曜日

bashの補完機能を拡張してみた

 bashにはインテリジェントな補完機能があり、ubuntuだとデフォルトでさまざまな補完定義の書かれた bash_completion が有効になっているはず。
 なっていなければ ~/.bashrc に、
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
と追記しておこう。
 この便利な補完機能だけど、自分で設定できる。が、ものすごく賢く設定できるだけに /etc/bash_completion 見てもよく分からないw

ちょうどnkfのロングオプションをよく使うんだけど、よく忘れるw のでいい機会だったので試しに作ってみた。

# nkf completion

_nkf()
{
local cur

COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}

# options completion
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -o default -W '-j -s -e -w -J -S -E -W \
--help --version --overwrite --jis --euc --sjis \
--utf8 --utf16 --mime --base64 --guess \
--hiragana --katakana --katakana-hiragana' -- $cur ) )
else
COMPREPLY=( $( compgen -o default $cur ) )
fi
}
complete -F _nkf nkf
のような感じで、~/.bashrc に追記。
source ~/.bashrc
で即反映させて、試しに、
nkf --
と打ってTABキーを押すと、
~$ nkf --
--base64 --jis --sjis
--euc --katakana --utf16
--guess --katakana-hiragana --utf8
--help --mime --version
--hiragana --overwrite
とロングオプションが補完候補として表示される。便利だね♪

上のは適当に書いただけなので誰かリファインして本家にマージしてください><

しかしあれだね、bashの補完機能を自分で作ることに関しての情報がほとんど無いね。あっても bash_completion に関する情報ばかり。bashの補完定義を自分でどんどん簡単に作れればどんどん便利になっていくね。

2007年9月29日土曜日

キーバインディングを変えてみた

HHK左◇ダイアモンドキーMETAキーに。
左AltキーSuperキーに。

METAキーはEmacs使っていると多用するので、なるべく押下しやすいスペースバーの隣に。
Altキーはあまり使わないし、右Altキーもあるしで、Superキーに変えてみました。
Berylのキーボードショートカットを見るとやたらとSuperキーが出てきたので。今までAlt+Tabでタスク切り替えしてたのですが、Super+Tabでタスク切り替えしたら、なんか、リング上に回転して切り替えがw

以下メモ。

まず、xevコマンドでで左◇キーと左Altキーのキーコードを取得。
それぞれ、13164と分かったので、~/.Xmodmapに記述。
clear mod1
keycode 129 = Zenkaku_Hankaku Kanji
keycode 131 = Meta_L
keycode 64 = Super_L
add mod1 = Meta_L Alt_L
あとは、
xmodmap ~/.Xmodmap
として再読み込み。無事変更完了。

ああ、どんどん深みにハマっていく気が・・・orz
ところでWindowsのWinキーってlinuxだと何キーになるんでしょうかね? Superキー?

参照

2007年9月28日金曜日

Emacsで行の折り返し表示をON/OFFする

通常は一行が長すぎると右側で折り返され、画面に収まって表示されます.
ですが/etc/fstab ファイルとか、syslogファイルなど、一行1レコードのようなファイルを編集する場合、折り返し表示されるとかえって見にくくなります.

ということで~/.emacsに以下を追記します.

;;====================================
;;; 折り返し表示ON/OFF
;;====================================
(defun toggle-truncate-lines ()
"折り返し表示をトグル動作します."
(interactive)
(if truncate-lines
(setq truncate-lines nil)
(setq truncate-lines t))
(recenter))

(global-set-key "\C-c\C-l" 'toggle-truncate-lines) ; 折り返し表示ON/OFF
これで、C-c C-l とするだけで、折り返しするしないをトグル動作する事が出来ます。

2007年9月27日木曜日

Emacsで色いろいろなの

小ネタ。
たとえば、HTMLを編集していてちょと色を変えたいとき、色の16進表記が分からない、とか、Emacsの色が気に入らないのでカスタマイズしたいが、あの色の名前なんだっけ? とかの時に役立つ〜
M-x list-colors-display
で色見本が表示されます。
 Emacs23だと同時に16進表記も出ます。



 他に、color-selection.elというelispもあり、こちらは色名は出ませんが、emacs21でも16進で表示され、リターンキーで選択した色を張り付けることが出来ます。ただ、jaspace.elと相性が悪く、jaspace.elが有効になっていると色が表示されませんでした。

2007年9月26日水曜日

Emacsで見たままの状態をHTMLに変換する

以前に「"」とか、「<」とかのメタ文字をエスケープするだけのモノを作ったんですが、もっと便利な物があったんですね。知らなかったorz

ということで、emacsでfont-lockでコードなんかを色付けして表示している場合、その体裁ごとHTMLに変換してくれるelisp.

htmlize.el


 emacsの強調表示や色付けされた見たままの状態をCSS付きでHTMLに変換してくれます。
 変換は、選択された範囲や、Buffer全体、ファイルから行えます。
 ですがHTMLで変換されるので、部分引用したいときは不便を感じる。

face2html


 同じく見たままをHTMLに変換してくれる。<pre>で囲んだHTMLを吐き出してくれます。
 コードなんかをポトペタと張り付ける時にはこちらの方がいい感じです。


便利だね。Emacs♪

2007年9月25日火曜日

Emacs23でmewがうごかない

小ネタ。
emacsで動くメールソフトのmewが All members of mew-thread-indent-strings must have the same length なメッセージを出して動かない。
~/.emacs に以下を追記することで動いた。

(if (>= emacs-major-version 23)
(setq mew-thread-indent-strings ["+" "+" "|" " "]))
スレッド表示の時のインデントを表す記号文字の設定みたいだけど、なんだろうね。文字コードのせいなのかな。

2007年9月24日月曜日

バックアップ時のキャッシュディレクトリの挙動について

 バックアップする時に悩むのが Cache ディレクトリの取扱い。homeディレクトリを丸ごとバックアップしたいときなんて、例えば、firefoxのキャッシュフォルダや、各種画像のサムネイル、テンポラリフォルダなどなど。
 Dar で、~/.darrc に除外したいディレクトリを逐一指定しておくのもいいけれど、 Cache Directory Tagging Standard という仕組みを使えば簡単にキャッシュディレクトリを除外できる。

仕組みは簡単で、キャッシュディレクトリだと認識するディレクトリの中に、CACHEDIR.TAGというファイルを作り、ファイルの中身を、
Signature: 8a477f597d28d172789f06886806bc55
# This file is a cache directory tag created by (application name).
# For information about cache directory tags, see:
# http://www.brynosaurus.com/cachedir/
と書いておけばいい。最初の一行だけで事足りるだろうけど。ようするにキャッシュディレクトリにタグ付けをしておくということですね。

あとは例えばDarならバックアップのさいに、 -, オプションを付ければ CACHEDIR.TAG のあるディレクトリは除外してバックアップしてくれる。
ほかにもtar cpiorsync なども対応しているので、ガンガン利用していきましょう。

いやぁ、linuxってかゆいところに手が届く的な便利さがありますね♪

以下、作業メモ。
find ~/ -iname cache -print | wc
で23個ものcacheディレクトリがあったので、
#!/usr/bin/ruby
#
#

name= "set_cachetag.rb"
tt1 = "Signature: 8a477f597d28d172789f06886806bc55\n" +
"# This file is a cache directory tag created by "
tt2 = "# For information about cache directory tags, see:\n" +
"# http://www.brynosaurus.com/cachedir/ \n"
tagtext = tt1 + name + "\n" + tt2

while gets
if File.directory?($_.chop) then
cpath = $_.chop + "/CACHEDIR.TAG"
unless File.exist?(cpath) then
print $_
tag = File.new(cpath , "w")
tag << tagtext
tag.close
end
end
end
とrubyスクリプトを書いて、
find ~/ -iname cache | ruby set_cachetag.rb
としていっきに CACHEDIR.TAG ファイルを生成した。楽だ♪

2007年9月23日日曜日

Emacsでタイピング練習

plog さんのところで昔懐かしい TRR の話題があったので、試しに入れてみました。
リポジトリに入っているのは trr19 で、emacs22以降で動きません。trr19を修正したtrr21というのがあったので導入してみました。

以下導入メモ

wget http://ftp.opaopa.org/pub/elisp/trr21.tar.gz
tar zxvf trr21.tar.gz
cd trr21/
エディタでMakefileを編集し、sedとgrepのパスを修正。
# Name of your sed
#SED = /usr/bin/sed
SED = /bin/sed

# Name of your grep
#GREP = /usr/bin/grep
GREP = /bin/grep
make all したら poe がないと言われたので、力業で作業ディレクトリにコピー^^;
cp /usr/share/emacs/site-lisp/apel/poe.el .
cp /usr/share/emacs/site-lisp/apel/product.el .
cp /usr/share/emacs/site-lisp/apel/pym.el .
cp /usr/share/emacs/site-lisp/apel/apel-ver.el .
cp /usr/share/emacs/site-lisp/apel/static.el .
make all

無事make成功。そのままインストール。
sudo make install
~/.emacs に以下を追記。
(autoload 'trr "/usr/local/share/emacs/site-lisp/trr" nil t)
emacsを立ち上げて、M-x trr で無事emacs23で起動成功。


参照

2007年9月22日土曜日

Emacsのとりあえず最低限の環境を整える





 ubuntuでemacsを使用するにさいして、最低限の環境を構築します。

 たまに、emacsはデフォルトの設定が最低だという人がいますが、あたりまえでしょう。別にemacsはlinuxのためのエディタというわけではありませんし、WindowsやMacでもUNIXのためのエディタというわけでもありません。
EmacsはEmacsです
 初期のEmacsが動いたマシンにはカーソルキーがありませんでした。ですからカーソルの移動はCtrl + P,N,B,Fでした。最近のキーボードではカーソルキーが付いているのは当たり前になっていますが、私のキーボードにはファンクションキーもカーソルキーもありません・・・べ、別に不便じゃないんだからっ

 と、ともかく、Emacsはおそらく世界でもっとも多くのプットフォームに移植されたプログラムでしょう。そのEmacsがすべてのプラットフォーム用の設定を同梱するのは無意味ですし非合理的です。そんな作業はディストリビュータのお仕事でしょう。例えばvineでは最初からかなりカスタマイズされたEmacsが用意されているらしいです。ubuntuでは最適な初期設定は人によって違うからということで素のままのEmacsが用意されています。
 ですがさすがに日本語設定もされていないのは不便と感じたのかubuntu-jaチームが日本語設定導入パッケージを用意してくれています。

 とはいえEmacs+日本語環境、だけではあまりにもそっけなく、ぶっちゃけ使いにくいものです。そこで、とりあえず最低限、何が最低限必要なのかは置いておくとして、それなりに便利な環境構築をまずはやってみましょう。


 はじめに、
各種設定は、~/.emacsファイルに書いていきます。また、elispファイルは~/.lisp/ディレクトリにに入れることを前途に説明していきます。あらかじめ~/.emacs ファイルの先頭付近に、
;===================================
;; load path
;===================================
(setq load-path (cons "~/.lisp/" load-path))
として、~/.lisp/へのパスを設定しておいてください。~/.lisp/以外に格納したい場合は読み替えてください。

日本語環境


 日本語環境は、
sudo apt-get install emacs-env-ja
すれば日本語環境は一通り揃えてくれるはずです。試していないので分かりませんが。
一応参考程度に私が使っている日本語まわりの設定を貼り付けておきます。

 日本語入力

;===================================
; Language
;===================================
(if (string-match "^21\." emacs-version)
(require 'un-define))
(set-language-environment "Japanese")
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8-unix)
;(set-buffer-file-coding-system 'utf-8)
(setq file-name-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
;(set-clipboard-coding-system 'utf-8)

;===================================
; Anthy
; CTRL-\で入力モード切替え
;===================================
(load-library "anthy")
(setq default-input-method "japanese-anthy")
(setq anthy-accept-timeout 1) ;;emacs23用。ディレイ短縮。動作を機敏に。
;ローマ字変換外部テーブル読み込み。
;(if (file-exists-p (expand-file-name "~/.emacs.anthy"))
; (load (expand-file-name "~/.emacs.anthy") nil t nil))


 日本語フォント

;===================================
; font
;===================================
; 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"))
'("IPAGothic" . "unicode-bmp"))
; '("Yutapon coding Heavy" . "unicode-bmp"))
; '("Hiragino Gothic" . "unicode-bmp"))
))))

; emacs21 用設定
(cond ((string-match "^21\." emacs-version)
(cond (window-system
(create-fontset-from-fontset-spec
"-shinonome-gothic-medium-r-normal--18-*-*-*-*-*-fontset-18")
(set-default-font "fontset-18")))))


最近開いたファイル、を出来るようにする




バッファ一切り替えを使いやすくする



バッファ一覧をまともなものに

 デフォルトのバッファ一覧は、ほんとにタダ一覧表示するだけなので使いにくいだけです。これを変えましょう。
~/.emacsに以下を追記。
(global-set-key "\C-x\C-b" 'bs-show) ;;bs-showでバッファ選択する。


ミニバッファを使いやすくする



Shift + 矢印キーで範囲選択できるようにする

~/.emacsに以下を追記.
(pc-selection-mode) ;;shift+矢印キーでの範囲選択


選択範囲に色を付けて見た目わかりやすくする

~/.emacsに以下を追記.
(transient-mark-mode 1) ;;選択範囲に色を付ける


ファイルを開くとき、前回開いた位置を記憶して復元する



複数のフレームを開いた状態を記憶しておき、いつでも復元できるようにする



全角・タブ文字を見えるようにする



行番号を表示させる


 これも定番です。なくてもあまり問題ないですけどね。私は使わなくなりました。
 setnu.elを使います。
こちらから落としてきて~/.lisp/当たりに放り込み、~/.emacsに以下を追記します。
 F12キーを押すことで行番号表示がトグル動作します。
;;====================================
;;行番号表示モード
;====================================
(autoload 'setnu-mode "setnu" nil t)
(global-set-key [f12] 'setnu-mode)


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



色分けをする

 色分けがないとね。emacs22以降からはデフォルトでONになっているようです。
~/.emacsに以下を追記。
(global-font-lock-mode t) ; 文字の色つけ


行間を設定する

~/.emacsに以下を追記。
;====================================
; 行間設定
;====================================
;;整数で指定するとピクセル数で、少数で指定すると
;;行の高さに対して相対値で設定されます。
(setq-default line-spacing 0.1)
数値を変えて自分にあった行間を調整してみてください。

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




カーソル移動の挙動を変える


 論理行単位ではなく、物理行(見たまま)単位で移動出来るようにします。
 physical-line.elを使います。標準ではないので、こちらから落としてきて~/.lisp/にでも放り込んでおきます。

;====================================
; カーソル移動設定
;====================================
;カーソル移動を論理行ではなく、物理行(見たまま)単位で移動する。
(require 'physical-line)
(setq-default physical-line-mode t)
;; dired-mode は論理行移動のままにする.
(setq physical-line-ignoring-mode-list '(dired-mode))


スクロール行数を変える

 デフォルトは半ページごとにスクロールです。これを4行ずつスクロールするようにします。1行毎だとうちのPCでは能力不足で無理だったorz
~/.emacsに以下を追記。
;====================================
; スクロール設定
;====================================
(setq scroll-conservatively 35
scroll-margin 0
scroll-step 4) ;4行ずつスクロールする


その他

 それほど重要でもないもの、瑣末なものをいくつか。
~/.emacsに以下を追記します。
;====================================
; Misc
;====================================
(if (string-match "^21\." emacs-version)
(display-time)) ;;時計を表示
(if (string-match "^21\." emacs-version)
(setq line-number-mode t) ;;カーソルのある行番号を表示
(setq column-number-mode t) ;;桁番号を表示
(setq frame-title-format ;;フレームのタイトル指定
(concat "%b - emacs@" system-name))
(setq inhibit-startup-message t) ;;起動時のメッセージを消す
(set-scroll-bar-mode 'right) ;;スクロールバーを右側に
(show-paren-mode 1) ;; 対応する括弧を光らせる(グラフィック環境のみ作用)
(tool-bar-mode 0) ;;ツールバーを消す。
(menu-bar-mode 0) ;;メニューバーを消す
(auto-compression-mode t) ;;圧縮されたファイルも編集&日本語infoの文字化け防止
(fset 'yes-or-no-p 'y-or-n-p) ;;"yes or no"を"y or n"にする
(setq browse-url-browser-function 'browse-url-firefox) ;;デフォルトのブラウザ設定




げっぷ

 とりあえず、こんなものでどうでしょうか。私にとってはこれらすべてを設定してとりあえず最低限とします。
 ほんとはこの他にもキーバインドを色々いじくっていますがw
C-h はデフォルトではヘルプキーですが、バックスペースキーに切り替えたりとか。

2007年9月19日水曜日

Emacsのバッファ切り替えを使いやすく

 iswitchb を使います。ないと生きていけません。
 C-xb で切り替えたいバッファを入力して切り替えますが、これをインクリメンタル補完してくれます。
iswitchb は標準で入っていたはずですので、~/.emacsに以下を追記しておくだけで機能します。。


;;;====================================
;;;; Buffer 設定
;;;===================================
;;; iswitchb は、バッファ名の一部の文字を入力することで、
;;; 選択バッファの絞り込みを行う機能を実現します。
;;; バッファ名を先頭から入力する必要はなく、とても使いやすくなります。
(iswitchb-mode 1) ;;iswitchbモードON
;;; C-f, C-b, C-n, C-p で候補を切り替えることができるように。
(add-hook 'iswitchb-define-mode-map-hook
(lambda ()
(define-key iswitchb-mode-map "\C-n" 'iswitchb-next-match)
(define-key iswitchb-mode-map "\C-p" 'iswitchb-prev-match)
(define-key iswitchb-mode-map "\C-f" 'iswitchb-next-match)
(define-key iswitchb-mode-map "\C-b" 'iswitchb-prev-match)))
これで、バッファ切り替えの時に、バッファの名前の一部分だけを入力すれば、即座に候補が絞られて表示され、ストレスなく切り替えが可能に!

20080112追記

バッファ切り替えの時に候補に出したくない、不必要なバッファを除外することが出来ます。
~/.emacs に以下のように書いていきます。

;;; iswitchbで補完対象に含めないバッファ
(setq iswitchb-buffer-ignore
'(
"*twittering-wget-buffer*"
"*twittering-http-buffer*"
"*WoMan-Log*"
"*SKK annotation*"
"*Completions*"
))
これですっきりに。

2007年9月17日月曜日

Emacsのミニバッファを使いやすくする

 M-x 時のミニバッファでコマンドの補完を行います。ないと生きていけません。
端末での入力補完と同じく、M-x hogehoge と関数名の補完をしてくれます。
 mcomplete.elを使います。
さらに、補完候補をよく使う候補を優先して表示させるmcomplete-history.elも併用します。それぞれリンク先から落としてきて、~/.lisp/あたりに入れておきます。
(setq load-path (cons "~/.lisp/" load-path))
としてパスを通しておくのを忘れないようにしましょう。パスを通したら、 ~/.emacsに以下を追記します。
;====================================
; ミニバッファ設定
;===================================
;ミニバッファで M-x 時のインクリメンタル補完
(require 'mcomplete)
;さらによく使うヒストリを優先させる
(load "mcomplete-history")
(turn-on-mcomplete-mode)

;ファイルを開く時に,カーソルキーだけで,ファイルを選択
;カーソル上下で従来のヒストリ。ctrl+P,ctrl+nでファイル名補完
(require 'cycle-mini)
(define-key minibuffer-local-map [up] 'previous-history-element)
(define-key minibuffer-local-completion-map [up] 'previous-history-element)
(define-key minibuffer-local-must-match-map [up] 'previous-history-element)
(define-key minibuffer-local-ns-map [up] 'previous-history-element)
(define-key minibuffer-local-ns-map [down] 'next-history-element)
(define-key minibuffer-local-map [down] 'next-history-element)
(define-key minibuffer-local-completion-map [down] 'next-history-element)
(define-key minibuffer-local-must-match-map [down] 'next-history-element)
これでいちいち長ったらしい関数名を覚えなくても大丈夫♪

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 ?&gt;) ; 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から辞書の再利用ができるかもしれません。わざわざ英辞郎を用意するなんて・・・という人にはお薦めかもしれません。

2007年8月29日水曜日

Darの簡単な使い方

Darの簡単なチュートリアル のつもり

Darについてはこちら

  1. テスト用の作業ファイルを作る
    mkdir dar-test
    cd dar-test
    touch aaa.txt bbb.txt ccc.txt
    echo "aaaaaaaaaaa" > ccc.txt
    cd ~/

  2. バックアップしてみる
     dar -v -R ~/ -c test-full -g dar-test/
    -cはアーカイブ名を指定します。
    -vは詳細表示してくれます。-Rはバックアップする時のルートディレクトリを設定します。-gはバックアップするディレクトリを指定します。

  3. 確認する

    バックアップが成功すると、-cでつけた名前の後に.1.darが付いたファイルが作られます。
    dar -l test-full
    で、バックアップされたリストが表示されます。

  4. ファイルを編集してみる。
    rm dar-test/aaa.txt
    echo "bbbbbbbbb" >> dar-test/ccc.txt
    などとして、ファイルを編集して見ます。

  5. 差分バックアップしてみる

    前回のバックアップ以降更新されたファイルをバックアップしてみましょう。
    dar -R ~/ -c test-diff -A test-full -g dar-test
    -Aオプションで、基準となるバックアップファイルを指定します。
    test-fullを基準としてそれ以降に更新されたファイルをtest-diffというファイルにバックアップします。

  6. 差分されたファイルを確認する
    dar -l test-diff
    きちんと更新されたファイルがバックアップされ、削除されたファイルには削除マークがされていますね。
    dar -l test-diff -as
    -asオプションを付けると、前回以降更新されたファイルだけを表示することが出来ます。

  7. リストアしてみる

    rm dar-test/* して、dar-testディレクトリ内をいったん空にしたら、いかのコマンドを実行してみてください。
    dar -x test-full

    1. 確認してみる
      ls -l dar-test
      合計 4
      -rw-r--r-- 1 hoge hoge 0 2007-08-27 23:40 aaa.txt
      -rw-r--r-- 1 hoge hoge 0 2007-08-27 23:40 bbb.txt
      -rw-r--r-- 1 hoge hoge 12 2007-08-27 23:40 ccc.txt
      削除したaaa.txtがあることや、ccc.txtのサイズに注目してください。

  8. 差分ファイルをリストアしてみる
    dar -wa -x test-diff
    -waは問い合わせを抑制します。
    1. 確認してみる
      ls -l dar-test
      合計 4
      -rw-r--r-- 1 hoge hoge 0 2007-08-27 23:40 bbb.txt
      -rw-r--r-- 1 hoge hoge 22 2007-08-27 23:59 ccc.txt
      削除したaaa.txtが削除されています。ccc.txtも編集したサイズになっています。最新の状態に復元されました。


とまぁ駆け足で説明してみましたがどんなものでしょう。大体の感じが掴めたでしょうか。
よく使うオプションは~/.darrcに記述できますのでいろいろ試してみてください。
以上。

2007年8月28日火曜日

Darで大事なデータをバックアップ

linuxではtarで適当に固めてバックアップ、というのが一番多い気がしますが、少数のファイルをバックアップするならそれで問題ないかもしれませんが、tarは、もし書庫が壊れたら、壊れた場所以降のファイルが取り出せない! という致命的な欠点があります。本格的なバックアップには使えません。

そこで、Darを使います。Darはバックアップのために作られたソフトで、増分・差分バックアップにも対応し、書庫の圧縮にも対応しています。また、バックアップしたくないファイルやディレクトリの指定圧縮したくないファイルの指定、さらには拡張属性のバックアップにも対応しています。

インストール

sudo apt-get install dar

オプション

よく使いそうなオプションを抜粋
-cバックアップファイルを作ります。ファイル名を指定します
-xバックアップから展開します。ファイル名を指定します
-lバックアップされたリストを表示します
-as-lでリスト表示時に更新されたファイルだけ表示する
-tバックアップファイルが壊れていないかテストします
-dバックアップファイルとバックアップ元との比較を行います
-z[level]gzipで圧縮します。デフォルト圧縮レベルは9
-y[level]bip2で圧縮します。デフォルト圧縮レベルは9
-Z圧縮時、圧縮しないファイルを指定します
-m圧縮をするファイルの最低サイズを指定。指定以下のサイズのファイルは圧縮されない。デフォルトは100バイト
-s指定したサイズでファイルを分割します。
-S分割するとき、最初の分割ファイルのサイズを指定します
-X除外するファイルを指定します
-P除外するディレクトリを指定します
-gバックアップするディレクトリを指定します
-R pathこのパスをルートディレクトリとみなします
-D除外した結果空になったディレクトリをバックアップする
-G指定したファイルにバックアップ情報、カタログデータを書き出します
-A差分バックアップなどの時に参照するファイルを指定します
-,
CACHEDIR.TAGのあるディレクトリを保存しない


簡単な使い方



使う上でのちょっとしたTips


  • ファイル名の命名規則について
    バックアップファイル名には規則性を持たせた方がいい。
    例えば、
    フルバックアップは名前に-full
    差分ファイルには-diff
    増分ファイルには-incを付ける。

さらに`date +%Y%m%d`としてファイル名に日付を付与しておくのもいいだろう。 組み合わせて、ベース名-full-`date +%Y%m%d`とすれば、ファイルを判別するとき便利になるでしょう。
  • カタログを作る
    バックアップする時に、-G path/カタログファイル名とすることで、バックアップしたファイルのカタログリストを作ることが出来ます。
    バックアップファイルをDVD-Rに焼いた後でもカタログファイルを参照することで、わざわざDVD-Rをマウントしてリスト表示しなくても確認できるようになります。

2007年8月24日金曜日

パスワードファイルを定期的にgmailにバックアップ

パスワードなどを書き溜めたGnuPgファイルを普段emacsでeasypgを使って管理している。こうするとemacs上からgpgファイルを透過的に扱うことが出来るので大変便利だ。
大切なファイルなので複数のでメディアにバックアップしているのだけれど、gmailに定期的にアップすればストレスなく快適じゃない? ということでやってみた。

まず、添付ファイルをコマンドラインから送信できるメールコマンドを探した。意外とない。お手軽に手っ取り早くやりたかったのでmpackコマンドを使用することにした。日本語が使えないが、今回の目的には全然問題ない。

インストール

sudo apt-get install mpack

使い方

mpack -s "件名" 添付ファイル名 宛先
で送信できる。あ、MTAを入れていないと無理です。ubuntuにはデフォルトで入っていません。うちにはpostfixを入れていた。

あとは
#!/bin/sh
#

if [ ! -e "pass.gpg" ]; then
exit;
fi

mpack -s "password backup `date +%x%X`" pass.gpg hogehoge@gmail.com
などとしてシェルスクリプトを書いて、/etc/cron.daily に放り込もうかと思ったが、個人的なファイルなので、crontab -e で毎日一回実行するようにして終わり。
あとはgmailでフィルタ設定でゴミ箱にでも振り分けておけば、古いバックアップファイルは自動的に削除されていく。

2007年8月18日土曜日

ubuntuで定期的にプログラムを実行させる

ubuntuで定期的にタスクを実行させます。Windowsだとタスクスケジューラーですかね。あれって実は意外とよくできていたりします。あんまり使われていない気もしますが・・・

linuxだとそもそも定期実行は管理者が行うものだし、ubuntuでもタスクスケジューラに相当するGUIなアプリは入っていません。
端末からだと crontab -eviで設定ファイルが開き、そこで定期的に実行したいプログラムの設定が出来ます。この場合crontabの書き方を知らないといけません。

そこでGUIなアプリの出番です。gnomeだと、gnome-schedule



KDEだとkCronというソフトが用意されています。



gnome-scheduleよりkCronのほうがよりわかりやすいので、おすすめです。ubuntuでもKDEのプログラムは動きます。

インストール

sudo apt-get install kcron
日本語で表示されない場合は一緒にkde-i18n-jaを入れましょう。
sudo apt-get install kcron kde-i18n-ja

インストールされると、メインメニューのアプリケーションシステムツールkCronで起動出来ます。

使い方

新しくタスクを設定する場合は、新規アイコンをクリックすると設定ダイアログが出ます。ご覧のとおり解説するまでもないほどのわかりやすいインターフェースですねw



実行したいプログラムを指定して、あとは実行させたい時間をぽちぽちとボタンを押すだけ。

2007年8月7日火曜日

mp3タグの文字コードを変換する

現在iTunesで管理している楽曲をubuntuでも聴けるように、ゆっくりと移行作業を進めているのですが、iTunesライクな音楽管理ソフト、Amarokで曲表示をしますと思いっきり文字化けして表示されます。
これはID3タグがShift JIS で書かれているためで、id3Ver2だと文字コードはUnicodeと規格で決まっているのですけれども、Windowsだとそこら辺が適当でソフトによってまちまち。

それでID3タグの文字コードをUnicodeに変換することになりますが、一括で変換してくれるソフトでこれといったソフトがみつかりませんでした。
とりあえずSuperTagEditor 改造版で一括で変換し、mp3infpのプロパティでUnicodeに変換されていることを確認してAmarokで表示してみたのですが、文字化けしてダメでした。
ほかにもmp3infpのプロパティでusyncオプションにチェックがついているとAmarokで文字化けすることも確認しました。
さらにID3v2.4でUnicodeだとAmarokでは文字化けするらしい。

そこで今度はiTunesでid3v2.3に一括で変換を行いました。この時に自動でUnicodeに変換もしてくれます。
今度は無事Amarokで日本語が表示でき、めでたしめでたし^^
それにしても手持ちのライブラリが約3000曲。チェックするのは骨が折れる・・・

2007年8月2日木曜日

EmacsでAnthyの起動をダブらせないために

ubuntuの標準な日本語入力システムであるSCIM-Anthy。こいつの日本語入力ON/OFFを全角/半角キーに設定してある。そしてEmacsの日本語入力システムにもAnthyを使い、同じく起動に全角/半角キーを割り当てている。
こうして同じ起動キーを割り当てていると、SCIMのほうが起動してしまい、Emacsの方のAnthyが起動してくれない
そこで、Emacs起動時に、
XMODIFIERS=@im=none emacs
として起動すれば無事にSCIMが起動せずにEmacsの方のAnthyが起動できた。
あとはaliasで
alias em='XMODIFIERS=@im=none emacs
とでもしておけばいいだろう。

2007年7月31日火曜日

gedit以上Emacs未満?なエディタ scribes

scribesは、geditよりも軽くて、Emacsのように色々覚えることが少なくて済む、けれども補完機能とか色分け機能が充実してまっせ的なエディタ。
emacsやviはむずかしい。けれどもgeditよりも高機能な?エディタが欲しいというひとにはいいかも?

インストール

ここにdebパッケージがあるので、ダウンロードしてダブルクリックすればOK。
インストするとメインメニューのアプリケーションアクセサリから起動できる。

使い方

こちらにデモムービーがあるので、それを見れば大体の感じが掴めるでしょう。



なかなかいいんだけど、ちょいとファイルを書き変えたいときなどはvim使っているし、こちらのブログによると、あれであれな感じなのでさくっと削除^^
ちなみにShift_jisなファイルを開くとエラーで開けませんでした。