私はevac-modeでemacsを使用していますが、<leader>tt
を関数projectile-dired
にマップしたいのですが、diredバッファが表示されている場合はevil-delete-buffer
にマップする必要があります。つまり、トグル関数へのマップを作成する必要があります。 emacsのの基本を学習した後emacsでは、別の関数から返された関数へのマッピングを作成する方法は?
は、Lisp私はこの解決策を考え出した:
(defun toggle-projectile-dired()
"Toggles projectile-dired buffer."
(interactive)
(or
(when (derived-mode-p 'dired-mode)
(evil-delete-buffer (current-buffer)))
(projectile-dired)))
;; This is how the mapping is done
(evil-leader/set-key "tt" 'toggle-projectile-dired)
しかし、私は、このソリューションでやったことは、最終的に別の関数に呼び出す関数へのマップを作成することでした。
私の解決策はうまくいっていますが、私ができなかったことは、そのようなアプローチをどのように書かなければならないか(呼び出す代わりに)呼び出される関数を返すことでしたか?
つまり、関数名を返して、そのマッピングが関数を呼び出す方法を教えてください。
PD:この質問はelispの一部を学ぶためのものです。ありがとう!
編集:ここでは
は私が達成したいもののいくつかの擬似コード(ジャバスクリプト)です:
function toggleProjectileDired() {
if (derivedModeP == 'dired-mode') {
// We're in dired buffer
return 'evilDeleteBuffer';
} else {
return 'projectileDired';
}
}
evilLeaderSetKey("tt", toggleProjectileDired());
擬似コードで私のソリューションは、次のとおりです。あなたのよう
function toggleProjectileDired() {
if (derivedModeP == 'dired-mode') {
// We're in dired buffer
evilDeleteBuffer();
} else {
projectileDired();
}
}
evilLeaderSetKey("tt", toggleProjectileDired);
他の関数が関数を呼び出す間、呼び出される関数名を返します。 elispで呼び出される関数名を返す方法は?
あなたの質問があいまいであるため、あなたができることを期待している例を示す擬似コードを追加してください。 – phils
質問は不明です。また、 'when'は常に' nil'を返します(ローカルではない終了を返し、返さない限り)ので、 'または'で囲むことは無意味です。 'evil-delete-buffer'が非' nil'を返すときに 'projectile-dired'を実行しない場合は、' when'の代わりに 'and'を使います(または同じ効果を持つ何か他のものを実行してください)。 – Drew
@phils done:)..... @Drew thanks私はemacsの初心者ですが、それがうまくいかない場合は 'if'文を使用しますが、それはうまくいきました。 –