LoginSignup
1
1

More than 5 years have passed since last update.

Emacs: パッケージリストの更新時に古い方を待避する

Last updated at Posted at 2018-03-10

パッケージリストの更新時に古い方はどうなるのか?

list-packages はお手軽なんですが、U でアップデートするとき古い版がどうなるのか判らず、はじめのうちは怖くて使っていませんでした。
古い版が手元に残り必要なときにいつでも取り出せる方が良いのです。

少し使って調べてみると嫌な予感は当たって、U で更新すると古い版は自動的に D マークされ x すると最終的に削除されているようです。
以前の Emacs なら少なくとも残すかどうかの選択肢も設けたような気がするのですが、探し方が悪いのかそのようなオプションも見つけられません。

そこで、消される前にバックアップディレクトリにコピーして待避するアドバイスを書きました。
やっていることは消される前にコピーするだけです。
コピーするコードは Dired のファイルコピーを利用しています。

ダウンロード

ここにあります。

インストール

load-path の通ったディレクトリに置いて init.el に以下の1行を追加します。

sample
(require 'package-delete-save)

設定できる変数

pds-backup-directory-name

待避先のディレクトリ名です。無ければここで指定した名前のものが作られます。
デフォルトは init.el の置かれたディレクトリの backup-elpa というディレクトリになります。

pds-overwite-flag

待避先に同じ名前のファイルがあったときのコピーの挙動です。
数値 なら問い合わせ、 nil ならエラーでおそらく止まり(未確認)、それ以外 だと黙って上書きします。
待避先に同じ名前のものが存在することは通常無いので、この変数は設定することはないと思います。

デフォルトは 数値 でその場面になった場合問い合わせで一時停止するので、放ったまま最後まで停止させたくない場合は、'force など適当な シンボル にしておくといいでしょう。
仮に 同じ名前-バージョン のパッケージが待避先にあったとしても、このプログラムのテスト等で残った同一のものでしょうから上書きしてしまっても大丈夫でしょう。

動作確認している Emacs のバージョン

GNU Emacs 25.3.1 (i686-w64-mingw32) of 2017-09-18

Emacs 26.1 向け変更(Jun 16 2018)

Emacs 26.1 が今月公開されていて試したところ make-directory の書き換えがあったようで、うまく動かなくなっていたので対応しました。

と言っても転送先ディレクトリ名の最後にスラッシュが付いただけなので、その部分だけ自分で書き換えるか、カスタマイズして変数の設定をしてある方ならその最後に "/" を付け足すだけで OK です。

以前
(defcustom pds-backup-directory-name  (locate-user-emacs-file "backup-elpa")
以後
(defcustom pds-backup-directory-name  (locate-user-emacs-file "backup-elpa/")

Emacs 26.1 への対応修正その2 (Sat Jun 23 2018)

先週変数側のみで対応しましたが、プログラム側でも末尾に "/" が無ければ追加するようにしました。

26.1 対応版 package-delete-save

(emacs-version)
"GNU Emacs 26.1 (build 1, i686-w64-mingw32) of 2018-05-31"

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1