発射物が選択したプロジェクトをスティッキーにし、現在のバッファーに従わないようにすることはできますか
On 2月 14, 2021 by adminprojectile-switch-projectを呼び出すときに、発射物のみがプロジェクトを切り替えるようにすることはできますか?バッファに従わない場合は?
emacsでバッファを切り替えると、projectileはプロジェクトを現在のバッファが属するプロジェクト(存在する場合)に切り替えます。
通常はプロジェクトで作業します。ただし、他のプロジェクトからもファイルを開いてください。作業項目とメモを開いた組織ファイル(組織プロジェクトに属する)といくつかのテストスクリプト(スクリプトプロジェクトから)、そして作業中のプロジェクトのソースがあります。
これにより、 (helm)-projectile-find-fileを使用してファイルを開くことは、通常、最初にそのプロジェクトからバッファーに切り替えるか、(helm)-projectile-switch-projectを実行する必要があるため、ほとんど意味がありません。そして、(ほぼ)helm-find-filesを使用することもできます。
プロジェクトファイルを開くためにいつでもCc pfを実行できるように、発射体グローバルモードをアクティブにしたいのです。
コメント
回答
通常、発射体コマンドはprojectile-project-root
を呼び出して、現在のプロジェクトを検索します。現在のdefault-directory
を確認することで機能します。
プロジェクトのルート関数にアドバイスして、代わりに固定値を返すようにすることができます:
(defvar projectile-main-project "~/projects/foo") (defun use-main-project (&rest args) "Skip calling `projectile-project-root" when there is a main project defined." (when projectile-main-project projectile-main-project)) (advice-add #"projectile-project-root :before-until #"use-main-project)
この実装は、projectile-main-project
が設定され、それを返します。メインプロジェクトをnilに設定すると、代わりにデフォルトの発射物の動作が得られます。
メインプロジェクトを変更するコマンドは次のとおりです。上記のprojectile-project-root
にアドバイスしたため、これによりメインプロジェクトの設定が一時的に解除され、発射体が現在のバッファのプロジェクトを把握し、その結果を使用できるようになります。
(defun set-main-project (&optional dir) "Set the projectile main project based on the current buffer. When called with argument DIR, make that main project instead." (interactive) (if dir (setq projectile-main-project dir) (let ((current-project)) (let ((projectile-main-project nil)) (setq current-project (projectile-project-root))) (setq projectile-main-project current-project))))
UPDATE
使用している場合advice-add
(Emacs 24.4より古い)を持たないバージョンのEmacsでは、代わりにdefadvice
を使用して同じ結果を得ることができます。
(defadvice projectile-project-root ( around use-main-project activate) "Use the current main project, if any." (if projectile-main-project (setq ad-return-value projectile-main-project) ad-do-it))
コメント
- 素晴らしい!非常に素晴らしい!どうもありがとうございました。代わりにdefadviceまたは同様のものを使用できますか? 24.3で' m。ただし、ここでも、アップグレードすると便利です=)
- もちろん、代わりにdefadviceを使用できます。その場合、'便利な
:before-until
オプションがないため、around
アドバイスを行い、メインプロジェクトが設定されていない場合は、projectile-project-root
を明示的に呼び出します。 - 関連するユースケースでは、同様のことを行うのが理にかなっています。ただし、
:after-until
のアドバイスを使用します。projectile-project-root
は、プロジェクトの外部でnil
を返すためです。したがって、アドバイスを使用してデフォルトプロジェクトを設定できます。このロジックは、cond
に似ており、最終的なデフォルトオプションでプログラムします。
projectile-find-file
を実行する場合、異なるプロジェクトであっても、常に" main "プロジェクト、正しいですか?もしそうなら、現在'は実装されていませんが、プロジェクトを" main "。