Emacs поддерживает огромное количество кодировок символов текста. Разумеется, имеются штатные универсальные средства изменения текущей кодировки буфера. Например, для того, чтобы перезагрузить буфер с использованием другой кодировки необходимо нажать C-x <ENTER> r <указать-требуемую-кодировку> <ENTER> yes <ENTER>.
Однако, пользователь в работе редко использует более трех или четырех кодировок. Хотелось бы иметь возможность однажды задать эти наши "ходовые" кодировки, а впоследствии быстро, с помощью горячей клавиши, минуя всю эту интерактивность, между ними, в случае необходимости, переключаться.
К счастью, у нас в руках emacs! И что еще круче - emacs lisp! Поэтому мы спокойно расширяем его возможности с помощью своего кода. Я написал функцию, реализующую нужный мне функционал (это, кстати, мое второе произведение на emacs lisp), поместил ее в файл .emacs и назначил горячую клавишу. Я доволен дальше некуда, надеюсь еще кому-нибудь пригодится )
Напомню также, что мой рабочий вариант файла .emacs можно взять здесь.
UPD: 05.05.2014
Поработал над кодом. Теперь функция выглядит значительно лучше, чем самый первый вариант )
UPD: 09.05.2014
Очередное улучшение кода.
Однако, пользователь в работе редко использует более трех или четырех кодировок. Хотелось бы иметь возможность однажды задать эти наши "ходовые" кодировки, а впоследствии быстро, с помощью горячей клавиши, минуя всю эту интерактивность, между ними, в случае необходимости, переключаться.
К счастью, у нас в руках emacs! И что еще круче - emacs lisp! Поэтому мы спокойно расширяем его возможности с помощью своего кода. Я написал функцию, реализующую нужный мне функционал (это, кстати, мое второе произведение на emacs lisp), поместил ее в файл .emacs и назначил горячую клавишу. Я доволен дальше некуда, надеюсь еще кому-нибудь пригодится )
(setq my-working-codings ["utf-8" "windows-1251" "koi8-r" "cp866"])
(setq my-current-coding-index -1)
(defun pa23-change-coding ()
"Change coding for current buffer."
(interactive)
(let (my-current-eol
my-next-coding-index
my-new-coding-system
my-new-coding)
(setq my-current-eol
(coding-system-eol-type buffer-file-coding-system))
(setq my-next-coding-index (1+ my-current-coding-index))
(if (equal my-next-coding-index (length my-working-codings))
(setq my-next-coding-index 0))
(setq my-new-coding-system
(elt my-working-codings my-next-coding-index))
(cond ((equal my-current-eol 0)
(setq my-new-coding (concat my-new-coding-system "-unix")))
((equal my-current-eol 1)
(setq my-new-coding (concat my-new-coding-system "-dos")))
((equal my-current-eol 2)
(setq my-new-coding (concat my-new-coding-system "-mac"))))
(setq coding-system-for-read (read my-new-coding))
(revert-buffer t t)
(setq my-current-coding-index my-next-coding-index)
(message "Set coding %s." my-new-coding)
)
)
(global-set-key [f11] 'pa23-change-coding)
При смене кодировки, emacs, извещением в минибуфере, оповестит вас о том, на что он переключился. Наслаждайтесь работой в любимом редакторе!Напомню также, что мой рабочий вариант файла .emacs можно взять здесь.
UPD: 05.05.2014
Поработал над кодом. Теперь функция выглядит значительно лучше, чем самый первый вариант )
UPD: 09.05.2014
Очередное улучшение кода.
Комментариев нет:
Отправить комментарий