spacemacsでパッケージのローカルバージョンを使用する方法


8

これはこの質問に似ていますが、その答えは廃止されているようです。

私がレイヤーを使用していて、そのレイヤーが使用している特定のパッケージのコードをハックしたいとしましょう。どうすればいいですか?


一般的に達成したいことをよりよく説明するために、具体的な例を示します。

spotifyレイヤーを機能させようとしmasterましたが、helm-spotifyパッケージの現在のブランチでは非推奨のWeb APIを使用しています。これを修正するためのプルリクエストがあり、私はそれを試し、おそらく何かを貢献したいと思っています。私の問題は、のローカルコピーhelm-spotifyをロードできないことです。

私が試したのは、developブランチに切り替えることでしたspacemacs

git branch --track develop origin/develop
git checkout develop

~/.emacs.d/layers/spotify/packages.el

から変わった

(setq spotify-packages '(spotify helm-spotify))

(setq spotify-packages
          '(    
                spotify
                (helm-spotify :location local)
           ))

そしてhelm-spotifyリポジトリを~/.emacs.d/layers/spotify/local/helm-spotify

spacemacsを再起動すると、

File error: Cannot open load file, no such file or directory, multi

helm-spotify.elがそこを見ると:

(require 'multi)

だから私の推測では、依存関係helm-spotifyからインストールするとmelpamultiロードの前に解決されますhelm-spotifyが、もちろん、のローカルコピーを使用すると解決されませんhelm-spotify

だから私の質問は

  • ローカルパッケージの使用時に依存関係を解決するにはどうすればよいですか?
  • または、これを私が説明したものとは完全に異なる方法で実行する必要がありますか?

私はまた、成功せずに追加multidotspacemacs-additional-packagesたり追加したりしようとしましたspotify-packages

(setq spotify-packages '(
                         multi ;; I added this
                         spotify
                         (helm-spotify :location local) ;; I modified here
                         ))

;; I added this
(defun spotify/init-multi ()
  (use-package multi))

;; the rest is as it was

(defun spotify/init-spotify ()
  (use-package spotify
    :config (spacemacs/set-leader-keys
              "amsp" 'spotify-playpause
              "amsn" 'spotify-next
              "amsN" 'spotify-previous
              "amsQ" 'spotify-quit)))

(when (configuration-layer/layer-usedp 'spacemacs-helm)
  (defun spotify/init-helm-spotify ()
    (use-package helm-spotify
      :config (spacemacs/set-leader-keys
                "amsg" 'helm-spotify))))

の中でpackages.el。に追加せずに試してみmultiましたdotspacemacs-additional-packages


AFAIK package.el(ローカルのEmacsモジュール)は実際にはlocal/helm-spotifyパッケージとして認識されないため、ローカルパッケージを使用するときに依存関係を自動的に解決する方法はありません。それを解決する方法は手動であり、あなたは正しい方向にあります。追加しようとした方法の詳細を追加できますmultiか?それはあなたがそれを追加した場合は明確ではないadditional-packagesspotify-packages同時に、または別々に試してみました。有するmultispotify-packagesおよびspotify/init-multi関数packages.el(使用せずadditional-packages)に十分であるべきである
bmag

また、ローカルでコードを編集せずにプルリクエストをテストする場合は、のrecipe代わりにを使用できますlocal。例(helm-spotify :location (recipe <recipe specs>))
bmag 2016

私はちょうど追加することなく、それを試みmultidotspacemacs-additional-packages成功しません。エラーは同じです。私packages.elが使用しているものを反映するように質問を更新しました。お疲れ様でした!
Dimitri Schachmann 2016

あなたがバグを見つけたと思います。私がうまくいくと思っていたものを試しましたが、同じエラーが発生しました。ここでは遅いので、今は深く掘り下げることはできませんが、当面recipelocal(代わりに複数の依存関係を処理する必要があります)の代わりにを使用するか、multi構成を別のレイヤーに移動してそのレイヤーを確認してください(レイヤリスト)の前spotifyにリストされているdotspacemacs-configuration-layers
bmag

回答:


10

まず、マスターブランチのコードは絶対に変更しないでください。Spacemacsは、マスターブランチを読み取り専用に保ちながらハッキングできるように設計されています。また、マスターブランチへの強制プッシュが発生することもありません。本当にコードを変更したい場合は、developブランチを使用して、手動で最新の状態に保つ必要があります。開発ブランチが強制的にプッシュされることはありません。

編集:あなたは実際に開発ブランチを使用していた、私の謝罪、私は参照のために段落をさせてください。

今の答え:-)あなたが望むことをする正しい方法は、の場所を上書きすることですdotspacemacs-additional-packageshelm-spotify名前空間をフォークして試してみて、追加しました:

   dotspacemacs-additional-packages
     '((helm-spotify :location (recipe :fetcher github :repo "syl20bnr/helm-spotify")))

次に、再起動時にSpacemacsがMELPAに到達する代わりに、私のフォークからパッケージを正しくフェッチしました。Spacemacsはquelpa、MELPAレシピに基づいてGitHubからリポジトリをフェッチpackage.elするために使用し、依存関係が正しく解決されるようにパッケージをインストールするために使用されます。

ご了承ください:

  • ディレクトリのhelm-spotifyフォルダを手動で削除して、˜/.emacs.d/elpaEmacsを再起動する必要があるかもしれません。
  • 変数にspotifyレイヤーを追加する必要がありますdotspacemacs-configuration-layers

3
ブランチをレシピに追加することもできます::branch "my-branch"
syl20bnr

これは完璧に機能しました!大いに感謝する!
Dimitri Schachmann 2016

私が理解するのが遅い場合は申し訳ありませんが、誰かがこれが愚かな形式であることを誰かが説明できますか?そこで、現在MelpaのSpacemacsによって自動的にインストールされているパッケージXYZを使用しています。このパッケージをローカルバージョンに切り替えるために必要な手順は何ですか?(または、それが必要な場合は、私のGithubリポジトリにあるものですが、率直に言って、変更のデバッグにはかなり面倒です。)どのSpacemacs構成ファイルをどのように調整する必要がありますか?
leftaroundabout

または、ディレクトリ内にパッケージの名前でディレクトリを作成し、 dotspacemacsファイルの関数内のリストに.emacs.d/private/local追加(some-package :location local)して、そのディレクトリをload-path変数に追加し ます。パッケージファイルをこのパッケージディレクトリに配置した後、完全なパスを必要とせずに、dotspacemacsファイルの関数の本体内にを 配置することにより、ファイルをロードできます。-spacemacs docからdotspacemacs-additional-packagesdotspacemacs/layers(require 'package-name)dotspacemacs/user-config
Didier A.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.