Emacs

リンクの内容をeldocで表示

eldoc の機能を用いてカーソル下のリンクをエコーエリアに出す設定です。意外と簡単にできました。

(with-eval-after-load "org"
  (add-hook 'org-mode-hook #'my-load-echo-org-link)

  (defun my-echo-org-link ()
    (when (org-in-regexp org-link-bracket-re 1)
      (let ((link "Link:")
            (msg (org-link-unescape (match-string-no-properties 1))))
        (put-text-property 0 (length link) 'face 'minibuffer-prompt link)
        (eldoc-message (format "%s %s" link msg)))))

  ;; これはダメな例
  ;; (defun my-load-echo-org-link ()
  ;;   (setq-local eldoc-documentation-function #'my-echo-org-link))
  ;; こちらが正しい実装
  (defun my-load-echo-org-link ()
    (add-function :before-until (local 'eldoc-documentation-function)
                  #'my-echo-org-link)))

なお、 org-eldoc と併用する場合、 eldoc-documentation-function が専有されてしまうので、次のように advice して回避します。

init.el の読み込みを計測(3)

自宅の主端末を新調したので、init.el の読み込み時間を計測し直しました。2011年モデルから2018年モデルへのジャンプです。

Table 1: init.el 読み込みシーケンスの時間計測
CUI[ms] GUI[ms]
startup 2.63 2.01
core 0.80 0.98
point 0.03 0.05
editing 0.34 0.33
presentation 1.51 1.29
media 0.10 0.04
history 0.25 0.24
development 0.33 0.33
Org Mode 0.0 0.0
frame and window 0.67 0.74
font 0.26 0.27
utility 0.44 0.43

合計値をこれまでの計測(init.el の読み込みを計測init.el の読み込みを計測(2))と比較すると、数値が一桁変わっています。前回との比較では、CUIとGUIと共に半分程度に減少しており「やはり最新の端末は速いな」と感心するばかりです。

Emacs 26.3 has been released

Emacs 26.3 がリリースされました。 RC1 の公開から1週間の正式版公開です。

メンテナンスリリースなので大きな機能追加は無しですが、新元号の令和対応が入っています。なので、今回のリリースは、日本のために出されたようなものです(言い過ぎ

company-mode に移行する

長らく愛用してきた auto-comple ですが、メンテナンスモードに入ったという知らせを受けましたので、 company に移行することにしました。

最近は el-get でもパッケージ管理をしているので、早速以下を追加してインストールです。ヘルプ表示が非標準らしいので company-quickhelp も追加します。

init.el の読み込みを計測(2)

init.el をドラスティックに変更して、元々 postpone.el 用に括り出していた設定と Org Mode に関する設定を、それぞれファイル化して init.el から分離してみました。計測した時間をみるとわかりますが、かなりの効果が得られました。

init.el の読み込みを計測

init.el の中に次のような関数を組み込んで、起動時にどの程度の読み込み時間を要しているのか観察することにしました。

起動時間の制御という意味では、 postpone.el の導入と autoload-if-found 及び with-eval-after-load を積極利用することで、高速な起動を維持できています。しかしながら、常に新しい拡張を試しているので、私の init.el は常に肥大化の傾向にあります。

VimConf 2018 で遊んできた話

生粋の Emacsユーザである私ですが、 VimConf2018 に参加してきました。

会議の開催場所は、比較的近所の秋葉原。駅から徒歩数分と近く、また、とても綺麗な会場でした。Twitter の #vimconf タグで何枚か写真が出回っていると思いますが、それらから得られる印象よりも実際の会場はとても広く、満員の会場は登壇者に十分な威圧感を与えるものでした。

KOF に来ています。

  • 本日、KOF2018に来ています。とても楽しいです。
  • 行番号付きのソースブロックを作ります。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
(defun ad:emacs-init-time ()
  "Return a string giving the duration of the Emacs initialization."
  (interactive)
  (let ((str
         (format "%.3f seconds"
                 (float-time
                  (time-subtract after-init-time before-init-time)))))
    (if (called-interactively-p 'interactive)
        (message "%s" str)
      str)))
  • 付けない場合はこちら。
(defun ad:emacs-init-time ()
  "Return a string giving the duration of the Emacs initialization."
  (interactive)
  (let ((str
         (format "%.3f seconds"
                 (float-time
                  (time-subtract after-init-time before-init-time)))))
    (if (called-interactively-p 'interactive)
        (message "%s" str)
      str)))

MELPAにあるテーマ一覧

MELPAから入手可能な Emacs用のテーマが一覧化されています。 どのメジャーモードに対応しているかも確認できます。 Lisp, JavaScript, C, Ruby, Org Mode の配色をプレビューできます。