2013年1月28日月曜日

Emacsと改行の問題

Emacsは国際条約で禁止すべきだ、という意見もあるが、私は最近Emacsを見なおした派。文章を書くのは全部Emacs上にしたい。とはいえ、ちょっと厄介なのが改行の扱い。Emacs上ではauto-fill-modeで文章をある文字数で改行したほうが扱いやすい。TeX(これも禁止の声が上がっている)だとこれで問題ないのだけど、HTMLやブログの場合、改行が無視されずそのまま表示される。これはウィンドウ幅に合わせて表示を変えたいとき(普通、HTMLやブログではそうだと思う)にとても困る。

そこで、というかlonglines-modeというものが用意されている。これは、auto-fillではsoft line breakのみを挿入し、改行がEmacs上だけで意味を持つようにするものらしい。soft line breakはコピー・ペーストの時には削除されるようなので、上の問題が解決される、ように思ったのだが。残念なことに、longlines-modeではsoft line breakは削除されるが、その位置に空白が残ってしまうようだ。英文では問題無いだろうが、日本語では問題になる。

そこで、簡単なスクリプトを書いてみた、というのが本題。

(defun unfill ()
  (interactive)
  (while (re-search-forward ".+$" nil t)
    (if (not (= (char-after (+ 1 (point))) ?\n))
        (delete-char 1))))

unfillを実行すると、空白行とパラグラフ最後の改行以外の改行が削除される。もっとエレガントに書けるかもしれないけど、とりあえず動いているので満足。

3 件のコメント:

  1. 日本語向けの longlines-jp.el があるので,日本語まじりならこちらがいいかと思います.
    http://www.emacswiki.org/LongLinesJpMode

    使い方は longlines.el とほぼ同じです.

    返信削除
  2. やっぱり既存の実装がありましたか。ありがとうございます。

    返信削除
    返信
    1. SKKが入っていることを前提にしているらしきコードがあったので、とりあえずコメントアウトした。

      削除