back

「Emacs 電子六法」は、総務省の「法令データ提供システム」に登録された法令データを利用し、法令を検索・閲覧するための GNU Emacs の拡張プログラムです。

Download: laws.el α version 0.8.7

(version 0.8.5 から、ブックマークの出力形式を変更したので、0.8.4 以前のデータの場合、データの形式を変換する必要があります。~/.laws.d/.bookmark と ~/.laws.d/.recent を削除するか、または、一度 *scratch*バッファで (laws-convert-files) を評価してください。)

開発予定:

開発環境:

※ MS Windows上での動作確認はまだ行っていません。


特徴

以下のような特徴を持っています。


必要なもの

Emacs 22.1 より前のバージョンでは動作しません。

次のプログラムをあらかじめインストールしてください。

次のプログラムをインストールしないと一部の機能は利用できません。


インストール

`必要なもの' で挙げた w3m, revive.el, apel がインストールされているものと仮定します。インストールされていない場合、このプログラムは動作しません。

laws.el をダウンロードして、ロードパスの通ったディレクトリにコピーしてください。(必要に応じて、バイトコンパイルしてください。)

以下のコードを .emacs に書いて Emacs を再起動するか、M-x load-library などでロードしてください。

設定:

(require 'laws)

注意

  1. 法令データファイルの拡張子は、.law となります。
  2. ホームディレクトリ以下に自動的に .laws.d という名前のディレクトリが作られます。法令データ提供システムからダウンロードしたファイルなどは、このディレクトリに保存されます。

使い方

このプログラムは、二つのメジャーモードで構成されています。ひとつは、laws-index-mode で、法令データにアクセスするためのインターフェイスを提供するものです。もうひとつは、laws-mode で、法令ファイルを閲覧するための種々の機能を備えています。

M-x laws

とすると、*Laws* という名前のバッファが開き、laws-index-mode になります。これが、法令データにアクセスするためのインターフェイスです。

laws-iswitchb という、completion や iswitchb をフロントエンドに使ったコマンドもあります。

M-x laws-iswitchb

このコマンドを利用するなら、migemo をインストールして置くのが良いでしょう。また、iswitchb を利用するなら、iswitchb で migemo を使えるようにする設定が必要です。ローマ字による日本語のインクリメンタル検索によって法令名を検索し、法令ファイルを開くことができるようになります。開いた法令ファイルのメジャーモードは laws-mode になります。

前置引数を付けてコマンドを起動すると、検索対象の法令を「ダウンロード済みの法令」、「ブックマークに登録された法令」、「全法令」の中から選択して切り替えることができます。全法令の場合は、対象の法令数が、法令データ提供システムに登録された8千数百に及ぶ(略称法令名を含む)ので、かなり重いかも知れません(iswitchbを利用した場合)。

起動

法令データ提供システムから必要なデータを取得するため、インターネットに接続された環境が必要です。

M-x laws

として起動してください。初回起動時、`Make index files?' と聞いてくるので、`y' と答えます。しばらくして処理が完了すると、下のような画面になります。この画面は、法令データ提供システムの「事項別分類索引」と同じようなものです。

laws-01.png

メニューバーには、`Laws' という項目が追加されています。また、ヘッダラインに見える、Opened, Recent, Search... は、それぞれ特定のモードを表わしています。メジャーモードとしては laws-index-mode というひとつのモードですが、表示上のモード名を変更して、各モードごとに異なった機能を割り当てています。

各モードに遷移するには、先頭の一文字(O, R, S, B, I, D, A)を小文字で入力します。各モードは、それぞれ以下のようになっています。

Opened 現在開いている法令ファイルの一覧
Recent 最近開いた法令ファイルの一覧
Search 法令データ提供システムの「法令名の用語索引」に該当
Bookmark ブックマークに登録されている法令ファイルの一覧
Index 法令データ提供システムの「事項別分類索引」に該当
Directory 法令の公布年順による法令一覧
Abbrev 略称法令名による法令一覧

法令データ提供システムは、月に一度程度更新されると思われますが、更新を反映するには、初回起動時と同じく、更新に合わせて、インデックスファイルを生成する必要があります。メニューバーの`Laws'メニューから、「Other > Make Index Files」 を実行してください。また、

M-x laws-retrieve-index

として実行することもできます。最後にインデックスを取得してから更新があった場合に、インデックスファイルの番号付きバックアップファイルを作ります。

オンラインモードとオフラインモードがあり、モードラインのブックアンコンをクリックすることで、ON/OFF を切り替えることができるようになっています。インターネットに接続されていないなら、オフラインモードにしてください。オフラインモードの場合は、データの取得は行いません。

