2018年3月17日土曜日

emacs の設定を org-mode で

emacs 設定の見通しが悪い。

emacsのパッケージ管理は、el-get + init-loader を使ってきた。 昔の設定も残っているし、色々とゴミが貯まっていて見通しが悪い。 コメントなんかも中途半端だし、読み返すと理解できないヤツも多々ある。

で、整理しようと手をつけてはみたが、ファイルが40ほどあるので、 チョットした修正なら問題ないが、整合性とかを確認しながらの作業は、 記憶力が怪しい自分には辛いし、遅々として進まない。

で、思い切ってバージョンアップをやってみた(無謀だった)。

主に参考にさせていただいたのは、 package.el + use-package で落ち着いた - YAMAGUCHI::webloguse-packageで可読性の高いinit.elを書く - Qiita 、そして 色々探しているうちに見付けた、 Emacs の設定GitHub - uwabami/emacs: Emacs の設定ファイル群 。 org-mode で管理できるのを知ったのが結構大きい。

package.el + use-package + org-mode

おおまかな設定方法は、init.el で、package.el と use-package の 設定をして、まず org を読み込む。 その後 org-babel-load で、 各種設定を babel-mode で記述した org ファイルから .el を作成させて、読み込む。 org-babel-load の処理時間はかかるが、org ファイルの更新が無いと、skip される。あってるかな?

他の先人達を探したが、org-mode自体の設定ばかりヒットして、 肝心な「パッケージの管理」に関する情報がなかな見付からない。 見付けたのは、これくらい。

結構昔からこのような管理方法はあるみたい。 org-install が obsolete なので、こいつが含まれてる情報は少し古いのかもしれない。 (obsolete だと知ったのは、結構あとになってから)

use-package の使い方は沢山ヒットするので、 これまでの el-get の設定と比較しながら作業すれば、 間違いとかが減らせるだろうという期待もあった。

以下が init.el 。 正しいかは不明。いまのところ大丈夫そう。 site-start.d 下に config.org を置いて、init-loader の読み込み順に追記、 動作確認しがら作業。 8割ほどは作業が終了したはず。 さすが org-mode のアウトライン機能は便利。 残りは使いながらか。バイトコンパイルはさせたいかも。

[update 201903]

;;; init.el -- my emacs settings.
;;; Commentary:
;  use packages version.

;;; Code:
;; Emacs GC settings
;  https://github.com/jethrokuan/.emacs.d/blob/master/config.org#org-mode-for-note-taking
; 2018-08-29
;(setq gc-cons-threshold 50000000)
; https://zzamboni.org/post/my-emacs-configuration-with-commentary/
;(setq gc-cons-threshold (* 1024 1024 1024))

; 2019-03
;; https://www.reddit.com/r/emacs/comments/3kqt6e/2_easy_little_known_steps_to_speed_up_emacs_start/
;; huge impact to profile-dotemacs results; GC takes up a lot of init time
(setq gc-cons-threshold most-positive-fixnum)
;; reset gc-cons-threshold
;; idle timer suggested by vermiculus
(run-with-idle-timer
 10 nil
 (lambda ()
   (setq gc-cons-threshold (car (get 'gc-cons-threshold 'standard-value)))
(message "gc-cons-threshold restored to %S" gc-cons-threshold)))

;;; Begin initialization
(setq inhibit-startup-message t)
(setq initial-scratch-message "")

;;; Set up package
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
;;(add-to-list 'package-archives '("marmalade" . "https://marmalade-repo.org/packages/") t)

(package-initialize)

; load-prefer-newer は Emacs >= 24.4
(customize-set-variable 'load-prefer-newer t)

(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))

(eval-when-compile
  (require 'use-package))
;; (require 'bind-key) ;; not use

(use-package org
  :pin "org")

;; (defvar org-startup-dir (concat user-emacs-directory "site-start.d/"))
;; (org-babel-load-file (expand-file-name "config.org" org-startup-dir))

;; change 201901
;(setq exec-path (parse-colon-path (getenv "PATH")))
; ==exec-path== exec-directory が含まれないので変更。

(dolist (path (reverse (split-string (getenv "PATH") ":")))
  (add-to-list 'exec-path path))

(require 'server)            ;; autoloadされてないので必要らしい
(unless (server-running-p)   ;; 起動している server があるかのチェック
   (server-start)
   )
;
(setq custom-file "~/.emacs.d/custom.el")

;;; Load org
(use-package org :ensure t
  :pin "org")

(defvar org-startup-dir (concat user-emacs-directory "site-start.d/"))

;;; Load the config
(org-babel-load-file (expand-file-name "config.org" org-startup-dir))

(load custom-file)

(put 'upcase-region 'disabled nil)

;;; init.el ends hear

なぜか起動時間が3割ほど早くなった。 el-get を使ってた時の間違った設定が減ったためだろう。 随分と時間を使ったが、期待通りの成果?なのかも。

設定用の org ファイルは、ひとつに纏めたので 30004000行を越える。必要なのは半分以下。 ちょこっとした修正には大きすぎるので、落ち着いたら、また分割するかも。

[20180413]やっと落ち着いたみたい。

[20190903]serverをこちらに移したり、pathの設定方法を変更したり。


0 件のコメント:

コメントを投稿

麻のボディタオル

2018年の秋(まだ、自転車を封印してない)、 近江上布伝統産業会館 で、興味からボディタオルを購入した。 お、よかった。: 自然派パン工房 ふるさとの道 ほぼ毎日風呂で使ってきて、ついに寿命がきたようだ。 お店の方に、「糸が痩せて破れてくる」まで使える、と...