ov 20150311.2228(in MELPA)
Overlay library for Emacs Lisp

概要

ov.elhelm-swoop.el(レビュー) の作者による
オーバーレイを扱うライブラリです。

といっても、これだけではよくわかりませんね。

というわけで、ここではひとつの実例を示しましょう。

改行が入っていない長い行のテキストは、どうしても見辛いですよね!

Emacsにはオーバーレイという機能を使って、
実際のテキストの内容を変更することなしに、
表示の変更のみを行えるようになっています。

この ja-period-newline-mode というマイナーモードは、
「。」(句点)の後に改行を入れて読みやすくします。

20150216042400.png
Fig1: 長い行…

20150216042407.png
Fig2: 句点の後に改行が入るよ!

僕は何度も読むべきテキストはpandoc(レビュー) によって
orgフォーマットに変更しています。

pandoc の変換結果はこのように長い行がたくさん出てきて、
そのまま読むのは苦痛です。

でも、長い行にもひとつだけメリットがあり、
grep で検索したときに前後の文も表示してくれるので、
文脈がわかります。

そこでオーバーレイの出番です!

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてovを使う方は
以下のコマンドを実行します。

M-x package-install ov

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name ov

コード mylisp-ja-period-newline.el(以下のコードと同一)

(require 'ov)
;;; バッファローカル変数を宣言
;;; defvar + make-variable-buffer-local
(defvar-local ja-period-newline-overlays nil)
(define-minor-mode ja-period-newline-mode
  "。の後に改行を入れてよみやすくする"
  nil " 。\\n" nil
  (if ja-period-newline-mode
      ;; 有効にしたときは
      (setq ja-period-newline-overlays
            ;; [。]をすべて検索し、改行を付加するオーバーレイを作成する
            (append (ov-set "[。、]\\|[.-]\\{3,\\}" 'after-string "\n")
                    ;; (ov-set "[-。、\n].\\{16,\\}?、" 'after-string "\n")
                    ))
    ;; 無効にしたときは全オーバーレイを削除する
    (mapc 'delete-overlay ja-period-newline-overlays)))

(provide 'mylisp-ja-period-newline)

実行方法

$ wget http://rubikitch.com/f/mylisp-ja-period-newline.el
$ emacs -Q -f package-initialize -l mylisp-ja-period-newline.el


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。