Lisp if-Statement - файл инициализации emacs ".emacs" - PullRequest
2 голосов
/ 23 февраля 2012

Я изменил свой файл .emacs, чтобы автоматически создавать резервные копии скрытых файлов с помощью следующего кода:

(defun make-backup-file-name (filename)
  (expand-file-name
   (concat "." (file-name-nondirectory filename) "~")
   (file-name-directory filename)))

Отлично работает, за исключением того, что резервные копии скрытых файлов переходят из ".hidden-file.xxx" в "..no-long-hidden-file.xxx '

Я знаю ноль Лисп, может кто-нибудь дать мне быстрый обходной путь вроде:

(if (filename) doesn't-start-with "."
  (concat 
  (else do-nothing))

Ответы [ 3 ]

3 голосов
/ 23 февраля 2012

Вы можете использовать (equal (string-to-char filename) ?.).Это превращает строку имени файла в ее первый символ и сравнивает ее с ?., который является символьной нотацией для ..

. Похоже, вы хотите проверить (file-name-nondirectory filename), а не простоfilename, поэтому весь оператор будет выглядеть примерно так:

(if (equal (string-to-char (file-name-nondirectory filename)) ?.)
    (concat (file-name-nondirectory filename) "~")
    (concat "." (file-name-nondirectory filename) "~"))

Таким образом, вся функция должна выглядеть примерно так:

(defun make-backup-file-name (filename)
  (expand-file-name
  (if (equal (string-to-char (file-name-nondirectory filename)) ?.)
    (concat (file-name-nondirectory filename) "~")
    (concat "." (file-name-nondirectory filename) "~"))
  (file-name-directory filename)))

Вам нужно сделать concat в обоихветви, потому что вы всегда хотите добавить ~.

2 голосов
/ 23 февраля 2012

Как это:

(if (not (string-equal (substring "abcdefg" 0 1) "."))
 (message "foo") 
 (message "bar")
)

Так как вы находитесь в emacs, откройте рабочий буфер и M-x eval-buffer, что вы делаете, чтобы убедиться, что он имеет правильную семантику. message полезен при отладке, поскольку выводит строку в мини-буфер.

0 голосов
/ 23 февраля 2012

вы также можете проверить (строковое совпадение "\` \. "(Имя-файла-не-директории имя файла)), но, честно говоря, мне интересно, почему вы думаете, что" ..foo "считается" не скрытым ": в моих тестах `ls 'и * оба игнорировали мой файл" ..test.txt ".

...