lsのエミュレーション
¶Diredは通常、外部プログラム ls
を使用して、Diredバッファに表示されるディレクトリ一覧を生成します(Dired, the Directory Editor
を参照)。しかし、MS-WindowsおよびMS-DOSシステムにはそのようなプログラムは付属していません。もっとも、GNU ls
の移植版はいくつか利用可能です。そのため、これらのシステム上のEmacsでは、ls-lisp.el
パッケージを用いてLispで ls をエミュレートします。ls-lisp.el は ls
を概ね完全にエミュレートしますが、そのエミュレーション特有のオプションや機能がいくつかあり、それらについて本節で説明します。
ls エミュレーションは多くの ls
スイッチをサポートしていますが、すべてをサポートしているわけではありません。サポートされているスイッチの一覧は以下の通りです:-A、-a、-B、-C、-c、-G、-g、-h、-i、-n、-R、-r、-S、-s、-t、-U、-u、-v、および -X。-F
スイッチは部分的にサポートされています(ファイルを分類する文字を付加しますが、シンボリックリンクの追従は妨げません)。
MS-WindowsおよびMS-DOSでは、Emacsのビルド時にls-lisp.elがプリロードされるため、これらのプラットフォームでは常にlsのLispエミュレーションが使用されます。移植版のlsを使用している場合、ls-lisp-use-insert-directory-programにnil以外の値を設定すると、変数insert-directory-programで指定された外部プログラムの使用に戻ります。
ls-lisp.el がファイルをソートする順序は、以下に説明するいくつかのカスタマイズ可能なオプションによって決まります。
デフォルトのソート順は、システムロケールから導出されるロケール固有のルールに従います。ls-lisp-use-string-collate を nil の値にカスタマイズすることで、ソート順をロケールに依存しないようにできます。
GNUおよびUnixシステムにおいて、ロケールのエンコーディングがUTF-8の場合、照合順序はUnicode Collation Algorithm
(UCA) に従います。MS-Windowsで同様の効果を得るには、変数 ls-lisp-UCA-like-collation に nil
以外の値を指定する必要があります(これがデフォルトです)。その結果得られるソート順序では、句読点、記号文字、および空白文字が無視されるため、.foobar、foobar、foo bar は大きく離れるのではなく、まとめて表示されます。
デフォルトでは、ls-lisp.el
は生成するディレクトリ一覧に大文字小文字を区別するソート順を採用しています。これは、他のプラットフォームと同様の表示にするためです。ファイルを大文字小文字を区別せずにソートしたい場合は、変数
ls-lisp-ignore-case に nil 以外の値を設定してください。
デフォルトでは、ls
の動作を再現するため、ファイルとサブディレクトリがまとめてソートされます。ただし、標準の MS-Windows/MS-DOS
ファイルマネージャーではディレクトリがファイルよりも先に表示されます。この動作を希望する場合は、オプション ls-lisp-dirs-first を nil
以外の値に設定してください。
変数 ls-lisp-verbosity は、ls-lisp.el が表示するファイル属性を制御します。値には nil か、links、uid、gid
のいずれか1つ以上の記号を含むリストを指定します。links
は、ファイルのデータに関連付けられている(別名 リンク)異なるファイル名の数を表示することを意味します。これは
NTFS ボリュームでのみ有効です。uid
は、ファイルの所有者であるユーザーの数値識別子を表示することを意味します。gid
は、ファイル所有者のグループの数値識別子を表示することを意味します。デフォルト値は (links uid
gid) であり、つまり 3 つのオプション属性がすべて表示されます。値 nil
は、これらの属性をいずれも表示しないことを意味します。
変数 ls-lisp-emulation は、前述の 3 つのオプション ls-lisp-ignore-case、ls-lisp-dirs-first、ls-lisp-verbosity のデフォルト値を設定することで、ls エミュレーションの動作を制御します。このオプションの値には、以下の記号のいずれかを指定できます。
GNUnilGNU システムをエミュレートします。これがデフォルトです。これにより、ls-lisp-ignore-case と ls-lisp-dirs-first が nil
に、ls-lisp-verbosity が (links
uid gid modes) に設定されます。
UNIXUnixシステムをエミュレートする。GNUと同様だが、ls-lisp-verbosityを(links uid
modes)に設定する。
MacOSmacOSをエミュレートします。ls-lisp-ignore-caseをtに、ls-lisp-dirs-firstとls-lisp-verbosityをnilに設定します。
MS-WindowsEmulate MS-Windows. Sets ls-lisp-ignore-case and
ls-lisp-dirs-first to t,
and ls-lisp-verbosity to nil on Windows 9X and to t on
modern versions of Windows. Note that the default emulation is not MS-Windows, even on Windows,
since many users of Emacs on those platforms prefer the GNU defaults.
ls-lisp-emulation のその他の値は、GNU と同じ意味になります。このオプションをカスタマイズすると、関数 ls-lisp-set-options が呼び出され、必要に応じて関連する 3
つのオプションが更新されます。ls-lisp.el の読み込み後(MS-Windows および
MS-DOS ではプリロードされている点にご注意ください)、customize
を使用せずにこの変数の値を変更した場合でも、同じ結果を得るために当該関数を手動で呼び出すことができます。
変数 ls-lisp-support-shell-wildcards
は、ファイル名パターンの扱いを制御します。これが nil
以外(デフォルト)の場合はシェル形式のワイルドカードとして扱われ、それ以外の場合は Emacs の正規表現として扱われます。
変数 ls-lisp-format-time-list
は、ファイルの日時の書式を定義します。Emacs が現在のロケールを判定できない場合を除き、この変数の値は無視されます。(ただし、ls-lisp-use-localized-time-format の値が nil 以外の場合、現在のロケールが利用可能であっても Emacs は ls-lisp-format-time-list に従います。詳細は後述します。)
ls-lisp-format-time-list の値は 2 つの文字列からなるリストです。1
つ目の文字列はファイルが年内に変更された場合に使用され、2 つ目の文字列はそれより古いファイルに使用されます。これら 2
つの文字列のいずれにおいても、‘%’
シーケンスを用いて時刻の一部を置換できます。例えば:
("%b %e %H:%M" "%b %e %Y")
なお、これらの ‘%’ シーケンスに置換される文字列は、現在のロケールによって異なります。時刻指定形式の詳細については、The Emacs Lisp Reference Manual の Time Parsing を参照してください。
通常、Emacsはファイルのタイムスタンプを、従来の形式またはISO形式のいずれかで表示します。ただし、変数 ls-lisp-use-localized-time-format の値が nil 以外の場合、Emacsは ls-lisp-format-time-list の指定に従ってファイルのタイムスタンプを表示します。ls-lisp-format-time-list 内の ‘%’
シーケンスはロケールに依存した月名および日名を生成するため、Diredの表示において列のずれが生じることがあります。ls-lisp-use-localized-time-format のデフォルト値は nil です。