online.png
M-x laws-online-or-offline

として切り替えることもできます。

法令データを開く

法令データをダウンロードして閲覧するまでの方法を説明します。基本的に、法令データ(html)を取得して、w3m でダンプしたテキストを表示するまで、スペースキーひとつでシームレスに行うことができるので、ダウンロードする/しないについて意識する必要はありません。

実際に、Indexモードから法令データを開いてみましょう。バッファの内容は次のようになっています。

+ 憲法
+ 国会
+ 行政組織
...

各行の項目はフォルダで、+ はフォルダが閉じていることを示しています。ポイント位置のフォルダを開くには、スペースキーを押します。+ が - になり、分類されている法令名の一覧が表示されます。もう一度スペースキーを押すと、フォルダが閉じます。次のイメージは、憲法のところでスペースキーを押して、フォルダを開いた状態です。

laws-02.png

ここで、n をタイプするとカーソルが一行下に移動します。また、p をタイプすると一行上に移動します。一行下の「日本国憲法」のところにカーソルを移動させて、スペースキーを押してみましょう。ダウンロードが始まって、しばらくすると下のような画面になります。メニューバーに `Articles' と `Laws' という項目が追加されます。バッファのメジャーモードは、法令ファイルを閲覧するための laws-mode です。q をタイプすると元のIndexモードに戻ります。

laws-03.png

Directory, Abbrev の各モードも、Indexモードと同じように操作して利用できます。

ダウンロードしたhtmlデータとw3mでダンプしたテキストは、ディレクトリ ~/.laws.d 以下に保存されます。法令ファイルを開くとき、ダンプしたファイルが存在すれば、そのファイルを開きます。存在しなければ、法令データ提供システムからダウンロードします。法令が改正された場合などは、再度htmlデータを取得する必要があります。この場合は、メニューバーの`Laws'メニューから、「Other > Retrieve HTML Data」 を実行することで、ポイント行の法令を取得し直すことができます。また、

M-x laws-retrieve-html

として実行することもできます。最後にHTMLデータを取得してから更新があった場合に、HTMLデータの番号付きバックアップファイルを作ります。

どのモードからでも S (大文字)をタイプすると、ミニバッファにフォーカスが移り、プロンプトが現われます。ここで、検索語を入力します。

Search: 民法_

C-m すると、Searchモードに移行します。Searchモードは、検索結果を表示するためのモードです。次のイメージは、`民法'を検索した結果です。

laws-04.png

