公開型メモ帳

ますます激しくなる物忘れへの対策

xyzzyとEmacsでPerlを外部フィルタとして使う

いつも忘れて調べなおす羽目になるので、自分用にメモしておく。
シンタックスハイライトも使えるようになったし、その練習も兼ねて。

外部フィルタコマンド(と勝手に呼んでいる)を使う方法

Emacsにも、xyzzyにも、選択済みリージョンを外部コマンドに渡してその結果で置き換える機能がある。リージョンを選択後、
Emacsでは、

C-u M-|

xyzzyでは、

C-x |

微妙に違っていつもごっちゃになる。

ちなみに、バッファ全体に外部フィルタをかけたい場合には、
Emacsでは、

C-x h

でバッファ全体を選択後に、やはり

C-u M-|

xyzzyでは専用のキーバインドがあって、

C-x #

の一発でいける。

ちなみに、Emacsの場合には、外部コマンド出力でリージョンを置き換えるのではなく、外部コマンド出力を新しいバッファに書き出すこともできる。その場合は単に、

M-|

とすればいい。リージョンを書き換えない分安心感がある(書き換えても簡単にアンドゥできるけど)。

使用例

数日前に『はてなブログでシンタックスハイライトに成功!(Perl6も!)』を書いたとき、

現時点ではてなブログは544種類のファイルタイプに対応!

と書いた。この時、ファイルタイプを数え上げるのに外部フィルタコマンドを使っている。

はてなブログのヘルプを見ると、『はてなブログが対応しているファイルタイプ』のリストがある。たくさんありすぎて、指を折って数える気にはなれない。

このページのHTMLを見てみると、こんな感じになっている:

<div class="section">
  <h4>A</h4>
  <p>
  <code>a2ps</code> <code>a65</code> <code>aap</code>
  <code>abap</code> <code>abaqus</code> <code>abc</code>
  <code>abel</code> <code>acedb</code> <code>actionscript</code>
  <code>ada</code> <code>aflex</code> <code>ahdl</code>
  <code>alsaconf</code> <code>amiga</code> <code>aml</code>
  <code>ampl</code> <code>ant</code> <code>antlr</code>
  <code>apache</code> <code>apachestyle</code> <code>applescript</code>
  <code>arch</code> <code>art</code> <code>asm</code>
  <code>asm68k</code> <code>asmh8300</code> <code>asn</code>
  <code>aspperl</code> <code>aspvbs</code> <code>asterisk</code>
  <code>asteriskvm</code> <code>atlas</code> <code>autohotkey</code>
  <code>autoit</code> <code>automake</code> <code>ave</code>
  <code>awk</code> <code>ayacc</code><br />
  </p>
</div>

「A」で始まるものだけでこれだけあって、これが「Z」まである。

さて、ここからファイルタイプだけ抜き出してみる。
ファイルタイプはすべて

<code> ファイルタイプ </code>

という形をしているから、これを抜き出せばいい。

具体的には

  1. EmacsバッファにHTMLを貼付け
  2. ファイルタイプリストの部分をリージョン選択
  3. 外部フィルタコマンド( M-| )

ここで外部コマンドを打ち込めるようになるので、

perl -nE "say for /<code>(.*?)<\/code>/g"

をタイプしてエンター。
(ここではWindowsなので二重引用符「"」を使っている。Linux系では「'」で。)
すると、

a2ps
a65
aap
abap
abaqus
abc
... 以下たくさん

と、見事ファイルタイプのリストが新しいバッファに出力される。

最後に行数を数えてみると544行なので、はてなブログで対応しているファイルタイプは544種類。
めでたしめでたし。