Заставить Emacs использовать определенную кодировку тогда и только тогда, когда это не вызовет проблем - PullRequest
6 голосов
/ 16 мая 2011

В моем файле .emacs я использую строку

'(setq coding-system-for-write 'iso-8859-1-unix)

, чтобы Emacs сохранял файлы в кодировке iso-8859-1-unix.Когда я ввожу символы, которые не могут быть закодированы таким образом (например, «Łódź»), мне предлагается выбрать другую кодировку, но после ввода iso-8859-1-unix в минибуфер файл сохраняется исимволы теряются.

Если я просто нажму клавишу ввода в приглашении, файл будет сохранен в Unicode, а когда я закрою и снова открою Emacs, он снова будет интерпретирован как файл Unicode.Если я затем удаляю оскорбительные символы, сохраняю файл, закрываю и снова открываю Emacs в другой раз, он по-прежнему интерпретируется как файл Unicode - из которого я делаю вывод, что он все еще был сохранен в Unicode, даже при сохранении в iso-88591-unix был бы возможен.

Так есть ли способ заставить Emacs записывать файл в iso-8859-1, когда это возможно, и никогда не сохранять его в этой кодировке, если при этом будут сожрать символы?

Заранее большое спасибо,

Thure Dührsen

Ответы [ 4 ]

1 голос
/ 22 августа 2011

В соответствии со строкой документа для coding-system-for-write, вы не должны устанавливать ее глобально.

Возможно, вы ищете (prefer-coding-system 'iso-8859-1-unix)?

0 голосов
/ 17 мая 2011

Я бы попытался написать функцию ловушки времени сохранения, которая проверила бы содержимое буфера и соответственно установила кодировку.При использовании find-coding-system-region не нужно много работать.

0 голосов
/ 14 августа 2011

Следующее должно заставить Emacs спрашивать, когда кодировка буфера не , с которой emacs настроен для сохранения файла.Затем Emacs предложит вам выбрать одну из «безопасных» кодировок.

(setq select-safe-coding-system-accept-default-p
      '(lambda (coding)
         (string=
          (coding-system-base coding)
          (coding-system-base buffer-file-coding-system))))
0 голосов
/ 17 мая 2011

Попробуйте

(setq-default buffer-file-coding-system 'iso-8859-1)

Edit:

Включая предложение AProgrammer, мы получаем

(defun enforce-coding-system-priority ()
  (let ((pref (car (coding-system-priority-list)))
        (list (find-coding-systems-region (point-min) (point-max))))
    (when (or (memq 'undecided list) (memq pref list))
      (setq buffer-file-coding-system pref))))

(add-hook 'before-save-hook 'enforce-coding-system-priority)

(prefer-coding-system 'iso-8859-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...