我正試圖解決dired-do-shell-command
(綁定到!
)無法在當前和父目錄.
和..
'上調用的限制'。堆棧跟蹤粘貼在底部。僅當從某個其他函數調用時觸發函數的建議
我可以如下定義一個建議繞過此錯誤:
(defadvice dired-get-filename (before h-no-error-if-not-filep activate)
(ad-set-arg 1 t))
但是,這會影響到dired-get-filename
所有呼叫。我希望它只在堆棧爲dired-do-shell-command -> dired-get-marked-files -> dired-get-filename
時觸發。是
我能想到的唯一辦法如下
- 在
(with-output-to-string (backtrace))
在勸定義搜索匹配 - 添加周圍建議其他方法來設置一些變量,可以在提醒測試定義。
有沒有更好的方法來做到這一點?我想我從(backtrace)
Debugger entered--Lisp error: (error "Cannot operate on `.' or `..'")
signal(error ("Cannot operate on `.' or `..'"))
error("Cannot operate on `.' or `..'")
dired-get-filename(t)
dired-get-marked-files(t nil)
(let ((files (dired-get-marked-files t current-prefix-arg))) (list (dired-read-shell-command (concat "! on " "%s: ") current-prefix-arg files) current-prefix-arg files))
call-interactively(dired-do-shell-command nil nil)
Why can dired-do-shell-command not operate on '.' or '..'?
對於任何人來到這個Q&A後期,這個問題已經被提出,並固定 - 'dired-DO殼command'適用於'.'和'.. '在Emacs的穩定版本中。 – phils