前置引数を付けてコマンドを実行すると、バッファの先頭に検索結果が追加されます。C-u S とタイプして、`憲法'を検索した結果が下のイメージです。

laws-05.png

Indexモードで説明したように + は閉じているフォルダを示しています。個々の法令名は最下層の - の項目になります。上のイメージの例で、4行目の

+ 「帝国憲法発布記念章制定の件」

と表示されている行は、略称法令名にマッチしたケースです。n をタイプしてその行に移動し、スペースキーを押すとフォルダが開きます。更に n をタイプしてスペースキーを押して、「明治二十二年勅令第百三号」という法令を開いてみましょう。

- 「帝国憲法発布記念章制定の件」
  - 明治二十二年勅令第百三号(帝国憲法発布記念章制定ノ件)(明治二十二年八月三日勅令第百三号)

次のイメージが実行した結果です。画像の表示は、Emacs に付属する iimage-mode を利用しています。(M-x iimage-mode で enable/disable をトグルできます。)

laws-06.png

ブックマーク

頻繁に参照する法令を、あらかじめブックマークに登録して置けば、より簡単に法令データにアクセスすることができるようになります。

Bookmark を除く各モード上で A をタイプすることによって、ポイント位置の法令をブックマークに登録することができます。

ブックマーク上では、N と P でポイント位置の法令の行位置を修正できます。N をタイプすると一行下に移動し、P をタイプすると一行上に移動します。

登録済みの法令をブックマークから削除するには、m をタイプして削除マークを付けてください。その後、x をタイプして削除を実行します。下の例のように、登録されている「明治二十二年勅令第百三号(帝国憲法発布記念章制定ノ件)」を削除するには、この法令上にカーソルを置いて、m をタイプし、続いて x をタイプします。行頭の D が削除マークです。

D- 明治二十二年勅令第百三号(帝国憲法発布記念章制定ノ件)(明治二十二年八月三日勅令第百三号)
 - 日本国憲法(昭和二十一年十一月三日憲法)

この、m で削除マークを付けて、x で削除を実行する機能は、Opened, Recent でも同じように働きます。

法令ファイルの閲覧

実際に法令ファイルを閲覧してみましょう。例えば、「民法」を開いてみてください。

laws-08.png

条文を一条づつ参照するには、n と p をタイプします。n は次の条文に移動し、p は前の条文に移動します。

条文番号を指定して参照することもできます。「第九十九条」を参照したければ、数字キーを 99 とタイプし、次にスペースキーを押します。また「第三百九十八条の二」といった条文番号なら、数字をハイフンで繋ぎます。つまり、398-2 と続けてタイプして、スペースキーを押します。同様に、数字をハイフンで繋ぎさえすれば「第○○条の○○の○○...」といった形式でも参照できます。

laws-09.png

一旦、q をタイプして laws-index に戻り、今度は、Searchモードで「会社法」を検索して開いてみましょう。

laws-10.png

n を二度タイプして「第二条」を参照してみてください。次に C-i を押してみます。すると下線が付いている「第四百三十九条」という箇所(アンカー)にポイントが移動します。ここで、スペースキーを押します。すると下のイメージのように、参照している条文が分割されたウインドウに表示されます。

laws-11.png

同じように、アンカーが他の法令を指している場合には、その法令を開き、参照している条文を表示します。24 とタイプし、スペースキー押して「第二十四条」を参照してください。次に、C-i を二度押します。更に続けてスペースキーを押します。次のイメージは、「会社法 第二十四条」の二番目のアンカーの位置でスペースキーを押した結果です。アンカーの「同法第十七条」は「商法」を指しているので「商法」が開かれます。(アンカーを逆に辿るには、C-M-i を押します。)

laws-12.png

参照用のウインドウをスクロールするコマンドもあります。[ と ] です。ウインドウがひとつなら、カレントバッファの現在の条文の項を前後に移動します。他のウインドウがあれば、そのウインドウの現在の条文の項を前後に移動します。また他のウインドウにフォーカスするには、Emacs 標準の方法以外に o をタイプして行うことができます。

参照用のウインドウを消去するには、Emacs 標準の方法以外に、v をタイプして行うこともできます。このコマンドはトグルするので、もう一度 v をタイプすると消えたウインドウが現われます。

laws-15.png     →     laws-16.png

ここで、アンカー上でスペースキーを押した場合、状況によって結果が異なるという仕様上の問題を注意しておきます。実際にやってみましょう。上の例の、「会社法 第二十四条」の二番目のアンカーの位置で、スペースキーを押して「商法 第十七条」を表示させた状態から、C-i をタイプして、アンカーをひとつ進め「第十八条」の位置にポイントを置いてください。ここでスペースキーを押します。次のように「商法 第十八条」が表示されます。これは問題ありません。

laws-20.png

今度は、そのままの状態で、v をタイプし、参照用のウインドウを消去してからスペースキーを押してください。「会社法 第十八条」が表示されます。

laws-21.png

「同法第十七条及び第十八条」とありますから、「第十八条」とは「商法」を指すはずですが、「第十八条」というアンカーが指している法令が特定できないので、このような結果になります。動作としては、参照用のウインドウが表示されている場合には、そのウインドウの法令が検索対象となり、ウインドウが現在のバッファだけの場合には、そのバッファの法令が検索対象になります。

ウインドウ構成

上のイメージで、エコーエリアに、

(+)[5/5]

といった表示がされていました。これは、スペースキーで条文を参照したときの、ウインドウの構成状態を保存したことを示すものです。ここでは、「条文を参照した履歴」のことを「ウインドウ構成」 と呼んでいます。上の例では、5個のウインドウ構成が保存され、そのうちの5番目という意味です。

保存されている訳ですから、前後に辿ることができます。, (カンマ)でひとつ遡り、. (ピリオド)でひとつ進みます。

新しく条文を参照した場合には、「現在」のウインドウ構成の「次」の位置に追加されるようになっています。「現在」のウインドウ構成が[3/5]なら、ここで新しく条文を参照した場合のウインドウ構成は、[4/6]の位置になります。

「現在」のウインドウ構成を上書きすることができます。例えば、下の左側のイメージのようにポイントの下のテキストが読めないので、ポイント行を調整してから w をタイプし、続けて o をタイプします。

[3/5] Override winconf? (y or n) 

と聞いてくるので `y' と答えます。すると、右側の結果になります。

laws-13.png     →     laws-14.png

