Think Proof, Count Two
タイトルの通り,straight.el を用いてインストールした Emacs パッケージの README を (view-mode
で) 開く関数を書いてみました.
元ネタはこちらのるびきちさんの記事です.
ただし筆者の ELisp 力不足のために,元ネタと違って README を開くことしかできません.
また,後述するように若干不完全です.
以前から自分の init.el
に記述していたのですが,大きな問題はなさそうなので本ブログにも書いてみます.
my-straight-view-readme
M-x my-straight-view-readme
でインタラクティブに使用できます.
関数の定義は次のとおりです. cl-lib
が必要になります.
(defvar my-straight-readme-names-list
'("README" "README.org"
"README.md" "README.mkdn" "README.mdown")
"The list used by `my-straight-view-readme'.")
(defun my-straight-view-readme (package)
"Open README of PACKAGE in `view-mode' if it exists.
We search a file such as \"README\", \"README.org\" and so on.
We remark that search case-insensitively.
See `my-straight-readme-name-list'."
(interactive (list (straight--select-package "View README" nil 'installed)))
(let ((found nil))
(cl-loop with case-fold-search = t
for file in my-straight-readme-names-list
for path = (expand-file-name file (straight--repos-dir package))
when (file-exists-p path)
return (progn
(setq found t)
(view-file path)))
(unless found (message "README not found."))))
cl-loop
の使い方がよくわからなかったので見様見真似です.
元ネタのるびきちさんの記事では Helm を使っていましたが,ここでは straight.el
が用意している straight--select-package
という関数を利用しています.
指定されたパッケージがインストールされたディレクトリ内の,README
ファイルを探します.
探すファイル名は my-straight-readme-names-list
変数で指定しています.
パッケージがダウンロードされたディレクトリを得るために straight--repos-dir
関数を利用しています.
これはパッケージ名がリポジトリ名と異なる場合に問題を引き起こします.
例えば
(straight--repos-dir "straight")
; => ~/.emacs.d/straight/repos/straight/
; 正しいダウンロード先のパスは
; ~/.emacs.d/straight/repos/straight.el/
となるため, my-straight-view-readme
では straight
の README を開くこととができません.
straight.el
とは?日本語で straight
について言及している記事が少ない (し,内容があまり無かったり古かったりする)ように思えるので,軽く紹介をしたいと思います.
README を読むのが一番早いし確実だと思うので,したがって以下の記述にはあまり価値がありません.
また多分に誤りを含みます.
straight
自体のインストールは README に書いてあるようにできます.
後述するように version lock ファイルを利用できるので master
ブランチのものよりも develop
ブランチのものをインストールしたほうが良いように思えます1.
straight
のインストール前に (setq straight-repository-branch "develop")
とするだけです.
straight-use-package
関数を使ってパッケージをインストールできます.
インタラクティブにも使えますが,use-package
などと同時に使うことが多いと思います
(参考: grugrut さんの記事).
インストール時にブランチを指定したりできます. 詳しくは README を参照してください.
M-x straight-freeze-versions
とすることで,現在インストールされているバージョンから version lock ファイル (デフォルトだと ~/.emacs.d/straight/versions/default.el
) が作成されます2.
逆に version lock ファイルで指定されたバージョンをインストールするには M-x straight-thaw-versions
を実行します.
例によって詳しくは README を参照してください.
特定のパッケージのバージョンを変更はインストールされたディレクトリ (~/.emacs.d/straight/repos/
以下) に移動して git reset --hard
などで行えます3.
その後 straight-rebuild-package
や straight-normalize-package
等を実行します.
最新版にアップデートするだけならば straight-pull-package
/straight-pull-package-and-deps
/straight-pull-all
などを実行することでも可能です.
FAQ: My init time got slower を参照.
過去には straight
で Org mode をインストールするためには若干の小細工が必要だったようです (参考) が,
2019年3月15日よりその必要はなくなりました.
:depth
キーワード,あるいは straight-vc-git-default-clone-depth
変数を 1
にすることで shallow clone となります.
ただし version lock ファイルで固定されている場合 straight-vc-git-default-clone-depth
変数は影響しません.