2009-07 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Emacs 23.1 released
http://lists.gnu.org/archive/html/emacs-devel/2009-07/msg01526.html
もう飽きるほどやっている Emacs のビルドとインストールだが、23.1 リ
リース記念に記録を残すことにした。
1. tar ball の展開。展開されて出来た emacs-23.1/INSTALL も確認すること。
% tar xjf emacs-23.1.tar.bz2
2. ビルド用ワークディレクトリの作成と、チェンジディレクトリ。
% mkdir work; cd work
3. configure 実行。xim は使わないので、OFF にした。
tee 使っているのはログを残すため。私はソースからのビルドする時には、
このように必ずログを残すようにしている。
% ../emacs-23.1/configure --without-xim 2>&1 | tee ../emacs-23.1_configure.log
% cp config.log ../emacs-23.1_config.log
このようなログが出力されれば成功。
Where should the build process find the source code? /home/masutaka/share/src/emacs/emacs-23.1 What operating system and machine description files should Emacs use? `s/gnu-linux.h' and `m/intel386.h' What compiler should emacs be built with? gcc -g -O2 -Wno-pointer-sign Should Emacs use the GNU version of malloc? yes (Using Doug Lea's new malloc from the GNU C Library.) Should Emacs use a relocating allocator for buffers? yes Should Emacs use mmap(2) for buffer allocation? no What window system should Emacs use? x11 What toolkit should Emacs use? GTK Where do we find X Windows header files? Standard dirs Where do we find X Windows libraries? Standard dirs Does Emacs use -lXaw3d? no Does Emacs use -lXpm? yes Does Emacs use -ljpeg? yes Does Emacs use -ltiff? yes Does Emacs use a gif library? yes -lgif Does Emacs use -lpng? yes Does Emacs use -lrsvg-2? yes Does Emacs use -lgpm? yes Does Emacs use -ldbus? yes Does Emacs use -lfreetype? yes Does Emacs use -lm17n-flt? yes Does Emacs use -lotf? yes Does Emacs use -lxft? yes Does Emacs use toolkit scroll bars? yes
4. ビルド。
% make 2>&1 | tee ../emacs-23.1_make.log
5. ビルドが正常終了したら、起動確認。
% src/emacs -q
オーケー。インストールしようか。
6. ここからは root 権限での作業。まずは timestamp というファイルを touch 。
# touch timestamp
7. make install 実行。*.el が gzip されないようにオマジナイもする。
# make GZIP_PROG="" install 2>&1 | tee ../emacs-23.1_make-install.log
8. インストールしたファイルをログに残す。
なぜかインストールしてないファイルもログに残るので、手作業で削除...。
# find /usr/local -cnewer timestamp | sort >> ../emacs-23.1.log
9. なぜか group が masutaka のままになっているものがあるので、chown 実行。
# chown -R root:staff /usr/local/share/emacs
deb パッケージ管理は不勉強のため、分かりません。Debian を使い始めて
から、ソースからビルドすることが少なくなったので、今後も知らないま
までいそう。。。
Emacs-23.1 がリリースされた。せっかくなのでソースが改竄されていない
か、検証をしっかりやってみた。
Emacs 23.1 released
http://lists.gnu.org/archive/html/emacs-devel/2009-07/msg01526.html
上記によると、MD5 check-sums は以下のとおり。
17f7f0ba68a0432d58fa69d05a2225be emacs-23.1.tar.bz2
ふむ。合ってる。改竄はされていないだろう。
% md5sum emacs-23.1.tar.bz2
17f7f0ba68a0432d58fa69d05a2225be emacs-23.1.tar.bz2
しかし、MD5 が 100% 信用できるわけではないので、emacs-23.1.tar.bz2
と同じ場所にある emacs-23.1.tar.bz2.sig を使って、さらに確かめる。
% gpg --verify emacs-23.1.tar.bz2.sig emacs-23.1.tar.bz2
gpg: 2009年07月30日 10時18分53秒 JSTにDSA鍵ID BC40251Cで施された署名
gpg: 署名を検査できません: 公開鍵が見つかりません
まあ、ID BC40251C の公開鍵は持ってないよね。公開鍵を取得しようか。
% gpg --keyserver pgp.nic.ad.jp --recv-keys BC40251C
gpg: 鍵BC40251Cをhkpからサーバーpgp.nic.ad.jpに要求
gpg: 鍵BC40251C: 公開鍵“Chong Yidong <cyd@stupidchicken.com>”を読み込みました
gpg: 絶対的に信用する鍵が見つかりません
gpg: 処理数の合計: 1
gpg: 読込み: 1
再度検証。警告はされたが、正しい署名であることは確認できた。終了。
% gpg --verify emacs-23.1.tar.bz2.sig emacs-23.1.tar.bz2
gpg: 2009年07月30日 10時18分53秒 JSTにDSA鍵ID BC40251Cで施された署名
gpg: “Chong Yidong <cyd@stupidchicken.com>”からの正しい署名
gpg: 警告: この鍵は信用できる署名で証明されていません!
gpg: この署名が所有者のものかどうかの検証手段がありません。
主鍵の指紋: AF1A 0574 841E 0F2D EDE2 829A 764D A716 BC40 251C
ちなみに警告をなくす方法は以下のとおり。
% gpg --edit-key BC40251C
(略)
コマンド> trust
(略)
あなたの決定は? 5
本当にこの鍵を絶対的に信用しますか? (y/N) y
(略)
コマンド> q
ただし信用度は、公開鍵の正当性を確認してから変更すべき。gpg のメッ
セージによると、「パスポートを見せてもらったり、他から得た指紋を検
査したり、などなど」によって、正当性を確認できるとのこと。
改めて検証。警告がなくなった。
% gpg --verify emacs-23.1.tar.bz2.sig emacs-23.1.tar.bz2
gpg: 2009年07月30日 10時18分53秒 JSTにDSA鍵ID BC40251Cで施された署名
gpg: “Chong Yidong <cyd@stupidchicken.com>”からの正しい署名
参考にしたページ
http://www.hyuki.com/gnu/gnupg-v12-readme.html#verify
http://www.usamimi.info/~pochi/linux/gnupg.html
追記(2009-08-16):
署名と検証するファイルが一致しない場合は、以下のようなメッセージが出力される。
% gpg --verify emacs-23.1.tar.bz2.sig emacs-22.3.tar.gz
gpg: 2009年07月30日 10時18分53秒 JSTにDSA鍵ID BC40251Cで施された署名
gpg: “Chong Yidong <cyd@stupidchicken.com>”からの 不正な 署名
Wikipedia - Lsof
オープン中のファイルと、そのファイルをオープンしているプロセスの
リストを出力するコマンド。
似たツールに netstat がある。
Wikipedia - netstat
このコマンドは、全てのアクティブな TCP コネクションと、そのマシンが
listen している TCP ポートおよび UDP ポートを表示する。
"netstat -an" と使うことが多い。netstat は Windows でも使える。
OpenOffice.org 日本語プロジェクト
OpenOffice.org に含まれる、プレゼンテーション用のアプリ Impress を
ちょろっと使ってみた。なかなか使いやすい。もう自宅用に MS-Office を
買うことはないと思う。
ただ、デフォルトでテンプレートが 2 つしか含まれていないのは面倒だった。
オープンオフィス 3 始める人のページから辿ったページからダウンロードした。
- オープンソースのオフィススウィート。
- Windows、UNIX 系 OS、Mac OS X で動作する。
- MS-Office と互換性がある。
- PDF 形式で保存することも出来る。
- 世界的なシェアは増加傾向だそう。最近では会津若松市が有名。
会津若松市がOpenOffice.orgを全庁的に導入へ - スラッシュドット・ジャパン
OpenOffice.org導入の会津若松市が、ノウハウをまとめCCで公開 - スラッシュドット・ジャパン
機能名 | オープンオフィスでの名前 | マイクロソフトオフィスの対応ソフト |
ワープロ | ライター (Writer) | ワード (Word) |
表計算 | カルク (Calc) | エクセル (Excel) |
プレゼンテーション | インプレス (Impress) | パワーポイント (PowerPoint) |
データベース | ベース (Base) | アクセス (Access) |
図形描画 | ドロー (Draw) | - |
私は PC を 2 台持っていて、それぞれ以下の用途に使っている。
用途 | OS | 形態 |
Windows マシン | WindowsXP | ノート PC |
Linux マシン | Debian GNU/Linux squeeze | デスクトップ PC |
synergy を使えばノート PC に繋げているマウスが必要なくなって、机の
上を少し広く使えるかも?と、ふと思ったので早速試してみた。
synergy とはネットワーク上の複数のマシンのキーボードとマウスを共有
できるアプリ。Linux、Windows、Mac OS X に対応している。
Linux マシンをサーバ、Windows マシンをクライアントとする。
1. Synaptic パッケージマネージャから、synergy をインストールした。
(Synaptic からインストールすると履歴が残るので、私は最近 aptitude
ではなく Synaptic を使うようにしている。)
2. ~/.synergy.conf を新規作成し、以下の設定をした。液晶モニタは1つし
かないが、左側に Windows マシン、右側に Linux マシンがあることにした。
# vergil -> SERVER PC (Linux) # nero -> CLIENT PC (Windows) section: screens vergil: nero: end section: links vergil: left = nero nero: right = vergil end
3. synergys を実行した。
% synergys --daemon
4. synergys 自動起動の設定をした。
「GNOME メインメニュー」→「システム」→「設定」→「自動起動するア
プリ」に synergys --daemon を追加し、ログイン時に自動起動するように
した。
1. 下記サイトからダウンロードした日本語版のインストーラ
SynergyInstaller-1.3.1-ja.exe を使って、インストールした。
http://wiki.nothing.sh/page/memo/Synergy
オフィシャルサイトにあるものとの違いは、リソースが日本語されている
ことと、日本語キーボードがサポートされていること。
2. スタートメニューから synergy を実行し、サーバ名を入力した。
3. 自動実行の設定をした。
Linux の画面上でマウスカーソルを左に持っていくと、Windows の画面の
右から現れようになった。
ただし、今回の環境ではモニタを切り替える必要があるので、リアルタイ
ムには確認できない。
モニタを切り替える必要はあるが、キーボードとマウスを切り替える必要
がなくなったため、以前よりもスムーズに Linux と Windows を行き来で
きるようになった。
机の上が少し広くなった。
若干ではあるがキー操作がもたつくことがある。でも問題ないレベル。
vncviewer で、Linux から Windows を操作していると、やや混乱する。(笑)
【コラム】Yet Another 仕事のツール (91) Synergyでキーボード、マウスを共有する - マイコミジャーナル
1組のマウスとキーボードを複数のPCで共有するには - @IT
追記(2009-07-23):
~/.xprofile ではなく、GNOME の設定で synergys を自動起動するように
しました。
追記(2009-07-30):
日本語版のインストーラを使うように、クライアントの手順を変更しました。
@nifty の DNS サーバがおかしくなったときに、代わりに使った DNS サーバ。
202.248.37.74
202.248.20.133
ちなみに、今日の WAN 側の設定は以下であった。
IPアドレス | 211.2.102.77 |
PPPサーバIP | 218.231.1.55 |
DNS1(プライマリ) | 218.231.0.3 (自動取得) |
DNS2(セカンダリ) | 218.231.0.35 (自動取得) |
MTU値 | 1454 |
バージョンが古かったので最新にしようと思ったら、subversion リポジト
リが公開されていたことに気がついた。そこで、メンテナンスの手間を省
くために、site-lisp ディレクトリからシンボリックリンクを張ることにした。
1. まず、以下のコマンドで適当なディレクトリに checkout した。
% svn checkout http://svn.coderepos.org/share/lang/elisp/minibuf-isearch
2. /usr/local/share/emacs/site-lisp から、checkout した
minibuf-isearch ディレクトリにシンボリックリンクを張った。
Emacs のデフォルトの動作では、C-x C-f でファイル名を入力する時など
に、M-p を打つと1つ前の履歴を取り出すことが出来る。
minibuf-isearch を使うと、M-p の代わりに C-r することで履歴をインク
リメンタルに検索することが出来る。bash や zsh のそれと同じ。
参考までに私の設定は以下のとおり。
(require 'minibuf-isearch) ;; メッセージがミニバッファの右端に表示される。 (setq minibuf-isearch-message-on-right t)
minibuf-isearch オフィシャルサイト
横着プログラミング 第3回: 履歴マニア
追記(2011-11-27):
Emacs23 では minibuf-isearch 相当の機能が入っているので、
この elisp は不要になりました。
QuickRestart - Firefox Addons
「ファイル」メニューに「Firefoxを再起動する」を追加するだけのアドオン。
シンプルで素晴らしい。再起動時にタブの状態は保持される。
目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回
Emacs では cc-mode というパッケージが C 系言語のコーディングスタイ
ルを統括しています。cc-mode はパッケージ名で、個々のメジャーモード
名は c-mode や c++-mode です。
cc-mode がサポートする言語を cc-mode.el から抜粋しておきます。
CC Mode supports K&R and ANSI C, ANSI C++, Objective-C, Java,
CORBA's IDL, Pike and AWK with a consistent indentation model
across all modes.
前述の言語の中で私が使うのは C 言語だけで、以下の設定をしていました。
(add-hook 'c-mode-common-hook (lambda () (c-set-style "bsd") ;;; (a) (setq c-basic-offset 4) ;;; (b) ;; 演算式が複数行にまたがるときのオフセット (c-set-offset 'statement-cont 'c-lineup-math) ;;; (c) ;; 行末のスペースやタブに色づけして警告する。 (setq show-trailing-whitespace t))) ;;; (d)
c-mode-common-hook は C と C++ 両方に影響する hook です。C だけに設
定したい場合は c-mode-hook を、C++ だけに設定したい場合は
c++-mode-hook を使います。
インデントは以下の手順で設定します。
1. 近いスタイルを選ぶ。
2. 気にいらないインデント部分を見つける。
3. Ctl-c Ctrl-s でインデントに効いてくる変数を見つける。
4. その変数の値をc-set-offset関数で変える。
1 が (a) です。加えて (b) も設定しています。私の場合は bsd スタイル
が一番しっくり来ました。
bsd 以外の他のスタイルは M-x c-set-style し、TAB キーを押すと確認で
きます。
2 は私の場合、以下のようなインデントでした。
ret = a + b + c;
このようにしたかったのです。
ret = a + b + c;
3 の見つけ方です。
まず "b +" の行で Ctrl-c Ctrl-s します。すると *Messages* バッファ
に以下のように表示されました。
Syntactic analysis: ((statement-cont 107))
この行のインデントは statement-cont によって設定されていることが分
かりました。
statement-cont とは何でしょうか。
cc-mode では c-basic-offset と c-offsets-alist がインデントに関係し
てきます。この c-offsets-alist を構成する値が statement-cont です。
c-offsets-alist の値を確認してみると以下のように設定されていました。
(statement-cont . +)
4 の方法です。が、ここで一点注意。
c-basic-offset は (b) のように setq() で設定すれば良いのですが、
c-offsets-alist は直接 setq() でいじってはいけません。
c-set-offset() で修正します。
(statement-cont . +) に相当する設定は以下になります。
(c-set-offset 'statement-cont '+)
'+ は c-basic-offset の値です。'++ にすると 2 倍になるそうです。
しかし、今回は意図した設定になりませんでした。どうやらこの設定を調
べていた当時、2ch で質問して c-lineup-math にしたようです。チャンチャン。
Emacs part8 の 891 レス目 - 2ch
(d) はコメントのとおり、不必要なスペースやタブに色付けして警告する
設定です。ソースによっては警告されまくりで、真っ赤になったりするの
であまりオススメはしません。
第9回終わり。
目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回
dwww パッケージをインストールすると
[GNOME メニュー]→[アクセサリ]→[Debian Documentation Browser]
または
Synaptic メニューの [パッケージ]→[ドキュメントを参照]
からインストール済みの全オンライン文書を、ローカルの HTTP サーバで
参照することが出来る。(文書は英語。)
※ Synaptic は [GNOME メニュー]→[システム]→[システム管理]→
[Synaptic パッケージマネージャ] から起動できる。
[GNOME メニュー]→[システム]→[システム管理]→[Software Sources]
インストールまたはアップデートできる APT パッケージの場所についての
情報は /etc/apt/sources.list に書かれている。
今までは場所の追加や削除をするときはテキストエディタで修正していた
が、"Software Sources" という GUI ツールがあるのを今日知った。今後
はこちらを使うことにしようかな。
文字化けする pdf ファイルがあったんだけど、xpdf-japanese をインストー
ルしたら文字化けが直った。
# aptitude install xpdf-japanese
xpdf-japanese の他に、cmap-adobe-japan1 ttf-kochi-gothic
ttf-kochi-mincho が自動的にインストールされた。
Dired の表示を Windows のように「ディレクトリ→ファイル」の順にする方法。
(add-hook 'dired-load-hook (lambda () (require 'ls-lisp) (setq ls-lisp-use-insert-directory-program nil) (setq ls-lisp-dirs-first t)))
ls コマンドの代わりに elisp でディレクトリを表示することになるので、
表示は遅いかもしれない。まあ参考程度で。
VL ゴシックの行間が広いので狭くする方法を調べていたら、広くする方法
が見つかった。w
(setq line-spacing 0.1)
小数値を設定すると行の高さに対して相対値で設定され、整数値を設定す
るとピクセル数で設定されるらしい。
設定すると即座にカレントバッファに反映されるので、Emacs を 2 つ起動
してちょうど良い値を設定すると良いと思う。
VL ゴシックの行間を狭める方法は継続して調査中。フォントを変更する以
外ない気がしているので、他のフォントに変えることも検討している。
参考にしたページ:
Emacsのとりあえず最低限の環境を整える - ubulog
去年の8月に DELL Inspiron 530s と一緒に買った光沢液晶 (SP2208WFP)
を使い始めてから、目がやけに疲れるようになりました。視力も落ちたと
思います。
最近特に耐えられなくなってきたので、今日ヨドバシで三菱のノングレア
液晶モニタを買いました。店頭価格は ¥31,070 でしたが、溜まっていた
ポイントを使ったら ¥25,199 になりました。
購入する時にこだわったこと、こだわらなかったことです。
- 絶対にグレア液晶は買いません。
- サイズは今と同じ 22 インチワイドです。
- 色味にこだわりはありません。テキストが見やすいものを買います。
- スピーカーが付属したものを買います。ただし音にこだわりはありません。
- 入力デバイスの切り替えがスムーズにできるものを買います。
やっぱり、ノングレア液晶はいいですねえ。良い買い物をしました。
以下は購入してから分かったことです。
- 高さは、3個付属するプラスチックのブロックを付けたり外したりして調
節します。微妙な調節はできませんが、特に不満はありませんでした。
- 画面の角度は、ある程度自由に変えられます。
- 安定感は少しなくなりますが、底のスタンドの後部を外すと、作業スペー
スを広く保てます。
- 一体型スピーカーは ≫ ボタンで音量調整できます。スピーカーの音は、
やはりショボかったです。
- メニューから、スタンダード、テキスト、ムービー等の映像モードを選べ
ます。もちろん、自分で微調整もできます。メニューに入らずに ≪ ボタ
ンからのショートカットも用意されています。
- INPUT/EXIT ボタンを 1 回押すだけで、次の入力デバイスに変更出来ます。
SP2208WFP に比べ、良くなったこと、悪くなったことです。
良くなったこと
- 照明器具や太陽の光が映り込まなくなりました。
- 自分の姿が映り込まなくなりました。
- テキストが見やすくなりました。
- 画面を暗くしても、テキストが見づらくならなくなりました。
- 入力デバイスを変更するために押すボタンの回数が減りました。今までは
4 回くらい押す必要がありましたが、今は 1 回で済みます。INPUT/EXIT
ボタンを押した時に、使っていない入力デバイスをスキップ出来る点は気
が利いています。
悪くなったこと
- 結構簡単に本体が揺れます。底のスタンド後部を外したため?
- 音がショボくなりました。
- スピーカーの音量調節がやりづらくなりました。(前はダイヤル式で簡単で
した。)
- INPUT/EXIT ボタンで、現在の入力デバイスから、次の入力デバイスに切り
替えている間は、音が消えます。
- 使っていませんでしたが、カメラと USB ハブがなくなりました。
今回の件で、メールや Web サイトを見るような PC の液晶モニタを、光沢
タイプにしてはいけないことがよく分かりました。はぁ〜。
関連記事
「[2008-10-05-2] テカテカ液晶対策」
「[2009-02-21-2] Emacs23 のフォント」
目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回
Emacs のタブ幅には、3つの変数が関係しています。
タブコードを半角スペースいくつ分で表示するかを制御する変数です。
各バッファ毎に設定できます。デフォルトは 8 です。
tab-width のデフォルト値です。全てのバッファに影響する変数です。
デフォルトは 8 です。
TAB キーを押した時に、カーソルが移動するカラムの位置です。デフォル
トは (8 16 24 32 40 48 56 64 72 80 88 96 104 112 120) です。
例えばタブ幅を 4 に変更したい場合は以下のようなコードを ~/.emacs に
記述します。
(setq-default tab-width 4) (setq default-tab-width 4) (setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120))
tab-stop-list の設定が少し煩雑ですよね。以前は手計算で
tab-stop-list の中身を作っていたのですが、見事に計算間違いした経験
があります。そんな自分が嫌になったので、関数化しました。
「下記設定」と「前述の設定をタブ 8 に変えたもの」は同じ意味です。
(defun set-aurora-tab-width (num &optional local redraw) "タブ幅をセットします。タブ5とかタブ20も設定できたりします。 localが non-nilの場合は、カレントバッファでのみ有効になります。 redrawが non-nilの場合は、Windowを再描画します。" (interactive "nTab Width: ") (when local (make-local-variable 'tab-width) (make-local-variable 'tab-stop-list)) (setq tab-width num) (setq tab-stop-list ()) (while (<= num 256) (setq tab-stop-list `(,@tab-stop-list ,num)) (setq num (+ num tab-width))) (when redraw (redraw-display)) tab-width) (set-aurora-tab-width (setq default-tab-width (setq-default tab-width 8)))
開いたテキストが自分のタブ幅と異なるため、インデントがずれた経験は
ありませんか?
キー操作で動的に切り替えられるように、私は以下の設定をしています。
結構おすすめです。(ctl-q-map については、第5回を参照してください。)
(define-key ctl-q-map (kbd "2") (lambda () (interactive) (set-aurora-tab-width 2 t t))) (define-key ctl-q-map (kbd "4") (lambda () (interactive) (set-aurora-tab-width 4 t t))) (define-key ctl-q-map (kbd "8") (lambda () (interactive) (set-aurora-tab-width 8 t t)))
例えば "Ctrl-q 4" すると、カレントバッファのタブ幅が 4 になります。
他のバッファには影響を与えません。
ファイルの先頭に以下を書いておくと、Emacs はそのファイルをタブ 4 で開きます。
-*- tab-width: 4 -*-
ファイルの最後に書くことも出来ます。
Local Variables:
tab-width: 4
End:
tab-width に特化された実装になっているわけではありません。
このような記述をすると、ファイル毎に変数値を設定できるのです。
英語ですが、Info にも詳しい説明が書いてあります。
1. M-x info [Enter]
2. 以下の行で Enter
* Emacs: (emacs). The extensible self-documenting text editor.
3. g を押したあと、Specifying File Variables [Enter]
タブに関連する関数をご紹介します。それぞれ M-x で呼び出せます。
リージョン内の連続する空白をタブに変換します。変数 tab-width がこの
動きを制御します。
リージョン内のタブを複数のスペースに変換します。変数 tab-width がこ
の動きを制御します。
第8回終わり。
目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回
[2008-12-12-2] に買った「一生太らない体のつくり方」。
付録のスロトレの動画を見つけた。これは参考になるわ。
メタボ侍「スロトレ」に挑戦!石井直方教授に聞く
1/5 ウォームアップ -- YouTube
2/5 ニートゥチェスト -- YouTube
3/5 スクワット -- YouTube
4/5 プッシュアップ -- YouTube
5/5 アームレッグクロスレイズ -- YouTube
付録のプッシュアップは台の上に手をついてやっていたんだけど、この動
画では台は使っていない。必要ってわけじゃないのか。ちょうどよい台が
なかったから助かる。
追記(2009-07-13):
この動画だとストレッチをやっていないけれど、ストレッチは非常に大事
らしいので、実際はストレッチを間にはさんでください。本当にやるんだっ
たら、本を買った方が良いと思いますけど。
swftools をインストールする。
# aptitude install swftools
swfextract コマンドに -m を付けると、音声を output.mp3 に出力する。
% swfextract -m hoge.swf
-o を付けると、ファイル名を指定できる。
% swfextract -mo hoge.mp3 hoge.swf
[linux]swfから音声を抜き出す方法 - (rubikitch loves (Emacs Ruby CUI))
目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回
さあ、文字コードです。
いきなり矛盾しますが、最近の Emacs(例:23.3) では文字コードの設定は
不要です。
Emacs はデフォルトの状態でも、文字コードを自動判別してファイルを開
くことが出来ます。新規作成ファイルの文字コードも locale の設定によっ
て自動決定されます。
もしあなたの ~/.emacs に下の設定が書いてあったら削除しましょう。
もはや廃れた設定です。参考情報: mule-ja-2009:09813
(set-language-environment "Japanese") (prefer-coding-system 'utf-8) (set-default-coding-systems 'utf-8) (set-terminal-coding-system 'utf-8) (set-keyboard-coding-system 'utf-8) (setq-default buffer-file-coding-system 'utf-8)
Mac ではファイルシステムに HFS+ を使っているため、濁点や半濁点の扱
いが Windows と Linux と異なるそうです。これを回避するため、以下の
設定が必要とのこと。Emacs-23.2 以上で設定可能です。
(require 'ucs-normalize) (set-file-name-coding-system 'utf-8-hfs) (setq locale-coding-system 'utf-8-hfs)
紹介マニアどらふと版: Mac OS X におけるファイル名に関するメモ(NFC, NFD等)
文字コードを指定し直して、現在開いているファイルを開き直す方法です。
結構重宝します。<文字コード> は TAB で補完出来ます。
現在開いているファイルの文字コードを変更する方法です。たくさんのファ
イルを変換する場合は nkf なんかを使うのでしょう。
第7回終わり。
目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回
追記(2011-02-08):
文字コードの設定は set-language-environment() と
prefer-coding-system() だけで良いようですので、他を削除しました。
追記(2011-08-06):
set-language-environment() と prefer-coding-system() さえも必要ない
ことがわかったので、全体的に書き換えました。
目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回
本項は、ネット上から *.el をダウンロードして、いろいろ試したくなっ
てきたあたりで読むと良いと思います。load-path の仕組みを理解しましょう。
UNIX や Windows 等に存在する「環境変数 PATH」の Emacs 版です。
例えば ls を実行すると、「環境変数 PATH」に登録された最初のディレク
トリから ls が検索され、最初にヒットした ls が使われますよね?
また、どのディレクトリにも ls が存在しなければ、
command not found: ls
などといったエラーが発生します。
Emacs では例えば ~/.emacs に以下のようなコードを書くと load-path が
参照されます。
(require 'hoge)
load-path は Emacs Lisp の変数です。どんな値が入っているのかは第3回
の方法で調べられます。
load-path には複数のディレクトリが登録されているはずです。
まず先頭のディレクトリについて、以下の順で検査が行われます。第2回の
.emacs と同じですね。
1. hoge.elc が存在するか?
2. hoge.el が存在するか?
3. hoge が存在するか?
1, 2, 3 のどれにも当てはまらなければ、次のディレクトリが検査されます。
全てのディレクトリで当てはまらなければ、以下のエラーが発生します。
Cannot open load file: hoge
デフォルトの設定では、以下の順番に構成されているはずです。
1. <PREFIX>/share/emacs/<EMACS-VERSION>/site-lisp 以下全てのディレクトリ
2. <PREFIX>/share/emacs/site-lisp 以下全てのディレクトリ
3. <PREFIX>/share/emacs/<EMACS-VERSION>/lisp 以下全てのディレクトリ
Emacs-22.3 を /usr/local 以下にインストールした場合は、このようにな
ります。
1. /usr/local/share/emacs/22.3/site-lisp 以下全てのディレクトリ
2. /usr/local/share/emacs/site-lisp 以下全てのディレクトリ
3. /usr/local/share/emacs/22.3/lisp 以下全てのディレクトリ
1 は当該バージョンの Emacs だけに参照させたい *.el を置くディレクト
リです。デフォルトでは subdirs.el というファイルだけが置かれています。
(subdirs.el は後で説明するので、覚えておいて下さい。)
2 は全てのバージョンの Emacs から参照させたい *.el を置くディレクト
リです。ここにも、デフォルトでは subdirs.el というファイルだけが置
かれています。
3 は当該バージョンの Emacs に付属する、全ての *.el が置かれているデ
ィレクトリです。
<PREFIX>/share/emacs/site-lisp 以下に適当な名前のディレクトリを作っ
て、Emacs を再起動してみて下さい。追加したディレクトリが load-path
に追加されていますよね。なぜでしょう?
Emacs は起動時に以下の 3 つの subdirs.el を評価します。
1. <PREFIX>/share/emacs/<EMACS-VERSION>/site-lisp/subdirs.el
2. <PREFIX>/share/emacs/site-lisp/subdirs.el
3. <PREFIX>/share/emacs/<EMACS-VERSION>/lisp/subdirs.el
1 と 2 の subdirs.el の内容は同じで、以下のように記載されているはず
です。
(if (fboundp 'normal-top-level-add-subdirs-to-load-path) (normal-top-level-add-subdirs-to-load-path))
この Emacs Lisp 式の意味は
「normal-top-level-add-subdirs-to-load-path という関数が存在すれば、
normal-top-level-add-subdirs-to-load-path を実行する」になります。
normal-top-level-add-subdirs-to-load-path() はディレクトリを再帰的
に探索し、見つかったディレクトリを load-path に追加する関数です。た
だし、以下のディレクトリは load-path に追加しません。
"." で始まるディレクトリ
"RCS" "CVS" "rcs" "cvs" という名前のディレクトリ
".nosearch" というファイルが存在するディレクトリ
3 の subdirs.el には Emacs-22.3 の場合、以下のように記載されている
はずです。
(normal-top-level-add-to-load-path '("url" "textmodes" "progmodes" "play" "obsolete" "net" "mh-e" "mail" "language" "international" "gnus" "eshell" "erc" "emulation" "emacs-lisp" "calendar" "calc"))
まあ、だいたい意味は分かりますよね。(説明するのが面倒になってきまし
た..。^^;)
root 権限を持っていない等の理由から、前述の site-lisp 以下に *.el
をコピーできない場合もあるでしょう。その場合は、load-path にディレ
クトリを追加します。
例えば、"~/share/elisp" を追加したい場合は以下を ~/.emacs に設定し
て下さい。
(add-to-list 'load-path "~/share/elisp")
この例では load-path の先頭に "~/share/elisp" が追加されます。
上の方法だと、~/share/elisp 以下にディレクトリを追加するたびに
add-to-list() を追加する必要があり、少々面倒です。そこで前述の
normal-top-level-add-subdirs-to-load-path を利用します。
先にコードを晒します。
(defconst my-elisp-directory "~/share/elisp" "The directory for my elisp file.") (dolist (dir (let ((dir (expand-file-name my-elisp-directory))) (list dir (format "%s%d" dir emacs-major-version)))) (when (and (stringp dir) (file-directory-p dir)) (let ((default-directory dir)) (add-to-list 'load-path default-directory) (normal-top-level-add-subdirs-to-load-path))))
このコードを ~/.emacs に設定すると、load-path の先頭に以下の順番で
追加されます。
1. "~/share/elisp<emacs-major-version>" 以下全てのディレクトリ
2. "~/share/elisp" 以下全てのディレクトリ
使用している Emacs のバージョンが 22.3 の場合、
<emacs-major-version> は 22 になります。
変数 my-elisp-directory は適宜変更して下さい。
require は、ファイル中に (provide 'hoge) などと書かれている *.el を
読み込む関数です。そうすることで、require 済みかを以下の方法で判別
できます。
(if (featurep 'hoge) ...)
また、(require 'hoge) は何度実行しても、hoge.el は一度しか読み込ま
れません。
require と似たものに load があります。featurep() による検査は行えま
せん。load すると、安直に hoge.el が load されます。
(load "hoge")
少し特殊なものに autoload があります。この式が評価された時点では
hoge.el は読み込まれません。hogehoge という関数が実行された直後に
hoge.el が読み込まれ、その後 hogehoge() が実行されます。
(autoload 'hogehoge "hoge" nil t)
他、load-file という関数もあります。M-x load-file を実行し、読み込
みたいファイルを指定すると、そのファイルが load されます。つまり、
load-path とは直接関係ありません。
load-path に関連する関数をご紹介します。それぞれ M-x で呼び出せます。
locate-library
指定した *.el の場所をフルパスで出力。
list-load-path-shadows
*.el の名前が同じであるため、load されない *.el を表示。
第6回終わり。
目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回
私のTwitterスタイル - 304 Not Modified
◎buzztter
今 Twitter のタイムラインで頻出しているキーワードを教えてくれるサービス。
◎ふぁぼったー
Twitter にあるお気に入りの可視化サービス。自分の発言が誰にどのくら
いふぁぼられているのかが分かる。→ マスタカのふぁぼられ
Twitter には、まだまだ私の知らない使い道がありそう。
目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回
Emacs では数多くの関数がキーに割り当てられています。その中には押し
やすいものもあれば、押しづらいものもあります。また、全ての関数がキー
に割り当てられているわけではないため、頻繁に使う関数なのに
M-x hogehoge [Enter]
などと実行しなければならない場合もあります。
という状況ではありますが、Emacs のキーバインドはフルカスタマイズ可
能です。カスタマイズするしかないでしょう。:-)
私は以下のことを念頭に置いて、キーバインドを変更しています。
- デフォルトのキーバインドは、極力変更しない。
- 連打することがあるコマンドは1ストローク(例: Ctrl-t)。
- 連打する必要が少ない、もしくはやや危険なコマンドは2ストローク
(例: Ctrl-q Ctrl-h)。
- 2ストロークにする時は、全て Ctrl-q Ctrl-h のような Ctrl を介したも
のにする。例えば Ctrl-q h だと、Ctrl キーを一旦ニュートラルにする必
要があるので、Ctrl-q Ctrl-h より確実に遅い。
- カーソルキーやファンクションキーは遠いので、極力使わない。
例えば、Ctrl-n というキーを押すと next-line という関数が呼ばれます。
Ctrl-f は forward-char です。ただの a というキーにも
self-insert-command という関数が割り当てられています。
このように、全てのキーに関数が割り当てられています。
では、どうやって調べたらよいでしょうか?これを調べるヘルプコマンド
が、以下になります。ミニバッファに関数名が表示されます。
F1 c 調べたいキー操作
"F1 c" 自体も、もちろん関数呼び出しとなっています。上の方法で調べる
と、describe-key-briefly という関数だと分かります。
逆に、ある関数がどのキーに割り当てられているのかは、"F1 w" で分かり
ます。
以上を知っていれば、現在のキーバインドがどのように設定されているか
分かるはずです。
よく使うヘルプコマンド一覧を記載しておきますね。"F1 Ctrl-h" すると、
一覧から以下のヘルプを選択することも出来ます。
キー | 関数名 | 説明 |
F1 c | describe-key-briefly | 指定したキーに対応する関数名を、ミニバッファに表示 |
F1 k | describe-key | 指定したキーに対応する、関数のヘルプを表示 |
F1 f | describe-function | 指定した関数のヘルプを表示 |
F1 w | where-is | 指定した関数に対応する、全てのキーを表示 |
F1 b | describe-bindings | 現在のバッファのキーバインド一覧を出力 |
F1 m | describe-mode | 現在のバッファのメジャーモードとマイナーモードの説明を出力 |
F1 a | apropos | キーワードにマッチする関数と変数を検索 |
F1 i | info | Infoを閲覧 |
一例として。Ctrl-z すると、M-x shell を実行できるようにしてみます。
デフォルトで Ctrl-z に割り当てられている関数は、
iconify-or-deiconify-frame です。フレームが最小化されます。
これを置き換えます。
設定内容はこちらになります。~/.emacs に記載します。
(define-key global-map (kbd "C-z") 'shell)
define-key が関数名です。後ろの global-map, (kbd "C-z"), 'shell は
define-key への引数になります。
- global-map というのは全てのバッファに影響するキーマップです。
- (kbd "C-z") は Ctrl-z というキーのことだと思って下さい。
-- 他に (kbd "C-x C-p"), (kbd "M-p"), (kbd "C-M-p"), (kbd "C-,"),
(kbd "<right>"), (kbd "<f8>") などが使えます。
-- (kbd "ほげ") の ほげ の部分は、"F1 c" した後、調べたいキーを
押すと分かります。
- 'shell は関数名です。"'"(シングルクォート) を忘れないで下さい。
有名なところでは、esc-map と ctl-x-map があります。global-map と同
じく、全てのバッファに影響するキーマップです。
以下は設定の一例です。M-j や Esc-j すると、goto-line を実行します。
(define-key esc-map (kbd "j") 'goto-line)
後述しますが、キーマップを自作することも出来ます。
他にも c-mode-base-map や dired-mode-map、isearch-mode-map などがあ
ります。apropos で調べられます。
Ctrl-u F1 a -map$ [Enter]
Emacs の Info や、elisp のソースを確認するのも良いと思います。
デフォルトのキーバインドをできるだけ変更しないで、自分好みの設定を
しようとするとあることに気づくはずです。
「どのキーも埋まっているじゃん。。。」
使わなそうなキーなら良いのですが、実は使えるキーで、後で後悔するか
もしれません。
ここで、"Ctrl-なんとか"というキーを一つずつ調べてみました。結果、
Ctrl-q の使用頻度が少ないことに気がつきました。
Ctrl-q には quoted-insert という関数が割り当てられています。コント
ロールコード(ASCII コードの Ctrl-l や Ctrl-i 等)を挿入できます。
そこで、ctrl-q-map を作ってみることにしました。
そうすると、"Ctrl-q Ctrl-アルファベット" や "Ctrl-q 記号" などを自
由に使えるようになります。quoted-insert は "Ctrl-q Ctrl-q" に追いや
ることにします。
前置きが長くなりましたが、設定内容を下記に記載します。
「your-favorite-funca〜your-favorite-funcz」はもちろん、割り当てた
い関数名にしてください。
(defvar ctl-q-map (make-keymap)) ;;; (★a) (define-key global-map (kbd "C-q") ctl-q-map) ;;; (★b) (define-key ctl-q-map (kbd "C-a") 'your-favorite-funca) (define-key ctl-q-map (kbd "C-b") 'your-favorite-funcb) . . (define-key ctl-q-map (kbd "C-q") 'quoted-insert) . . (define-key ctl-q-map (kbd "C-z") 'your-favorite-funcz) ;;; (★a) ctrl-q-map という変数を新たに定義しました。 ;;; 新規作成したキーマップを代入しています。 ;;; ;;; (★b) ctrl-q-map を Ctrl-q に割り当てています。
かなり自由に設定できるようになりましたね!
「-第4回- カーソル移動」の「スクロールアップ、スクロールダウン」の
Ctrl-u 1 Ctrl-v のような操作をキーに割り当てることもできます。
一例として1行スクロールアップする機能("Ctrl-u 1 Ctrl-v" に相当)を
"Ctrl-;" に割り当てることにします。
(1) 1行スクロールアップする関数 scroll-up1 を新規作成します。
(defun scroll-up1 () (interactive) (scroll-up 1))
(2) scroll-up1 を "Ctrl-;" に割り当てます。
(define-key global-map (kbd "C-;") 'scroll-up1)
1行スクロールアップする無名関数を作って、直接 "Ctrl-;" に割り当て
ます。
(define-key global-map (kbd "C-;") (lambda () (interactive) (scroll-up 1)))
今回は少しだけ「emacs 雑記」を参考にさせて頂きました。keybind のペー
ジですね。
英語ですが、Info にも詳しい説明が書いてあります。
1. M-x info [Enter]
2. 以下の行で Enter
* Emacs: (emacs). The extensible self-documenting text editor.
3. g を押したあと、Key Bindings [Enter]
最新の Info って誰か翻訳していないのかなあ。手元にあるのは 20.6 の
日本語マニュアル...。
第5回終わり。
目次 / 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回
セキュアコーディング - JPCERT コーディネーションセンター
ここに無料セミナーの案内が掲示されています。
「C/C++ セキュアコーディング ハーフデイキャンプのご案内」
- Part 1. 7月16日(木) 13:00-18:00 「文字列、整数」
- Part 2. 8月 7日(金) 13:00-18:00 「ファイル入出力」
- Part 3. 9月10日(木) 13:00-18:00 「動的メモリ管理、書式指定文字列」
昨年度の資料をダウンロードできます。
http://www.jpcert.or.jp/research/materials.html
セキュアコーディングのドキュメントもダウンロードできます。
http://www.jpcert.or.jp/sc-rules/
まだ読んでないけど、無料とはすごい!!
Firefox3.5 がリリースされたようですね。
ツイッターでやけに話題が多いなあと思ったら、そういうことだったか。
私はサイドメニューに付けた Discover Shiretoko で知りました。^^; [2009-06-24-1]
ただし、もう少し様子見します。少なくとも Tab Mix Plus は
まだ対応していないようなので。
Mozilla Japan - 次世代ブラウザ Firefox とメールソフト Thunderbird の公式サイト
2009-07 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31