Windows用のEmacs設定ファイル

自宅ではWindowsも使うようになったので、現時点のEmacsの設定ファイルを置いておきます。後で再インストールが必要になった時のための自分用メモです。Windows 10 Home(21H2)、本家GNU Emacs 27.2で使っているものです。

どのエディタを使うかは宗教戦争に発展してしまうので気を付けないといけないのですが、僕は学生時代からEmacs一筋です。もちろんViもVisual Studio Codeも使えますが、手になじんでいるのとカスタマイズの柔軟さにおいてEmacsに勝るものと出会えていません。

(もしこれからEmacsに入門したくなったら「2020年代のEmacs入門 | Emacs JP」がよいかも)

;;;; -*- emacs-lisp-mode -*-
;;;; c:\Users\marui\AppData\Roaming\.emacs.d\init.el

(require 'package)
(package-initialize)
(customize-set-variable 'package-archives
                        `(,@package-archives
                          ("melpa" . "https://melpa.org/packages/")))



;;; 日本語IME https://github.com/trueroad/tr-emacs-ime-module

(unless (package-installed-p 'tr-ime)
  (package-refresh-contents)
  (package-install 'tr-ime))
(tr-ime-standard-install)
;; IM のデフォルトを IME に設定
(setq default-input-method "W32-IME")
;; IME のモードライン表示設定
(setq-default w32-ime-mode-line-state-indicator "[--]")
(setq w32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]"))
;; IME 初期化
(w32-ime-initialize)
;; IME 制御(yes/no などの入力の時に IME を off にする)
(wrap-function-to-control-ime 'universal-argument t nil)
(wrap-function-to-control-ime 'read-string nil nil)
(wrap-function-to-control-ime 'read-char nil nil)
(wrap-function-to-control-ime 'read-from-minibuffer nil nil)
(wrap-function-to-control-ime 'y-or-n-p nil nil)
(wrap-function-to-control-ime 'yes-or-no-p nil nil)
(wrap-function-to-control-ime 'map-y-or-n-p nil nil)
(wrap-function-to-control-ime 'register-read-with-preview nil nil)



;;; フォントを変更

(set-frame-font "MS Gothic-12" nil t)
(modify-all-frames-parameters '((ime-font . "MS Gothic-12")))



;;; 表示

;; テーマ
(unless (package-installed-p 'afternoon-theme)
  (package-refresh-contents)
  (package-install 'afternoon-theme))
(load-theme 'afternoon t)   

;; 時計 https://benevolent0505.hatenablog.com/entry/2018/04/26/230853
(setq display-time-interval 1)
(setq display-time-string-forms
  '((format "%s:%s:%s" 24-hours minutes seconds)))
(setq display-time-day-and-date t)
(display-time-mode t)

;; turn off the splash screen
(setq inhibit-startup-message t)
(setq initial-scratch-message nil)

;; turn off toolbar and menubar
(menu-bar-mode -1)
(tool-bar-mode 0)

;; line number
(global-display-line-numbers-mode)



;;; Programming

(setq-default indent-tabs-mode nil)
(add-hook '*html+-mode-hook*
          #'(lambda ()
              (ed::set-buffer-local 'indent-tabs-mode nil)))
(setq tab-width 2)
(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)
(defvaralias 'js-indent-level 'tab-width)

;; slime
(unless (package-installed-p 'slime)
  (package-refresh-contents)
  (package-install 'slime))
(setq inferior-lisp-program "c:/sbcl/sbcl.exe")
(require 'slime)
(slime-setup '(slime-fancy))
(add-hook 'lisp-mode-hook (lambda ()
                            (slime-mode t)
                            (show-paren-mode)
                            (slime-autodoc-mode)
                            (setq transient-mark-mode t)))