我使用的是惡意模式的emacs,我想將<leader>tt
映射到函數projectile-dired
,但是如果正在顯示dired緩衝區,那麼它應該映射到evil-delete-buffer
,所以本質上是創建一個到切換函數的映射。在emacs中如何創建映射到另一個函數返回的函數?
學習Emacs的基礎知識後口齒不清,我想出了這個解決方案:
(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而已。謝謝!
編輯:
這裏是什麼,我想實現一些僞代碼(JavaScript的):
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'(除非它導致非本地出口並且不返回),所以你用'or'包裝它是沒用的。如果你想在'evil-delete-buffer'返回非''nil'時不執行'projectile-dired',那麼使用'and'而不是'when'(或者做別的具有相同效果的東西)。 – Drew
@phils done:)..... @Drew謝謝我是emacs的新手,如果這不起作用,我會使用'if'語句,但它工作,雖然我會得到修改,謝謝。 –