link0ff (link0ff) wrote in ru_emacs,
link0ff
link0ff
ru_emacs

Автоматическая кодировка для команд

Что делать, если есть файлы в разной кодировке (например, `utf-8' и `koi8-r') и их нужно сравнивать командами `dired-diff' или `dired-backup-diff'? Приходится открывать файл, смотреть, какую кодировку он использует, а потом вручную указывать кодировку через `C-x RET c' перед запуском `dired-diff'. Слишком много движений, поэтому через defadvice можно навесить определение кодировки файлов и запуск команды с нужной кодировкой (дополнительно рекомендуется использовать UniCAD):

;; Get coding from the file, so diff will output in the correct coding:
(defadvice dired-backup-diff (around my-dired-backup-diff act)
  (let* ((filename (dired-get-filename t))
         (coding-system (with-temp-buffer
                          (insert-file-contents filename nil 0 1024)
                          buffer-file-coding-system))
         (coding-system-for-read coding-system)
         (coding-system-for-write coding-system))
    ad-do-it))

;; Get coding from the file, so diff will output in the correct coding:
(defadvice dired-diff (around my-dired-diff act)
  (let* ((filename (dired-get-filename t))
         (coding-system (with-temp-buffer
                          (insert-file-contents filename nil 0 1024)
                          buffer-file-coding-system))
         (coding-system-for-read coding-system)
         (coding-system-for-write coding-system))
    ad-do-it))


Аналогичная проблема существует также для `grep'. Как автоматически указать правильную кодировку перед запуском грепа, чтобы он искал в файлах с этой кодировкой. Я пока не нашел решения этой проблемы. Есть идеи, как это сделать?
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

  • 5 comments