userapps:emacs
差分
このページの2つのバージョン間の差分を表示します。
| — | userapps:emacs [2026/01/28 08:35] (現在) – 作成 - 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ====== Emacs ====== | ||
| + | {{indexmenu> | ||
| + | |||
| + | ===== まくら ===== | ||
| + | |||
| + | Emacsはとても古いEditor実装である。自分がEmacsを利用し始めたのは、高校生の時代にX68000を使っていた頃のはず。PC8801-mk2SRの次に入手したのがX68000だったとおもう。 | ||
| + | |||
| + | それまでもPCは使っていた。88の頃は主にゲームばかり。X68000を手に入れてパソコン通信のChatにはまり、PC9801LVを入手してBBSサーバーにしたりはしていたが、普段使いのComputerはX68000だったと思う。 | ||
| + | |||
| + | プログラムを書くようになって最初に手に馴染んだEditorはμEmacsだった。X68000でmicro Emacsを使い始めたのが最初だったと思う。そこからNEmacsに移り、Muleに移り、icam版GNU Emacsに移っていった。当時、TeXにがっつりハマり、pTeX(pLaTeXではない)で縦書き3段組の同人誌を作ったりもしていた。EmacsでTeX modeが非常に便利だったことを覚えている。 | ||
| + | |||
| + | それ以来EditorといえばEmacs系のものを利用している。浪人時代に、中古で買ったSony NEWS(NEWS 1250, NEWS830, NEWS 3860)でThin EthernetでNetworkを組み、X68000をSerial Terminal にしてみたり、大学でSun MicrosystemsのSPARCstation 5, 10, IPC, IPX あたりを利用していたが、その時もEditorは常にEmacsだった。 | ||
| + | |||
| + | 大学時代から、Unix System管理者としては、当然にed, | ||
| + | |||
| + | 社会人になっても、Reportや提出書類の大半はTeXを利用していた(WYSIWYGなんて面倒で不便と思っていた。今でもそう思うことは多い)ので、2000年代前半まではEmacs/ | ||
| + | |||
| + | 最近またEmacsに戻ってきたので、備忘録も兼ねてEmacsの設定などを記載することにした。 | ||
| + | |||
| + | マクラが長い。しかも割と黒歴史だったorz... | ||
| + | | ||
| + | <WRAP info round> | ||
| + | * 2024/11/07 | ||
| + | * Updated for emacs-plus@31 | ||
| + | * Remove poll(Removed from emacs-plus because poll causes problem | ||
| + | * install after commandline, | ||
| + | </ | ||
| + | ===== 環境とInstall ===== | ||
| + | 2024年現在、メイン端末はMacBookProで、管理しているサーバーは大半がFreeBSD(一部NetBSD, | ||
| + | |||
| + | ==== 環境 ==== | ||
| + | |||
| + | ^ 年代 ^ 端末 ^ CPU ^ Memory ^ OS ^ | ||
| + | | 2024年 | MacBookPro 16" 2019 | Intel Core-i9 | 64G | macOS Sonoma/ | ||
| + | | 2024年 | VM(XCP-ng) | AMD Ryzen7 3700X | 4G | FreeBSD 14.1 | | ||
| + | |||
| + | ==== Install ==== | ||
| + | |||
| + | 昔はSource Codeを持ってきてCompileしていたが現在では流石にBinary Packageを利用している。 | ||
| + | |||
| + | === macOS === | ||
| + | |||
| + | MacOSの場合、IMEのInline patchを当てないとMetaコマンド系を入力する際に'' | ||
| + | そのため、少し面倒な対応が必要になる。 | ||
| + | |||
| + | [参考] | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | macOSに [[https:// | ||
| + | |||
| + | < | ||
| + | $ mkdir ~/ | ||
| + | $ vi ~/ | ||
| + | icon: modern-pen | ||
| + | patches: | ||
| + | - aggressive-read-buffering | ||
| + | - frame-transparency | ||
| + | - mac-font-use-typo-metrics | ||
| + | $ brew tap d12frosted/ | ||
| + | $ brew edit emacs-plus@31 # | ||
| + | .... configuration .... | ||
| + | # | ||
| + | # Patches | ||
| + | # | ||
| + | |||
| + | opoo "The option --with-imagemagick is deprecated and will be removed in a future version. Modern Emacs has native support for most image formats (SVG via librsvg, WebP, PNG, JPEG, GIF). If you rely on ImageMagick, | ||
| + | local_patch " | ||
| + | local_patch " | ||
| + | # Added by seirios | ||
| + | patch do | ||
| + | url " | ||
| + | end | ||
| + | |||
| + | # | ||
| + | # Install | ||
| + | # | ||
| + | .... configuration .... | ||
| + | $ brew install --formula d12frosted/ | ||
| + | $ osascript -e 'tell application " | ||
| + | $ sudo codesign --force --deep --sign - / | ||
| + | $ brew services start d12frosted/ | ||
| + | </ | ||
| + | |||
| + | ここまでを実行すると、 | ||
| + | * / | ||
| + | * LaunchPad にEmacsアイコンが追加され、 | ||
| + | * 起動項目にemacsが追加され、 | ||
| + | * BackgroundでEmacsが起動 | ||
| + | される。一応 Inline-patch を確認するために、一度Emacsを起動し、 | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | が動作するかを確認しておく。 | ||
| + | |||
| + | なお、自明だが、ImageMagickやDBUSを利用する場合には、'' | ||
| + | |||
| + | <WRAP info round> | ||
| + | このIME用 Inline-Patchを適用した場合、init.elに以下のelisp codeを追加しておくと良い。 | ||
| + | <code lisp> | ||
| + | (when (and (memq window-system '(ns nil)) | ||
| + | | ||
| + | (when (version< | ||
| + | ;; Required for some cases when auto detection is failed or the locale is " | ||
| + | (custom-set-variables | ||
| + | ' | ||
| + | (mac-input-method-mode 1)) | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <WRAP alert round> | ||
| + | Emacs install時の引数に '' | ||
| + | </ | ||
| + | |||
| + | <WRAP info round> | ||
| + | '' | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | <WRAP alert round> | ||
| + | [[https:// | ||
| + | ここにあるように、macOS Sequoiaにおいて、Xcode commandline tools を最新にすると、Emacs.appを実行できない。\\ | ||
| + | sudo codesign --force --deep --sign - / | ||
| + | によってApp FileをSignすると実行できるようになる。注意すること | ||
| + | </ | ||
| + | |||
| + | <WRAP alert round> | ||
| + | Reading directory: Operation not permitted エラーが出て、Emacsからフォルダが開けない場合\\ | ||
| + | macOS SequoiaでEmacsをInstallした後、どうしてもDesktop FolderをEmacsから開けなかった。\\ | ||
| + | こういう時は、一度フルディスクアクセス設定を削除したのち、もう一度フルディスクアクセス設定を行うことで回避できる可能性がある。\\ | ||
| + | Commandlineから sudo tccutil reset All org.gnu.Emacs を実行し、システム環境設定からセキュリティ→フルディスクアクセスに移動し、左下の「+」からEmacs.appを追加。その後、Emacs.appを再度起動すると、Desktopフォルダにアクセスできるようになった。 | ||
| + | </ | ||
| + | |||
| + | === FreeBSD === | ||
| + | |||
| + | 自分はFreeBSDをサーバーとして利用しており、GUIを利用していない。そのため、EmacsをX11経由ではなくConsoleから利用している。ほとんどの接続がssh経由だからこれでよい。 | ||
| + | |||
| + | したがって、EmacsのInstallは | ||
| + | |||
| + | <code bash> | ||
| + | $ doas pkg install emacs-nox # | ||
| + | </ | ||
| + | で終わりである。 | ||
| + | |||
| + | ===== 初期設定 ===== | ||
| + | |||
| + | Emacsはそれ単体では最小限のことしかできない。しかし、Emacs-Lispを組み込み、設定を行うことで色々なことができるようになる。これを称して、昔は、「EmacsはEditorではない。Environmentである」などとも言われていた。 | ||
| + | |||
| + | 以下、個人の設定。 (2024/ | ||
| + | |||
| + | ここで、Packageごとの設定など、細かいことを説明すればいいんだろうけど、かなり面倒なので、コメントで勘弁して。 | ||
| + | |||
| + | このinit.elは、byte-compileするとgo-translate関連の変数が未定義扱いになる。 | ||
| + | 本来は'': | ||
| + | <code lisp early-init.el> | ||
| + | ;;; -*- lexical-binding: | ||
| + | ;;; ~/ | ||
| + | ;;; | ||
| + | ;;; last updated: 2026/01/02 | ||
| + | ;;; Author: HEO SeonMeyong < | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; log | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; 2026/ | ||
| + | |||
| + | ;; 起動直後は GC を後ろ倒し(起動後に元へ戻す) | ||
| + | (setq gc-cons-threshold most-positive-fixnum) | ||
| + | (add-hook ' | ||
| + | |||
| + | ;; package.el は自動では有効化しない(init.el側で initialize) | ||
| + | (setq package-enable-at-startup nil) | ||
| + | |||
| + | ;; フレームの暗黙のリサイズ抑制(ちらつき防止) | ||
| + | (setq frame-inhibit-implied-resize t) | ||
| + | |||
| + | ;; 早期に不要なUIをオフ | ||
| + | (push ' | ||
| + | (push ' | ||
| + | (push ' | ||
| + | |||
| + | (provide ' | ||
| + | ;;; early-init.el ends here | ||
| + | </ | ||
| + | <code lisp init.el> | ||
| + | ;;; -*- lexical-binding: | ||
| + | ;;; ~/ | ||
| + | ;;; | ||
| + | ;;; last updated: 2026/01/02 | ||
| + | ;;; Author: HEO SeonMeyong < | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; Tips | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;; emacs -nw -q --batch --eval ' | ||
| + | ;; emacs --batch -f batch-byte-compile init.el ; | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; Prefix keys memo | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;; C-? : Control+? | ||
| + | ;; M-? : Meta(ESC)+? | ||
| + | ;; s-? : Super(command)+? | ||
| + | ;; S-? : Shift+? | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; コメント定義 | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;; セミコロン 3 つは段落コメント | ||
| + | ;; セミコロン 2 つはコードブロックコメント | ||
| + | ;; セミコロン 1 つは、行コメント | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; Reference site | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;; https:// | ||
| + | ;; | ||
| + | ;; https:// | ||
| + | ;; https:// | ||
| + | ;; https:// | ||
| + | ;; https:// | ||
| + | ;; https:// | ||
| + | ;; https:// | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; log | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; 2026/ | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; Path & package bootstrap | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;; 追加の elisp を load-path に加える(存在チェック付き) | ||
| + | (let ((extra-paths ' | ||
| + | " | ||
| + | (dolist (p extra-paths) | ||
| + | (let ((abs (expand-file-name p))) | ||
| + | (when (file-directory-p abs) | ||
| + | (add-to-list ' | ||
| + | |||
| + | ;; Info の追加ディレクトリ(Homebrew等) | ||
| + | (dolist (info-dir ' | ||
| + | (when (file-directory-p info-dir) | ||
| + | (add-to-list ' | ||
| + | |||
| + | ;; package.el の初期化(early-init.el で package-enable-at-startup を nil にしている前提) | ||
| + | (require ' | ||
| + | (custom-set-variables | ||
| + | ' | ||
| + | (" | ||
| + | (" | ||
| + | ' | ||
| + | (package-initialize) | ||
| + | |||
| + | ;; leaf を未導入なら取得 | ||
| + | (unless (package-installed-p 'leaf) | ||
| + | (package-refresh-contents) | ||
| + | (package-install ' | ||
| + | |||
| + | (leaf leaf-keywords | ||
| + | :ensure t | ||
| + | :config (leaf-keywords-init)) | ||
| + | |||
| + | ;; customize の書き込み先を分離 | ||
| + | (setq custom-file (expand-file-name " | ||
| + | (when (file-exists-p custom-file) | ||
| + | (load custom-file)) | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; macOS: シェルの環境変数を取り込む(GUI起動でも PATH 等を揃える) | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | (leaf exec-path-from-shell | ||
| + | :ensure t | ||
| + | :require t | ||
| + | :when (memq window-system '(mac ns x)) | ||
| + | :config | ||
| + | (dolist (var ' | ||
| + | (add-to-list ' | ||
| + | (exec-path-from-shell-initialize)) | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; 基本設定(UI/ | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | (leaf cus-start | ||
| + | :doc " | ||
| + | :bind ((" | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | ;; mu4e ランチャー | ||
| + | | ||
| + | ;; Tab-bar 操作(mac風) | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | :hook ((minibuffer-setup-hook . shrink-window-if-larger-than-buffer)) | ||
| + | :custom ' | ||
| + | (debug-on-error . t) ; エラー時 backtrace | ||
| + | (frame-resize-pixelwise . t) | ||
| + | (enable-recursive-minibuffers . t) | ||
| + | (history-length . 1000) | ||
| + | (history-delete-duplicates . t) | ||
| + | (scroll-preserve-screen-position . t) | ||
| + | (scroll-conservatively . 10000) | ||
| + | (scroll-step . 1) | ||
| + | (scroll-margin . 2) | ||
| + | (visible-bell . t) | ||
| + | (text-quoting-style . ' | ||
| + | (truncate-lines . nil) ; 折り返し表示 | ||
| + | (tab-width . 8) | ||
| + | (line-number-display-limit-width . 10000) | ||
| + | (resize-mini-windows . t) | ||
| + | (max-mini-window-height . 0.1) | ||
| + | (indicate-empty-lines . t) | ||
| + | (indicate-buffer-boundaries . 'left) | ||
| + | (gc-cons-percentage . 0.2) | ||
| + | (gc-cons-threshold . 134217728) | ||
| + | (menu-bar-mode . t) | ||
| + | (tool-bar-mode . nil) | ||
| + | (scroll-bar-mode . nil) | ||
| + | (indent-tabs-mode . nil) | ||
| + | (transient-mark-mode . t) | ||
| + | (tab-bar-mode . t)) | ||
| + | :config | ||
| + | ;; yes-or-no を y/n に短縮 | ||
| + | (defalias ' | ||
| + | ;; 改行のバックスラッシュを非表示 | ||
| + | (set-display-table-slot standard-display-table 0 ?\ ) | ||
| + | (set-display-table-slot standard-display-table 'wrap ?\ ) | ||
| + | ;; macOS 固有 | ||
| + | (leaf cus-start-mac | ||
| + | :when (eq system-type ' | ||
| + | :custom ((ns-alternate-modifier . 'meta) | ||
| + | | ||
| + | ;; Frame Transparency (for emacs-plus@31) | ||
| + | ;; (set-frame-parameter nil ' | ||
| + | | ||
| + | ;; Choose elements: | ||
| + | ;; - Full list: ns-alpha-default (default face/ | ||
| + | ;; | ||
| + | ;; | ||
| + | ;; | ||
| + | ;; | ||
| + | ;; | ||
| + | | ||
| + | ' | ||
| + | | ||
| + | | ||
| + | ) | ||
| + | |||
| + | ;; dired のショートカット | ||
| + | (leaf dired :bind ((: | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; 多言語環境(mule) | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | (leaf mule | ||
| + | :config | ||
| + | (set-language-environment ' | ||
| + | (set-terminal-coding-system ' | ||
| + | (set-keyboard-coding-system ' | ||
| + | (set-buffer-file-coding-system ' | ||
| + | (set-file-name-coding-system ' | ||
| + | (set-clipboard-coding-system ' | ||
| + | (prefer-coding-system ' | ||
| + | (set-default-coding-systems ' | ||
| + | (when (eq system-type ' | ||
| + | (customize-set-variable ' | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; GUI/ | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | (when (memq window-system '(x mac ns)) | ||
| + | (defvar my-frame-parameters | ||
| + | ' | ||
| + | (top . 20) (left . 20) | ||
| + | (line-spacing . 0) | ||
| + | (left-fringe . 12) (right-fringe . 12) | ||
| + | (cursor-type . box) | ||
| + | (alpha . 95) | ||
| + | (foreground-color . "# | ||
| + | (background-color . "# | ||
| + | (cursor-color . "# | ||
| + | (mouse-color . "# | ||
| + | (setq default-frame-alist my-frame-parameters) | ||
| + | (setq frame-title-format ' | ||
| + | (setq blink-cursor-mode t) | ||
| + | (setq frame-inherited-parameters '(font tool-bar-lines)) | ||
| + | (setq ns-pop-up-frames nil) | ||
| + | ;; mac/ns フォント | ||
| + | (when (memq window-system '(mac ns)) | ||
| + | (global-set-key [s-mouse-1] ' | ||
| + | (let* ((size 16) | ||
| + | | ||
| + | | ||
| + | (h (* size 10))) | ||
| + | (set-face-attribute ' | ||
| + | (set-fontset-font t ' | ||
| + | (set-fontset-font t ' | ||
| + | (set-fontset-font t ' | ||
| + | (set-fontset-font t ' | ||
| + | (set-fontset-font t ' | ||
| + | (set-fontset-font t ' | ||
| + | (setq face-font-rescale-alist | ||
| + | ' | ||
| + | (" | ||
| + | (" | ||
| + | (" | ||
| + | (" | ||
| + | (" | ||
| + | (" | ||
| + | (" | ||
| + | ;; マウス設定 | ||
| + | (setq mouse-drag-copy-region t) | ||
| + | (setq mouse-wheel-scroll-amount '(1 ((shift) . 2) ((control)))) | ||
| + | (setq mouse-wheel-progressive-speed nil)) | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; Builtins: modeline/ | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | (leaf which-function :custom ' | ||
| + | |||
| + | (leaf time | ||
| + | :hook (emacs-startup-hook . display-time-mode) | ||
| + | :custom ' | ||
| + | (display-time-string-forms ' | ||
| + | (display-time-day-and-date . t))) | ||
| + | |||
| + | (leaf browse-url | ||
| + | :custom ' | ||
| + | :config | ||
| + | (when (eq system-type ' | ||
| + | (customize-set-variable ' | ||
| + | |||
| + | (leaf time-stamp | ||
| + | :hook (before-save-hook . time-stamp) | ||
| + | :custom ' | ||
| + | (time-stamp-start . "last updated: ") | ||
| + | (time-stamp-format . " | ||
| + | (time-stamp-end . " \n$" | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; 表示/ | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | |||
| + | (setq-default display-line-numbers nil) ;; 行番号は基本オフ(必要なら C-c l で局所的にトグル) | ||
| + | (global-display-line-numbers-mode -1) ;; ← nil ではなく -1 で確実に OFF | ||
| + | (setq column-number-mode t) | ||
| + | (setq size-indication-mode t) | ||
| + | |||
| + | (leaf whitespace | ||
| + | :require t | ||
| + | :hook (find-file-hook . (lambda () (whitespace-mode 1))) | ||
| + | :config | ||
| + | (setq whitespace-style '(face trailing tabs empty spaces) | ||
| + | ;; 全角スペースのみ可視化 | ||
| + | whitespace-space-regexp " | ||
| + | ;; フェイスは一度だけ設定 | ||
| + | (set-face-attribute ' | ||
| + | :foreground " | ||
| + | (set-face-attribute ' | ||
| + | :foreground " | ||
| + | (set-face-attribute ' | ||
| + | :background " | ||
| + | (set-face-attribute ' | ||
| + | :foreground " | ||
| + | (global-whitespace-mode t)) | ||
| + | |||
| + | (leaf paren | ||
| + | :hook (emacs-startup-hook . show-paren-mode) | ||
| + | :custom ' | ||
| + | (show-paren-style . ' | ||
| + | |||
| + | (leaf simple | ||
| + | :custom ' | ||
| + | (kill-read-only-ok . t) | ||
| + | (kill-whole-line . nil) | ||
| + | (eval-expression-print-length . nil) | ||
| + | (eval-expression-print-level . nil) | ||
| + | (indent-tabs-mode . nil) | ||
| + | (mail-user-agent . ' | ||
| + | |||
| + | (leaf files | ||
| + | :custom ' | ||
| + | (backup-by-copying . t) | ||
| + | (version-control . t) | ||
| + | (kept-new-versions . 2) | ||
| + | (kept-old-versions . 2) | ||
| + | (delete-old-versions . t) | ||
| + | (auto-save-timeout . 15) | ||
| + | (auto-save-interval . 60) | ||
| + | (delete-auto-save-files . t))) | ||
| + | |||
| + | (leaf startup | ||
| + | :config | ||
| + | (setq init-file-debug t | ||
| + | auto-save-list-file-prefix (locate-user-emacs-file " | ||
| + | inhibit-startup-screen t | ||
| + | inhibit-startup-message t | ||
| + | inhibit-startup-echo-area-message t | ||
| + | initial-scratch-message "" | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; 補完: company | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | (leaf company | ||
| + | :ensure t | ||
| + | :bind ((" | ||
| + | | ||
| + | (" | ||
| + | (" | ||
| + | (" | ||
| + | (" | ||
| + | (" | ||
| + | ("< | ||
| + | | ||
| + | (" | ||
| + | (" | ||
| + | :custom ' | ||
| + | (company-minimum-prefix-length . 2) | ||
| + | (company-transformers . ' | ||
| + | (company-auto-expand . t) | ||
| + | (company-selection-wrap-around . t) | ||
| + | (completion-ignore-case . t) | ||
| + | (company-dabbrev-downcase . nil) | ||
| + | (company-show-numbers . t))) | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; 言語モード | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | (leaf lua-mode | ||
| + | :ensure t | ||
| + | :mode (" | ||
| + | : | ||
| + | :custom ' | ||
| + | (lua-indent-string-contents . nil) | ||
| + | (lua-indent-nested-block-content-align . t) | ||
| + | (lua-indent-close-paren-align . t) | ||
| + | (lua-default-application . "/ | ||
| + | (lua-default-command-switches . " | ||
| + | (lua-always-show . t)) | ||
| + | :config (add-hook ' | ||
| + | |||
| + | (leaf caddyfile-mode | ||
| + | :ensure t | ||
| + | :mode ((" | ||
| + | | ||
| + | :hook (caddyfile-mode-hook . (lambda () (setq-local tab-width 4 | ||
| + | | ||
| + | |||
| + | (leaf nginx-mode | ||
| + | :ensure t | ||
| + | :mode ((" | ||
| + | :hook (nginx-mode-hook . company-mode)) | ||
| + | |||
| + | (leaf w3m | ||
| + | :ensure t | ||
| + | :custom ((w3m-command . "/ | ||
| + | |||
| + | (leaf vc-fossil | ||
| + | :ensure t | ||
| + | :init (add-to-list ' | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; 翻訳: go-translate (鍵は環境変数/ | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | (leaf go-translate | ||
| + | :ensure t | ||
| + | :bind (("C-c t" . gt-do-translate)) | ||
| + | :custom ' | ||
| + | :config | ||
| + | ;; DeepL API キーは環境変数 DEEPL_API_KEY から取得。未設定なら DeepL を使わず Google/Bing へフォールバック。 | ||
| + | (let ((deepl-key (getenv " | ||
| + | (setq gt-default-translator | ||
| + | (gt-translator | ||
| + | : | ||
| + | : | ||
| + | (gt-google-engine) | ||
| + | (gt-bing-engine))) | ||
| + | : | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; EasyPG (GPG) | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | (leaf epa-file | ||
| + | :require t | ||
| + | :config | ||
| + | (epa-file-enable) | ||
| + | ;; pinentry-mode は epg-config の変数 | ||
| + | (with-eval-after-load ' | ||
| + | (setq epg-pinentry-mode ' | ||
| + | |||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | ;;; mu4e 設定を分離ロード | ||
| + | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| + | (load (expand-file-name " | ||
| + | |||
| + | (provide 'init) | ||
| + | ;;; init.el ends here | ||
| + | </ | ||
userapps/emacs.1740539802.txt.gz · 最終更新: (外部編集)
