You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
4.2 KiB

# Emacs Locale Management and Input Methods
I was born in Spain, and have lived there most of my life. In fact, I
just moved to the US 6 years ago. This means that a lot of my spoken and
written communication is still in Spanish, mostly overseas with family
and friends. Working with special characters non existent in the English
language (think ñ, á, etc) is not as straight forward as it is on MacOS
for instance, where `Alt + e + a' will result in á.
# Temporarily enable an input method
By default, Emacs doesn't have an [input method]. Which means that
special characters will not be very convenient to insert. To be able
to switch languages, you will need to set an input method. In my case,
`latin-1-prefix' will be the chosen locale. To do this, run `M-x
set-input-method' and then choose the locale. This will most likely
affect your editing mode when special characters are no longer needed,
therefore to disable the input method, just issue `M-x
toggle-input-method' or just `C-\'.
=> https://www.emacswiki.org/emacs/InputMethods input method
# Permanently enable an input method
This all works well when you want to write using a different locale
temporarily, but it doesn't work well when you want to have an input
method enabled every time you're in a mode. For instance, if I want to
type text in Spanish every time I'm in `org-mode', I would need to
issue the `M-x set-input-method' command every time I open this
mode. This is obviously an inconvenience, and the Emacs life is all
about making the editor just the way you want it.
To permanently set an input method for a mode, we will need to add
something like this to our init file.
```
;; Set latin-1-prefix as default locale
(setq default-input-method "latin-1-prefix")
(defun activate-default-input-method ()
(interactive)
(activate-input-method default-input-method))
(add-hook 'org-mode-hook 'activate-default-input-method)
```
Here we are indicating that `latin-1-prefix' will be our new
`default-input-method' and the function will enable this method for
`org-mode'. This way, every time we open `org-mode', I will be ready
to type in Spanish. This is a white-listing approach, where we select
the modes that will have an input method applied, but we can also take
the opposite approach. A blacklist method approach will enable an
input method for ALL modes except for the ones indicated. This was the
first approach I took, but soon realized that I have too many key
bindings that would be disabled by the special character keys. Here's
an example of the blacklist approach.
```
;; Set latin-1-prefix as default locale
(setq default-input-method "latin-1-prefix")
(defvar use-default-input-method t)
(make-variable-buffer-local 'use-default-input-method)
(defun activate-default-input-method ()
(interactive)
(if use-default-input-method
(activate-input-method default-input-method)
(inactivate-input-method)))
(add-hook 'after-change-major-mode-hook 'activate-default-input-method)
(add-hook 'minibuffer-setup-hook 'activate-default-input-method)
(defun inactivate-default-input-method ()
(setq use-default-input-method nil))
;; Blacklisted modes
(add-hook 'c-mode-hook 'inactivate-default-input-method)
(add-hook 'go-mode-hook 'inactivate-default-input-method)
(add-hook 'markdown-mode-hook 'inactivate-default-input-method)
(add-hook 'sh-mode-hook 'inactivate-default-input-method)
```
This way, we are enabling `latin-1-prefix' as the default input method
for everything except for `c-mode', `go-mode', `markdown-mode', and
`sh-mode'. While these cover many of the options that I use on a
regular basis, `dired' and other modes that I use very frequently
would still be screwed up and the blacklist would grow too
large. Whitelisting `org-mode' is enough for now. I might consider
`message-mode' for writing emails in Spanish, which I do like 10% of
the time, or `text-mode' (that I don't use that often).
# Summary
Overall I feel very happy with this set up, but still needs some minor
tweaking. As always, Emacs' flexibility makes customization extremely
powerful. Easily overwhelming. Just like everything we're doing, try
settings out, keep your `.emacs' in source control and make changes
without fear. Tweak as needed. Repeat.