Я не уверен, что понимаю ваш вопрос. Да, с помощью Bookmark+ вы можете иметь несколько закладок с одним и тем же именем закладки. (На самом деле, вы можете использовать ванильный Emacs тоже, но не с пользой.)
Например, если вы создаете закладки для автофайлов, имя закладки совпадает с относительным именем файла, но записанное имя файла является абсолютным, поэтому вы можете иметь разные закладки с одинаковым именем, указывающие на файлы с одинаковым именем, которые находятся в разные каталоги.
Чтобы воспользоваться этим, вам нужно убедиться, что значение параметра bmkp-propertize-bookmark-names-flag
равно nil
. Вы можете включить эту опцию на экране *Bookmark List*
используя меню Bookmark+
> Toggle
> Allowing Identical Bookmark Names
.
Вам не нужно делать ничего особенного, кроме этого, чтобы иметь возможность создавать и использовать закладки с одинаковыми именами.
Строка документа bookmark-set
гласит:
Plain prefix arg (`C-u'): Do not overwrite a bookmark that has the
same name as NAME, if such a bookmark already exists. Instead,
push the new bookmark onto the bookmark alist.
Таким образом, для обычной (например, не автофайловой) закладки используйте C-u
с C-x r m
чтобы разрешить создание дополнительной закладки с тем же именем.
При использовании Bookmark+ команда bmkp-bookmark-set-confirm-overwrite
, а не bookmark-set
, привязывается к C-x r m
. Строка документа говорит это:
This is the same as `bookmark-set', except that with no prefix arg you
are asked to confirm overwriting an existing bookmark of the same
NAME.
То есть, если вы используете C-x r m
без префикса arg, то перед перезаписью существующей закладки с таким же именем вас попросят подтвердить перезапись. Это означает, что вам не нужно беспокоиться о случайной перезаписи.
Обновление после ваших комментариев
Это не совсем место для обсуждения. И ваш вопрос до сих пор не очень понятен.
Вы спрашиваете, как проверить, существует ли существующая закладка с указанным именем и закладками для данного файла? Если так:
(defun bookmark-name+filename-exists-p (bookmark file)
"Return a bookmark named BOOKMARK for FILE, or nil if there is none.
BOOKMARK is a bookmark name or a bookmark record."
(when (consp bookmark) (setq bookmark (bookmark-name-from-full-record bookmark)))
(catch 'bookmark-exists-p
(dolist (bmk bookmark-alist)
(when (and (string= bookmark (bookmark-name-from-full-record bmk))
(bmkp-same-file-p file (bookmark-get-filename bmk)))
(throw 'bookmark-exists-p bmk)))
nil))
Вы запрашиваете список всех закладок с указанным именем? Если так:
(defun bookmarks-with-name (bname)
"Return a list of the bookmarks with name BNAME."
(bmkp-remove-if-not
`(lambda (bmk) (string= ',bname (bookmark-name-from-full-record bmk)))
bookmark-alist))