1

Название довольно определяющее. Повторяя здесь, он гласит «Какая функция в Закладках + имеет дело с несколькими закладками с одинаковым именем?Msgstr "Bookmarks + - это улучшение функциональности закладок, встроенное в Emacs. У меня есть несколько функций elisp, сохраненных в файлах в разных каталогах, и я хотел бы отметить их все в файле закладок. Я бы использовал свой файл тегов (сгенерированные Etags), чтобы найти их, и затем я бы добавил их в закладки с аннотацией, равной документации по функции. В файлах в разных каталогах есть повторяющиеся имена функций.

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

Я просмотрел все функции Bookmark+ (найденные Etags) и не нашел соответствия тому, что хотел бы. Возможно, мне придется "свернуть свое".

1 ответ1

1

Я не уверен, что понимаю ваш вопрос. Да, с помощью 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))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .