Как удалить файлы с восклицательными знаками! используя emacs 'delete-file - PullRequest
0 голосов
/ 27 октября 2009

Я пытаюсь заставить функцию emacs 'delete-file удалять файлы с восклицательными знаками в именах.

Конкретный вариант использования заключается в том, что я настроил emacs для сохранения всех файлов резервных копий в одном каталоге и удаления старых файлов резервных копий. Однако, когда все файлы резервных копий помещены в один каталог, разделитель каталогов / заменяется на !.

Когда delete-file вызывается для файла с восклицательным знаком в имени, он возвращает ноль и файл не удаляется. Это не сигнализирует ни о какой ошибке. Обычно delete-file возвращает ноль. В любом случае, система резервного копирования emacs использует delete-file для удаления, и я бы не стал переопределять всю функцию, просто чтобы изменить одну строку.

Я пытался поставить обратную косую черту в восклицательных знаках и заключить в кавычки строку имени файла, но ни одна из них не сработала. Я обнаружил, что что-то в моей конфигурации вызывает это, но я еще не понял, что. Я отследил источник проблемы до моей пользовательской функции system-move-file-to-trash, которую теперь мне нужно отлаживать.

Итак, как я могу заставить это работать?

Версия Emacs: GNU Emacs 23.1.50.1
Emacs-снимок: Установлено: 1: 20090730-1 ~ jaunty1

Ответы [ 2 ]

3 голосов
/ 27 октября 2009
M-x delete-file

Затем просто введите имя файла, ничего не избегайте, просто имя,

!home!blah!filename

и это просто работает. И то же самое касается вызова LISP,

(delete-file "!home!blah!filename")
1 голос
/ 27 октября 2009

Я нашел ответ. Моя пользовательская функция system-move-file-to-trash, которую будет автоматически использовать delete-file, некорректно называется shell-quote-argument в имени файла. Очевидно, что аргументы команды, выполняемой с использованием call-process do not , должны быть заключены в кавычки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...