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

<Вс 23 фев 2025>

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

Для хранения org-файлов предполагается использовать Git или Syncthing. Если выбор пал на Git, то тогда в качестве Git-клиента будет использоваться Magit.

Окружение

В качестве домашней директории предполагается использовать просто директорию в корне диска, путь к которой необходимо прописать в переменную окружения HOME. Вероятно, можно использовать директорию, которая указана в переменной HOMEPATH, но этот сценарий полностью не проверялся.

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:\Temp> Set-ExecutionPolicy AllSigned

Изменение политики выполнения
Политика выполнения защищает компьютер от ненадежных сценариев. Изменение политики выполнения может поставить под угрозу безопасность системы, как описано в разделе справки, вызываемом командой about_Execution_Policies и расположенном по адресу https:/go.microsoft.com/fwlink/?LinkID=135170 . Вы хотите изменить политику выполнения?
[Y] Да - Y  [A] Да для всех - A  [N] Нет - N  [L] Нет для всех - L  [S] Приостановить - S  [?] Справка
(значением по умолчанию является "N"):Y
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.

В дальнейшем, чтобы обновить все установленные пакеты разом, можно использовать команду:

PS C:\Temp> choco upgrade all
Chocolatey v2.4.2
Upgrading the following packages:
all

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

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

Emacs

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

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

;; 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)))))

;; Brave to open URLs
(setq
 browse-url-chrome-program
 (expand-file-name
  "brave.exe"
  "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application"))

Про работу с 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 ${Env:HOME}/.ssh/id_${Env: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

Установка:

PS C:\Temp> choco install syncthing

Варианты инструкции по автозапуску:

В свойствах директории Syncthing можно настроить маску (вкладка Ignore Patterns), которая позволит не синхронизировать временные файлы Emacs:

*.*~
.#*

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

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

Клавиатура

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

Обновлено <Пт 07 мар 2025>