Использование Emacs под Windows

<Вс 23 фев 2025>

Краткая инструкция, в которой описывается установка и настройка Emacs под Windows для работы в Org-mode: написания заметок и инструкций с последующим экспортом в PDF и OpenDocument Text; ведения списка задач. Подразумевается, что Emacs и Org-mode уже настроены, а конфиг лежит где-то на GitHub, и надо его только немного адаптировать под Windows.

Chocolatey

Первым делом необходимо установить choco: скачать скрипт, изменить политику выполнения по умолчанию и запустить сам скрипт.

Описание требуемой политики с сайта Microsoft (для домашних компьютеров политика по умолчанию – Restricted):

  • Scripts can run.
  • Requires that all scripts and configuration files be signed by a trusted publisher, including scripts that you write on the local computer.
  • Prompts you before running scripts from publishers that you haven't yet classified as trusted or untrusted.
  • Risks running signed, but malicious, scripts.

Изменить политику через PowerShell и запустить установочный скрипт (всё это надо делать с правами администратора):

PS C:\Windows\system32> Set-ExecutionPolicy AllSigned
PS C:\Temp> .\install.ps1

После установить необходимые программы следующим образом:

PS C:\Temp> choco install emacs findutils grep hunspell.portable git zip unzip miktex strawberryperl

Пояснение:

  • zip и unzip позволяют делать экспорт из Org-mode в OpenDocument Text;
  • miktex и strawberryperl позволяют худо-бедно делать экспорт в PDF.

Словари для Hunspell можно взять тут. Файлы index.aff и index.dic необходимо скопировать в директорию ~/Hunspell и назвать соответствующим образом.

Внутри MiKTeX уже есть шрифт Computer Modern Bright, нужно только добавить соответствующую директиву в org-документ.

Emacs

Настройка Emacs, которую можно добавить в custom.el:

;; old familiar font
(custom-set-faces
 '(default ((t (:family "Lucida Console"
                        :foundry "outline"
                        :slant normal
                        :weight regular
                        :height 120
                        :width normal)))))

;; make `rgrep' work
(setq find-program
    (expand-file-name "bin/find.exe"
                      (getenv "ChocolateyInstall")))

;; make `hunspell' work
(let ((base (expand-file-name "Hunspell"
                              (or (getenv "HOME") (getenv "HOMEPATH")))))
  (setenv "DICPATH" base)
  (setenv "DICTIONARY" "en_US")
  (setq ispell-hunspell-dict-paths-alist
        `(("en_US" ,(expand-file-name "en_US.aff" base))
          ("ru_RU" ,(expand-file-name "ru_RU.aff" base)))))

Про работу с Hunspell под Windows можно почитать у Xah Lee в этом посте.

Изменить шрифт можно через меню, если нет желания разбираться с конфигом:

  • Options → Set Default Font …
  • Options → Save Options

Самый простой шаблон для org-документа, который использует упомянутый шрифт:

#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS: [a4paper]
#+LATEX_HEADER_EXTRA: \usepackage{cmbright}
#+LATEX_HEADER_EXTRA: \hypersetup{colorlinks=true, urlcolor=blue}
#+LATEX_HEADER_EXTRA: \setlength{\parindent}{0pt}

Git

В Windows есть встроенный ssh-клиент, а Git, по умолчанию, использует свой внутренний, который может быть не доступен из консоли (расположен в директории C:\Program Files\Git\usr\bin, которая, по умолчанию, не добавляется в пути). В принципе, это можно изменить через переменную GIT_SSH, но необходимости нет.

Чтобы сгенерировать ключи посредством команды ssh-keygen, необходимо перейти в упомянутую директорию и выполнить:

PS C:\Program Files\Git\usr\bin> ssh-keygen.exe -f %HOME%/.ssh/id_%COMPUTERNAME%

Затем обновить ~/.ssh/config:

Host github.com
User git
IdentityFile ~/.ssh/id_computer-name

После чего можно загрузить полученный pub-файл на GitHub, TFS и т.д.

Для корректной работы Magit необходимо установить ssh-agency, который доступен в списке пакетов MELPA. В custom.el, соответственно, добавляется ещё одна строчка:

(require 'ssh-agency)

Syncthing

Ставится отдельно. Инструкция по автозапуску: Run at user log on or at system startup using Task Scheduler.

В конфиг Org-mode при этом необходимо добавить включение Auto Revert Mode, чтобы буфер перезагружался при изменение файла:

(add-hook 'org-mode-hook #'auto-revert-mode)

Клавиатура

Переназначить Caps Lock можно через утилиту PowerToys.