ポイント行の位置を調整するには、一行単位でスクロールするコマンドも利用できます。j と k をタイプしてください。

現在のウインドウ構成を削除することもできます。w d と続けてタイプすると、問い合わせてくるので、答えてください。また、現在のウインドウ構成を再現するには、w c とタイプしてください。

対応する括弧

対応する入れ子になった括弧を、6階層まで異なった色で着色できます。「会社法 第三十四条」を参照してみてください。第二項は括弧が入れ子になっていて読み難いです。

laws-17.png

ここで、e をタイプすることによって括弧を着色できます。同じ色の付いたテキストを、目で追って繋げて読むことができるようになります。e はトグルするコマンドなので、もう一度 e をタイプすると、着色した色を消去します。

laws-18.png

また、括弧を非表示にすることもできます。d e と続けてタイプしてください。元の括弧は #記号で置き換えられます。

laws-19.png

再表示するには、d d と二度続けて d をタイプしてください。

アウトライン機能

目次のある法令では、目次内のアウトラインヘッダと本文内のアウトラインヘッダ間で交互に移動することができます。

例えば、「会社法」を開いて t をタイプしてください。目次部分が表示されます。

laws-22.png

ここで、スペースキーを押すと、本文に移動します。

laws-23.png

もう一度、スペースキーを押すと、また目次に戻ります。

目次部分で、前方のアウトラインヘッダに移動するには、f をタイプします。後方に移動するには、b をタイプします。どのアウトラインヘッダからでも、スペースキーで目次と本文間で交互に移動できます。

アウトラインの下位の階層からひとつ上の階層に移動するには、u をタイプします。

同階層のアウトラインヘッダ間で移動するには、n と p をタイプします。n は前方に移動し、p は後方に移動します。

目次内でアウトラインヘッダ間の移動を行うコマンドは、すべて本文内でも同様に動作します。目次部分からスペースキーで本文に移動し、f, b, u, n, p をタイプして試してみてください。


コマンド一覧

Emacs の任意のシチュエーションで、M-x (execute-extended-command)で実行可能なコマンドの一覧です。これ以外のコマンドは、laws-index-mode か、laws-mode で実行してください。

keycommanddescription
-lawsインデックス起動
-laws-iswitchb法令ファイルを開く
-laws-search法令名の検索

キーバインド一覧

laws-index-mode

keybindingdescription
C-jlaws-index-goto-folder-
ESCPrefix Command-
SPClaws-index-open-or-close-
?laws-index-help-
Alaws-index-bookmark-add-
Nlaws-index-bookmark-move-down-
Plaws-index-bookmark-move-up-
Qlaws-exit-
Slaws-index-search-
a??-
b??-
d??-
glaws-index-update-
i??-
jlaws-index-scroll-up-line-
klaws-index-scroll-down-line-
mlaws-index-put-deletion-flag-
nlaws-index-next-line-
o??-
plaws-index-previous-line-
qbury-buffer-
r??-
s??-
ulaws-index-upper-level-
xlaws-index-do-delete-marks-
<follow-link>mouse-face-
<mouse-2>laws-index-mouse-open-or-close-
M-<laws-index-beginning-of-buffer-
M->laws-index-end-of-buffer-
M-[laws-index-open-all-
M-]laws-index-close-all-
M-nlaws-index-next-folder-
M-plaws-index-previous-folder-

laws-mode

keybindingdescription
TABlaws-forward-anchor-
ESCPrefix Command-
SPClaws-search-or-push-anchor-
,laws-backward-winconf-
-laws-digit-argument-suffix-
.laws-forward-winconf-
0 .. 9digit-argument-
<laws-restore-first-winconf-
>laws-restore-last-winconf-
?laws-help-
Qlaws-exit-
[laws-backward-paragraph-
]laws-forward-paragraph-
blaws-previous-visible-heading-
claws-move-to-tables-
dPrefix Command-
elaws-fontify-or-defontify-paren-
flaws-next-visible-heading-
gPrefix Command-
jlaws-scroll-up-screen-
klaws-scroll-down-screen-
nlaws-forward-article-
olaws-other-window-
plaws-backward-article-
qlaws-view-quit-
tlaws-goto-toc-
ulaws-up-heading-
vlaws-display-toggle-
wPrefix Command-
<follow-link>mouse-face-
<mouse-2>laws-push-mouse-2-
g blaws-previous-visible-heading-
g claws-move-to-tables-
g flaws-next-visible-heading-
g glaws-heading-jump-
g nlaws-forward-same-level-
g plaws-backward-same-level-
g tlaws-goto-toc-
g ulaws-up-heading-
d dlaws-decompose-paren-
d elaws-compose-paren-
w Dlaws-winconf-delete-all-
w alaws-winconf-add-
w claws-restore-current-winconf-
w dlaws-winconf-delete-
w flaws-restore-first-winconf-
w hlaws-winconf-backward-delete-
w ilaws-winconf-insert-
w llaws-restore-last-winconf-
w mlaws-winconf-message-
w nlaws-forward-winconf-
w olaws-winconf-override-
w plaws-backward-winconf-
M-TABlaws-backward-anchor-

