ls
のエミュレーション ¶Diredは通常、Diredバッファーで表示するディレクトリーリストを生成するために、外部プログラムのls
を使用します。しかし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では、ls-lisp.elはEmacsが構築されるとき事前ロードされるので、それらの環境では常にls
のLispエミュレーションが使用されます。ポートされたls
がある場合、ls-lisp-use-insert-directory-program
を非nil
値にセットすることにより、変数insert-directory-program
にセットされた名前の外部プログラムを使用するように戻すことができます。
ls-lisp.elがファイルをソートする順序は、以下で説明するいくつかのカスタマイズ可能なオプションに依存します。
デフォルトのソート順は、システムlocaleから派生したlocale固有ルールにしたがいます。ls-lisp-use-string-collate
をnil
値にカスタマイズすることにより、localeから独立したソート順にすることができます。
GNUおよびUnixシステムでは、localeのエンコーディングがUTF-8のときの照合順はUCA(Unicode
Collation Algorithm:
Unicode照合順序アルゴリズム )にしたがいます。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
は、そのファイルデータに関連付けられている(links
toとも言います)別のファイルの数を表示することを意味し、これはNTFSボリュームでのみ有用です。uid
はそのファイルを所有するユーザーの、数字による識別子を表示することを意味します。gid
はそのファイルの所有者のグループの、数字による識別子を表示することを意味します。デフォルト値は(links
uid gid)
で、3つのすべてのオプション属性が表示されます。値nil
はこれらの属性を何も表示しないことを意味します。
変数ls-lisp-emulation
は、上記で説明した3つのオプションls-lisp-ignore-case
、ls-lisp-dirs-first
、ls-lisp-verbosity
でデフォルトをセットすることにより、ls
エミュレーションの風合いを制御します。このオプションの値には、以下のシンボルを指定できます:
GNU
nil
GNUシステムをエミュレートします(デフォルト)。これはls-lisp-ignore-case
とls-lisp-dirs-first
をnil
に、ls-lisp-verbosity
を(links
uid gid modes)
にセットします。
UNIX
Unixシステムをエミュレートします。GNU
と同様ですが、ls-lisp-verbosity
は(links
uid modes)
にセットします。
MacOS
macOSをエミュレートします。ls-lisp-ignore-case
をt
に、ls-lisp-dirs-first
とls-lisp-verbosity
をnil
にセットします。
MS-Windows
MS-Windowsをエミュレートします。ls-lisp-ignore-case
とls-lisp-dirs-first
をt
にセットし、ls-lisp-verbosity
を、Windows
9Xではnil
、Windowsのモダンなバージョンではt
にセットします。これらのプラットフォームのEmacsユーザーの多くがデフォルトとしてGNUを好むため、たとえWindowsにおいても、デフォルトのエミュレーションはMS-Windows
ではないことに注意してください。
これ以外の値をls-lisp-emulation
にセットするのは、GNU
をセットするのと同じです。このオプションをカスタマイズすることにより、必要に応じて3つの従属オプションを更新するために、関数ls-lisp-set-options
が呼び出されます。ls-lisp.elがロードされた後(MS-WindowsとMS-DOSでは事前ロードされることに注意してください)に、customizeを使用せずにこの変数の値を変更した場合、この関数を手動で呼び出して、同じ結果を得ることができます。
変数ls-lisp-support-shell-wildcards
は、ファイル名パターンがサポートされる方法を制御します。非nil
(デフォルト)の場合、ファイル名パターンはシェルスタイルのワイルドカードとして扱われ、nil
の場合はEmacsの正規表現として扱われます。
変数ls-lisp-format-time-list
は、ファイルの日付と時刻の書式をフォーマットする方法を定義します。Emacsがカレントlocaleを判断できる場合、この変数の値は無視されます(しかしls-lisp-use-localized-time-format
の値が非nil
の場合、Emacsはカレントlocaleが利用できるときでもls-lisp-format-time-list
にしたがいます。以下を参照してください)。
ls-lisp-format-time-list
の値は、2つの文字列からなるリストです。最初の文字列は、そのファイルがその年に変更されている場合に使用され、2番目の文字列はそれより古いファイルに使用されます。2つの文字列では、日時の一部を置換するために‘%’シーケンスを使用できます。たとえば:
("%b %e %H:%M" "%b %e %Y")
これらの‘%’シーケンスにたいする文字列の置換は、カレントlocaleに依存することに注意してください。日時のフォーマットの仕様については、Time Parsing in The Emacs Lisp Reference Manualを参照してください。
Emacsは通常、ファイルのタイムスタンプの日時フォーマットに、慣習にしたがったフォーマット、またはISOスタイルのフォーマットを使用します。しかし変数ls-lisp-use-localized-time-format
の値が非nil
の場合、Emacsはファイルのタイムスタンプを、ls-lisp-format-time-list
の指定にしたがってフォーマットします。ls-lisp-format-time-list
の‘%’シーケンスは、localeにしたがった月の名前と曜日名を生成し、それによりDiredの列表示がずれるかもしれません。ls-lisp-use-localized-time-format
のデフォルト値はnil
です。