Emacs 24 から標準添付されるようになった package.el に関しても、Emacs 24.4 で追加されている機能がある。
つい最近「アップルが突然Mac OS Xの署名技術を変更し、大量のアプリが影響を受ける可能性」なんて記事も出てたけど、package.el の世界にも「署名」の概念を取り入れて、よりセキュアな環境へ持っていくようだ。
Emacs 24.4 では package-check-signature というオプションが用意されており、これを non-nil にすると、インストール時に署名の有無を確認するようになる。24.4 でのデフォルトでは nil のようだけど、いずれは non-nil をデフォルトとしていくのではなかろうか。
実際に試してみる。*scratch* バッファで、下記を実行。
(setq package-check-signature t)
さらに M-x list-packages でパッケージのリストを表示させ、試しに(なんでも良いんだけど)csv-mode をインストールしてみる。パッケージ名を選択して、i キーでインストール対象としてマーク、x キーdで実際にインストール処理が走るのだが、、、
Unsigned package: 'csv-mode' と言われてインストールができない。
恐らく今はまだ署名されたパッケージ数はもの凄く少ないだろうから、これを non-nil にする必要はないだろうけど、今後のスタンダードになりそうなので知っておいたほうが良さそう。
また、MELPA などを使っていると、最近はかなりパッケージの数が増えてきていて、お目当てのパッケージに辿り着くのもひと苦労する(ってほどのことは無いけども、ここではそうしておく)。
そんな時のために、新たにキーワードでフィルタする機能( package-menu-filer )が導入された。
M-x list-packages で一覧表示を出した後に f キーでフィルタをかけられる。例えば、キーワード csv でフィルタしてみるとこうなった。
あれ?さっきの csv-mode はどこいった?という感じなんだけど、このフィルタで検索されるのは Description の部分のようで、csv-mode の Description には csv というキーワードが入っていないので除外される結果になったらしい。
今のところは欲しいものが見つからない可能性はあるものの、この機能が一般的になれば各パッケージの作成者が Description を工夫しだすだろうし、こちらも将来性のある拡張ではなかろうか。
どんどん使いやすくなって良いねぇ。
Emacs 24.4 から、Emacs Lisp のみで書かれたブラウザ eww が組み込まれた。
eww ってのは、「Emacs Web Wowser」という意味らしい。「Wowser」ってのは聞き慣れないな、と調べてみたら「人をあっと言わせるもの」という俗語らしい。
まぁ、確かに Emacs Lisp のみでブラウザを実現するとか、そういうイメージあるわな。
過去には w3 という先駆者もあったそうだけど、オレは未使用なのでよく知らない。emacs-w3m は、Wanderlust と一緒に使っていたけど、これは外部の w3m コマンドを使っていたので「Emacs Lisp のみ」って条件とはちょっとズレちゃう。
「Emacs Lisp のみ」ってのが本当に素晴らしいのかどうかはアレとして、作った人は「尊敬すべき変態」なのは確かだと思う。
さて、そんな eww な訳だが早速、M-x eww で起動してみる。Enter URL or Keywords: と聞いてくるので、この日記のタイトルを入れてみた。
そして、enter を入力すると、検索結果が表示された。画像も Emacs のフレーム内にインライン表示される。
デフォルトでは、DuckDuckGo が検索エンジンとなっている。DuckDuckGo ってのは不勉強で知らなかったんだけど「プライバシー(英語版)の保護とユーザーの情報を記録しないことを検索エンジンとしてのスタンスとしている」(Wikipedia より)ってところだそうだ。
で、検索結果が出たので、Web 内をウロウロしたいのだけど、カーソルの移動は C-n や C-p、C-f、C-b などのエディタ操作と同じいつものキーバインドになっている。使うとダサイと言われてしまうカーソルキーでの移動も可能(オレはカーソルキーも使うけど)。
リンク部分のテキストへカーソルを移動して、C-m (enter) でリンク先へ移動する。
再度検索するには、検索窓の部分へカーソル移動して、テキストを入力して enter 。Submit ボタンへカーソル移動して enter でもいけるようだ。つまり、フォーム要素にも対応している。
その他の「ブラウザっぽい挙動」に関してのキーバインドは次のようになっている。
| 機能 | キーバインド | コマンド名 |
|---|---|---|
| 戻る | l |
eww-back-url |
| 進む | r |
eww-forward-url |
| 再読み込み | g |
eww-reload |
| ソースを見る | v |
eww-view-source |
| ブックマークに追加 | b |
eww-add-bookmark |
| ブックマークを表示 | B |
eww-list-bookmarks |
| 履歴 | H |
eww-list-histories |
| リンク先をダウンロード | d |
eww-download |
| 現在の URL をコピー | w |
eww-copy-page-url |
| 現在の URL を別ブラウザで開く | & |
eww-browse-with-external-browser |
| ファイルを開く | N/A | eww-open-file |
| Cookie の一覧 | C |
url-cookie-list |
| eww を終了 | q |
quit-window |
「Cookie の一覧」は、eww が実装したものではなく、Emacs 24.4 で追加された新機能( url-cookie-list )を使っているのが面白いところ。標準添付される Emacs Lisp に合わせて、本体に機能が追加された形に見える(真実がどうなのかは知らない)。
簡単な操作はこんな感じでだいたい使えそうなので、後は検索エンジンをカスタマイズしてみよう。「自由な」 DuckDuckGo もステキだけど、ここはみんな大好き Google に変えてみよう。
カスタマイズ用の変数が用意されているので、次のようにするだけで検索エンジンを Google にできる。
(setq eww-search-prefix "https://www.google.co.jp/search?q=")
そして、Google で「雑文発散」を検索してみた結果はこうなった。
左側の「Search Options」が幅を効かせているように見えるけど、これは 80 x 25 文字のフレームでキャプチャを撮ったからってのもある。もっと大きなフレームの Emacs ならここまで目立たないので大丈夫。
さて、では、この eww を常用するかと言うと、通常のブラウズはやっぱり専用のブラウザを使うかなぁ。
でも、例えば Markdown を編集していて、ちょっと HTML レンダリングの結果を見たい、なんてシチュエーションで「まともにレンダリングできる Emacs 内ブラウザ」があれば、それで見るものアリかなぁとは思いつつ、CSS が適用された状態では見られないので、果たしてどこまで…みたいな気持ちはある。
あとはあれかなー、各プログラミング言語の編集モードで「オンラインマニュアルを参照する」というコマンドが実装されている場合があるけど、それは Emacs 内で見れた方が幸せかなぁ。だとすると、存在理由が格段に上がる気もする。
以前も書いたけど、最近は Emacs をフルスクリーンにして左右に分割し、左側に実行用のコード、右側にユニットテストのコードを並べて TDD を行ったりしている。
ただ、いったん分割を解除して、再分割をしたときに、左側にユニットテスト、右側に実行コードが表示されちゃう場合がある。意識して分割・バッファ読み込みをすれば、そんなことはないんだろうけど、手が覚えている手順で再分割・再読み込みをすると、逆になっちゃうときがあるんだよね、これが。
そういうときは、両方のウインドウでバッファ切り替えをするんだけど、これがちょっと面倒くさく感じてきた。ということで、分割したウインドウのバッファを入れ替えるコマンド swap-buffers を作ってみた。
いろいろ怪しげな部分はあるんだけど、左右分割のバッファを入れ替えることはできている。
まず、左のウインドウに a.txt 、右のウインドウに b.txt を表示している状態のフレームがあるとする。
この時、M-x swap-buffers を実行する。オレは M-x を helm-M-x に入れ替えてるので、そういう表示になっているけど、そこら辺は気にしないで良いよ。
そして、実行すると、次のように左に b.txt 右に a.txt となり、期待通りに入れ替わっている。
キーバインドを C-x \ に定義しているので、もちろんそのキー入力でも実行できる。
さっき「怪しげ」と書いたのは、いくつかの理由がある。
(get-lru-window) でいいの?という不安ネームスペースと言っても prefix を付けるだけなので、 my- とか付けちゃえば良いわけだけど、my- はイマイチだなぁと思いつつ、他に良いものが思いつかずにいまのところナシにしちゃっている。
3分割以上の場合、どことどこを入れ替えるべき?という定義の問題もあって、どうしようかなぁというところ。まぁ、左右入れ替えがオレのニーズなので、それが実現できれば OK なので、しばらくはこのままなのかも。。。
(get-lru-window) が正しいのかどうかは、、、もうちょっと Emacs Lisp のリファレンスをしっかり読まないと良く分からない。
あと、なんか、こういったニーズは、割とみんな持ってるんじゃない?と思っていて、既にこれを解決するソリューションがありそうな気がしている。更には Emacs のデフォルトで存在していてもおかしくないと思っている。
しかし、もうちょっとスマートに Emacs Lisp を書けるようになりたいなぁ。まだまだマニュアルとにらめっこしないと分からない部分が多い。
昨日と同じくテキスト編集系の新機能の中から、今日は新しいコマンド delete-duplicate-lines を調べる。
まぁ、これはヒトコト「重複行を削除する」で言い表せるようだ。例えば次のようなテキストがあったとする。aaa が2行あり、重複している。
aaa
aaa
bbb
ccc
これを範囲選択し、M-x delete-duplicate-lines を実行すると、次のようになる。
aaa
bbb
ccc
重複していた aaa がひとつに集約されている。要するに uniq コマンドと同じような動作を Emacs 内で行なってしまおうというものらしい。
ただ、それだけだと面白くなかったのか、このコマンドは「ソート結果じゃなくても uniq できる」のがウリのひとつのようだ。
つまり、このように重複した行が連続していなくとも、うまく見つけて、削除してくれる。
aaa
bbb
ccc
aaa
上記の状態で、M-x delete-duplicate-lines を実行するとこうなる。
aaa
bbb
ccc
期待通り。
まぁ、もっと大量のテキストがある場合は、sort TEXT | uniq を使って重複行を削除したほうが良いのではないかと思うけど、ちょっとしたテキストを操作する場合にはこっちを使うのも良いかもなぁという感じ。
普段多用はしないと思うけど、存在は覚えておこうっと。
Emacs はエディタにもなるので、その編集機能についての新機能もたくさん NEWS ファイルには書かれていた。その中で今日は rectangle-mark-mode を調べてみる。
rectangle-mark-mode は矩形の領域がマーク(選択)できるモードで、C-x SPC にキーバインドされている。
例えば、次のような状態のテキストがあるとする。Markdown でリストを書いてたけど、BBB、CCC、DDD のインデントを間違えたので、一段上げたいと思っている。
このようなときに、今までの Emacs でも delete-rectangle を使えば、矩形領域を一発で削除できた。
手順としてはこんな感じ。
C-SPC (set-mark-command) を実行して位置をマーク* のところまでカーソルを移動させて、C-x r d (delete-rectangle) を実行C-SPC で領域選択したときのキャプチャが下の画像。水色で表示しているのが選択された領域。
このとき C-x r d (delete-rectangle) ではなく、間違えて delete キー (delete-backward-char) を叩いてしまうと、次のような状態になり、期待と違ってしまう。
Emacs 24.4 で追加された C-x SPC (rectangle-mark-mode) を使うと、これが次のような手順になる。
C-x SPC (rectangle-mark-mode) を実行して位置をマーク* のところまでカーソルを移動させて、delete (delete-backward-char) を叩くC-x SPC で領域選択したときのキャプチャが以下の画像。C-SPC で領域選択したときとの違いが分かる。
実行結果はどちらも同じなので、好きな方を使えば良いのだけど、新しい rectangle-mark-mode を使ったほうが、キー操作はシンプルになる気がするねぇ。
とは言っても、並べて比較してみると、打鍵数は1個しか減ってなかったのであった(笑)
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 従来 | C-SPC |
カーソル移動 | C-x |
r |
d |
| 新規 | C-x |
SPC |
カーソル移動 | delete |
まぁ、でも、選択領域が目で見て分かりやすくなっている点は C-x SPC の利点だと思うので、積極的に使っていく方がこれからの Emacs ライフには良いのかも知れない。