0

Platform

Windows 10 with GNU Emacs 26.1 (build 1, x86_64-w64-mingw32).

Goal

To set the encoding of process buffers to UTF-8.

I would like to set the input and output encoding of process buffers, like shell or the R Console (iESS), to UTF-8. By default, the iESS buffer is encoded as iso-latin-1-dos for output and undecided-dos for input. If I ask Emacs:

M-S-: (process-coding-system (get-buffer-process (current-buffer)))

I get:

(iso-latin-1-dos . undecided-dos)

As a result, special characters are mangled in the iESS output (although not in the input):

> print("Ä")
[1] "Ã\204"
>

What I've tried

I can change the encoding by invoking

M-S-: (set-buffer-process-coding-system 'utf-8 'utf-8)

as described in this thread. The problem goes away, but I would like a permanent solution. So I tried to create hooks for several process buffers in my .emacs, like so:

; the hooks below should set the encoding of input to and output from a
; process buffer (like a shell, R console, or REPL) to UTF-8
; but somehow they don't.
(add-hook 'shell-mode-hook (lambda () (set-buffer-process-coding-system 'utf-8 'utf-8)))
(add-hook 'eshell-mode-hook (lambda () (set-buffer-process-coding-system 'utf-8 'utf-8)))
(add-hook 'iESS-mode-hook
          (lambda () (set-buffer-process-coding-system 'utf-8 'utf-8)))
(add-hook 'inferior-python-mode-hook
          (lambda () (set-buffer-process-coding-system 'utf-8 'utf-8)))

Upon restarting Emacs, however, these settings have no effect. There is no error message, but the iESS and shell buffers still have the "wrong" encoding.

Questions

Ho can I fix the code above so it changes the encoding of the respective process buffer upon mode change? What would be a smarter way to achieve this? Is there a way to set all process buffers to utf-8 encoding without relying on individual hooks?

henning
  • 82
  • 2
  • 16

1 Answers1

2

Just set default-process-coding-system to '(utf-8 . utf-8). You can do this by adding this to your init file:

(setq default-process-coding-system '(utf-8 . utf-8))

This and other useful variables are described in chapter 33.10.5 Default Coding Systems of the Emacs Lisp manual. You may also be interested in the process-coding-system-alist variable.

You can open this and other manuals inside Emacs using C-h i.

db48x
  • 15,741
  • 1
  • 19
  • 23