use-packageの:ensureタグでパッケージ名を指定するのはいつですか?


7

use-package:ensureタグを使用してパッケージを自動的にインストールできます。あなたは次のようにそれを行うことができます

(use-package <package>
  :ensure t)

しかし、のように機能しない一部のパッケージではauctex。これらの場合、パッケージをensure次のように指定できます。

(use-package tex
  :ensure auctex)

このブログ/チュートリアル/サイトによると、理由は

これは、インストールされるとパッケージをauctex上書きするためtexです。

それは何を意味し、他のパッケージに対していつそれを行うべきかをどのようにして知ることができますか?

回答:


11

ただし、機能しないパッケージもあります。などauctex

その理由は(use-package tex :ensure t)動作しませんauctexので、あるauctex名前GNU ELPAパッケージは、(参照(emacs) Packages)、一方、tex名称機能(参照(elisp) Named Featuresにより提供)auctexのパッケージ。

つまり、パッケージの一部として配布されるtex単一のファイルに名前を付けます。次の例を検討してください。tex.elauctex

M-xpp-macroexpand-last-sexpRET後のポイントで入力

(use-package tex
  :ensure t)

沸騰する形を与える

(progn
  (use-package-ensure-elpa 'tex '(t) 'nil)
  (require 'tex nil t))

同じように

(use-package tex
  :ensure auctex)

効果的に拡大する

(progn
  (use-package-ensure-elpa 'tex '(auctex) 'nil)
  (require 'tex nil t))

これは、NAME引数use-packageとその:ensureキーワードの目的の違いを示しています。前者は、どの名前付きフィーチャーが残りのスタンザに関連する/デフォルトに属するかを宣言します。これはとまったく同じ意味with-eval-after-loadです。参照してください(elisp) Hooks for Loading

後者は単に関数の二番目の引数を介してインストールすることが指定されたパッケージ(S)を求めuse-package-ensure-elpat単に電流によりという名前のパッケージを意味しますNAMEuse-package-ensure-elpa、次に、呼び出しpackage-installます。詳細については、を参照してください(emacs) Package Installation

このブログ/チュートリアル/サイトによると、理由は

なぜなら、インストールされると、auctexはtexパッケージをオーバーライドするからです。

どういう意味ですか

残念ながら、これは間違いであり、誤解を招くものでもあります。「オーバーライドする」とは、通常、既存の機能を置き換える、またはサルパッチングすることを指します(アドバイスなど)。あるパッケージが別のパッケージと同じ名前の機能を提供し、後者をEmacsロード関数から隠す場合、これは「シャドウイング」と呼ばれます。

AUCTeXディストリビューションは、さまざまな組み込みTeX関連機能をオーバーライドおよび拡張しますが、組み込みライブラリをシャドウしません。これは、の結果を調べることで確認できますM-xlist-load-path-shadowsRET

より良い権限はuse-packageドキュメント自体です:https : //github.com/jwiegley/use-package/#package-installation

他のパッケージに対してそれをいつ行うべきかをどのようにして知ることができますか?

use-packageスタンザをグループ化する方法と、対応するパッケージの名前の両方に依存します。たとえば、組織に関連するすべての設定またはほとんどの設定を1つにまとめ(use-package org ...)たいorg-plus-contribが、組み込みのディストリビューションではなく組織のディストリビューションを使用する場合は、次のように記述します。

(use-package org
  :ensure org-plus-contrib
  ...)

あなたは書かないだろう

(use-package org-plus-contrib
  :ensure t
  ...)

というorg-plus-contrib.el名前のパッケージがある場合でも、という名前のファイルがないためorg-plus-contribです。同様にあなたは書きません

(use-package auctex
  :ensure t
  ...)

同じ理由で、名前付き機能はありませんauctex(ファイルありますがauctex.el、呼び出されません(provide 'auctex))。


これらの不一致/セマンティクスはどれもに固有のものではないことに注意してくださいuse-package。これらはすべて(強力で便利な)Emacsの機能でありuse-package、これまでのところ抽象化にしか利用できません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.