Re: Продолжение истории про buffer-file-coding-system ...
[email protected] (Nickolay Pakoulin)
| Newsgroups | gmane.emacs.xemacs.user.russian |
|---|---|
| Message-ID | <[email protected]> |
intro: "DA" == Dmitry Astapov <[email protected]> writes: DA> Если кто помнит, некоторое время тому назад я (в письме DA> <[email protected]>) жаловался на то, что у меня не DA> работает конструкция: DA> (modify-coding-system-alist 'file "\\.abc\\'" '(windows-1251 DA> . windows-1251)) DA> Точнее, она работает, но не до конца - указаная coding-system DA> используется для чтения файла с диска, но buffer-file-coding-system DA> всегда оказывается "равным" set-language-environment. Т.е., в моем DA> случае, я всегда получаю buffer-file-coding-system == koi8-u-unix. DA> Соответственно, если ты после исправлений на автомате давишь C-x C-s, то DA> файл записывается в кодировке koi8-u. Особенно замечательно работает это DA> для xml-файлов в кодировке utf-8.... DA> Чтобы этого не происходило, после открытия файла приходится делать M-x DA> set-buffer-file-coding-system RET ut-8 (например) RET. "И так 18 DA> раз"(с)анекдот. Надоедает до невозможности. Этот вопрос надо обсудить с разработчиками. Лично мне кажется приведенный отрывок кода несколько странным. Обойти его можно. Надо воспользоваться `insert-file-contents-post-hook'. Добавь в init файл такой код: (defun hack-file-codesys (filename visit return-val) ;; `coding-system' is set in `insert-file-contents' (when (or (coding-system-p coding-system) (and (symbolp coding-system) (find-coding-system coding-system))) (set-buffer-file-coding-system coding-system) coding-system)) (add-hook 'insert-file-contents-post-hook 'hack-file-codesys) У меня вроде работает (Хемакс 21.5 на винде). Попробуй. Приведённый код гарантированно не будет работать при открытии несуществующих файлов. До него просто не дойдет управление. Для того, чтобы при открытии несуществующего файла выставлялась нужная тебе кодировка, можно сделать вот так: (defun set-new-file-codesys (&rest ignored) (when (and (stringp buffer-file-name) (find-file-coding-system-for-read-from-filename buffer-file-name)) (set-buffer-file-coding-system (find-file-coding-system-for-read-from-filename buffer-file-name))) nil) (add-hook 'find-file-not-found-hooks 'set-new-file-codesys) У меня вроде как работает. Если воспользуешься моими предложениями, сообщи, пожалуйста, о результатах. Коля.