Qual função do Bookmarks + lida com vários marcadores com o mesmo nome?

1

O título é bem definidor. Repetindo aqui, lê-se "Qual função do Bookmarks + lida com vários marcadores com o mesmo nome?" Marcadores + é uma melhoria para a funcionalidade de favoritos nativa do Emacs. Eu tenho um número de funções elisp salvo em arquivos em diferentes diretórios e gostaria de marcá-los todos em um arquivo de favoritos. Eu usaria meu arquivo de tags (Etags gerado) para localizá-los e, em seguida, os marcaria com uma anotação igual à documentação da função. Existem nomes de função duplicados, em arquivos em diretórios diferentes.

Eu repetiria isso à vontade & comparar com os favoritos de um arquivo de favoritos existente. Eu só criaria um novo marcador se um ou mais com o mesmo nome já não existisse.

Eu examinei todas as funções Bookmark + (encontradas pelo Etags) e não encontrei uma correspondência para o que gostaria. Eu posso ter que "rolar sozinho".

    
por Alan Wehmann 22.04.2015 / 22:40

1 resposta

1

Não sei se entendi sua pergunta. Sim, com o Bookmark + você pode ter vários favoritos com o mesmo nome de favorito. (Na verdade, você também pode usar o Emacs baunilha, mas não é útil.)

Se você criar marcadores de autofile , por exemplo, o nome do favorito é o mesmo que o nome do arquivo relativo, mas o nome do arquivo gravado é absoluto, assim você pode ter diferentes marcadores com o mesmo nome, apontando para arquivos de mesmo nome que estão em diretórios diferentes.

Para aproveitar isso, você precisa garantir que o valor da opção bmkp-propertize-bookmark-names-flag não seja nil . Você pode alternar essa opção na exibição *Bookmark List* usando o menu Bookmark+ > Toggle > Allowing Identical Bookmark Names .

Você não precisa fazer nada de especial, além disso, para poder criar e usar marcadores com o mesmo nome.

A string doc de bookmark-set diz isso:

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.

Assim, para um marcador comum (por exemplo, não um arquivo automático), use C-u com C-x r m para permitir a criação de um marcador adicional com o mesmo nome.

Com o Marcador +, o comando bmkp-bookmark-set-confirm-overwrite , não bookmark-set , está vinculado a C-x r m . A string doc diz isto:

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.

Ou seja, se você usar C-x r m sem um prefixo arg, antes de sobrescrever um marcador existente com o mesmo nome, será solicitado que você confirme a substituição. Isso significa que você não precisa se preocupar em sobrescrever inadvertidamente.

Atualize após seus comentários

Este não é realmente o lugar para uma discussão. E sua pergunta ainda não está muito clara.

Você está perguntando como verificar se há um marcador existente que tenha um nome determinado e reserve um determinado arquivo? Em caso afirmativo:

(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))

Você está pedindo uma lista de todos os favoritos que têm um nome específico? Em caso afirmativo:

(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))
    
por 24.04.2015 / 21:36