2011-05-06 17 views
5

Soy nuevo en elisp. http://www.gnu.org/s/emacs/manual/html_node/elisp/Interactive-Codes.html#Interactive-Codes enumera 'caracteres de código' para parámetros interactivos, que AFAIK modifica el comportamiento del mecanismo de entrada cuando se solicita al usuario (por ejemplo: si especifica que la entrada es un nombre de archivo que existe, la funcionalidad autocompletar de emacs buscará nombres de archivo que existe).Emacs lisp - nombres de marcadores de autocompletar

Estoy tratando de encontrar un código para un nombre de marcador que ya existe, es decir: emacs solicitará al usuario un nombre de marcador, y al presionar la pestaña emacs se mostrarán las posibles finalizaciones de nombre de marcador.

¿Existe tal código?

Respuesta

1

Use completing-read para eso. Se podría escribir una función que solicita al usuario un marcador de este modo:

(defun my-function() 
    (interactive) 
    (let ((bookmark (completing-read "Bookmark: " (bookmark-all-names)))) 
    ...)) 

Si prefiere el impulso de ser parte de interactive (de modo que el resultado será obligado automáticamente a los argumentos de la función), se puede usar la siguiente alternativa:

(defun my-function (bookmark) 
    (interactive (list (completing-read "Bookmark: " (bookmark-all-names)))) 
    ...) 

para Emacs para encontrar la función bookmark-all-names también hay que añadir la siguiente línea a su archivo .emacs:

(require 'bookmark) 
+0

Eso es la mayor parte del camino - ¿sabes si hay alguna lista predeterminada que emacs utiliza para almacenar marcadores? – Taras

+0

Esa debería ser la lista devuelta por 'bookmark-all-names'. ¿Podría verificar el código actualizado de arriba? No uso marcadores yo mismo ... ¿Qué debería pasar si la lista de marcadores está vacía? – Thomas

+0

Perdón por la respuesta tardía - ASÍ NO me notificaron por correo electrónico por alguna razón (??). Aparece el siguiente mensaje de error: La definición de función de Symbol es nula: bookmark-all-names. ACTUALIZACIÓN: creo que debe tener la lista de favoritos cargada en un búfer (M-x bookmark-bmenu-list) – Taras

1

La función bookmark-completing-read es la forma estándar de completar un nombre de marcador. Lo hace no necesita la función de nivel inferior completing-read para esto. Ejemplo:

 
    (bookmark-completing-read "Bookmark" bookmark-current-bookmark) 

Si utiliza Bookmark+ continuación bookmark-completing-read acepta algunos argumentos opcionales (similares a completing-read) que pueden ayudar:

  • ALIST - una alista de marcadores para elegir (en lugar de todos los marcadores : bookmark-alist)

  • PRED - un predicado que filtra la lista de candidatos de marcadores

  • HIST - una lista del historial de entrada

También hay una versión no estricta de la función, bmkp-completing-read-lax, lo cual es útil si desea aceptar un nuevo nombre del marcador o completa contra los nombres existentes.