ところが、これにより、ls コマンドの出力形式が、
-rwxrwxrwx 1 iizu Local 24498 2011-01-03 20:44 .emacsから、
-rwxrwxrwx 1 iizu Local 24498 1月 3 20:44 .emacsと変った。つまり、月日が日本語形式になった。日のほうは、数字(day-of-month)だけだが…。
しかし、emacs の dired で一部のファイル名が認識できなくなった。
これは ls コマンドの出力形式が変ったために、ファイル名を取り出すパターンマッチングに失敗しているようだ。
-rwxrwx--- 1 iizu Local 38 12月 19 2003 .profile上記のように、月が 10 ~12 と2桁なら認識するが、1~9月の1桁だと認識しない。
このファイル名を認識するパターンは、「directory-listing-before-filename-regexp」という変数で定義されている。
・/usr/share/emacs/23.2/lisp/files.el
(defvar directory-listing-before-filename-regexp月の数字のパターンは、1桁でも良いようになっているようだが、実際にはなぜかマッチしない。
(let* ((l "\\([A-Za-z]\\|[^\0-\177]\\)")
...
;; Japanese MS-Windows ls-lisp has one-digit months, and
;; omits the Kanji characters after month and day-of-month.
;; On Mac OS X 10.3, the date format in East Asian locales is
;; day-of-month digits followed by month digits.
(mm "[ 0-1]?[0-9]")
(east-asian
(concat "\\(" mm l "?" s dd l "?" s "+"
"\\|" dd s mm s "+" "\\)"
"\\(" HH:MM "\\|" yyyy l "?" "\\)")))
他に何か理由があるのか、今の所不明である。
解決方法として、
- coreutils を 8.5-2 に戻す。
- directory-listing-before-filename-regexp を修正する。
- 環境変数 LANG を非日本語にする。
また、2の方法は、files.el を直接書き直しても、修正が反映されなかった。
そこで、3の方法で回避する。現在、emacs を起動する時、「.bashrc」で、
・.bashrc
alias e='export SHELL; env LANG=ja_JP.UTF-8 emacs &'という alias を定義して起動している。これを、
alias e='export SHELL; env LANG=C emacs &'と変更した。これにより、ls のコマンドの出力が
-rwxrwxrwx 1 iizu Local 24498 Jan 3 20:44 .emacsと英語形式になるので dired でもちゃんとファイル名が認識される。
ファイル名が日本語であっても、環境変数 LANG に関係無く正しく表示されるので、当分、これでやってみる事とする。
(2011年3月15日 追記)
emacs が 23.3 にバージョンアップしたところ、上記の問題は解決した。→「cygwin emacs 23.3」
0 件のコメント:
コメントを投稿