ユーザー変数

以下は、カスタマイズ可能な変数と初期値、設定例です。

法令ファイルの行間: laws-line-space

初期値: nil

(setq laws-line-space 5)

laws-index-mode の初期モード: laws-index-initial-mode

初期値: 'Index

(setq laws-index-initial-mode 'Bookmark)

最近開いたファイルの最大数: laws-recent-max

初期値: 100

(setq laws-recent-max 50)

ヘッダラインを表示する: laws-use-index-header-line

初期値: t

(setq laws-use-index-header-line nil)

法令ファイルの文字コード: laws-coding-system-for-write

初期値: 'euc-jp-unix

(setq laws-coding-system-for-write 'japanese-shift-jis-dos)

参照条文を表示するウィンドウの高さ: laws-window-height

初期値: 15

(setq laws-window-height 20)

検索したとき、recenter に与えるスクリーン行数: laws-reposition-line

初期値: 2

(setq laws-reposition-line 1)

法令内のアンカーをクリッカブルにする: laws-anchor-clickable

初期値: nil

(setq laws-anchor-clickable t)

iswitchb を利用する: laws-use-iswitchb

初期値: nil

(setq laws-use-iswitchb t)

laws-iswitchbでの検索対象の法令: laws-iswitchb-initial-list

初期値: 'download

(setq laws-iswitchb-initial-list 'all)

laws-iswitchbでのミニウインドウの最大高さ: laws-max-mini-window-height

初期値: max-mini-window-height

(setq laws-max-mini-window-height 1)

オンラインモードで起動する: laws-online-mode

初期値: t

(setq laws-online-mode nil)

フェイスの設定

設定方法

フェイスのカラーを変更したい場合には、

M-x customize-group RET laws-faces RET

で設定可能です。また、ポイント位置のフェイス名を調べるには、フェイスが設定されている箇所にポイントを置いて、

M-x describe-face

として調べることができます。表示された *Help* バッファの (customize this face) をクリックして設定することができます。

以下のような関数を使って、.emacs で直接設定することもできます。

(set-face-foreground 'laws-article-number-face "pink")   ; 前景色
(set-face-background 'laws-article-paragraph-face "red") ; 背景色
(set-face-italic-p 'laws-anchor-article-face t)          ; イタリックにする
(set-face-bold-p 'laws-anchor-article-face t)            ; ボールドにする
(set-face-underline-p 'laws-anchor-article-face nil)     ; アンダーラインを付けない

フェイス一覧

facedescription
laws-index-flag-face-
laws-index-header-key-face-
laws-index-header-selected-face-
laws-index-header-foreground-face-
laws-volume-face-
laws-chapter-face-
laws-section-face-
laws-subsection-face-
laws-subsection2-face-
laws-comment-face-
laws-anchor-article-face-
laws-anchor-name-face-
laws-supplementary-face-
laws-paren1-face-
laws-paren2-face-
laws-paren3-face-
laws-paren4-face-
laws-paren5-face-
laws-paren6-face-
laws-article-number-face-
laws-article-paragraph-face-
laws-article-item-face-
laws-anchor-paragraph-face-
laws-article-subnumber-face-
laws-article-subitem1-face-
laws-article-subitem2-face-
laws-article-subitem3-face-
laws-article-subitem4-face-

既知の問題

---


TODO


変更履歴

version 0.8.7 (2008-04-26 revision 1.110)

version 0.8.6 (2008-04-06 revision 1.106)

version 0.8.5 (2008-04-05 revision 1.103)

version 0.8.4 (2008-04-04 revision 1.102)

version 0.8.3 (2008-03-30 revision 1.95)

version 0.8.2 (2008-03-23 revision 1.94)

version 0.8.1 (2008-03-19 revision 1.91)

最初のリリース


Last modified: Sat Apr 26 22:49:54 JST 2008
Copyright (C) 2007, 2008 Kazushi NODA All Right Reserved.

Valid HTML 4.01 Transitional Valid CSS