interactive – Directorio base predeterminado en rgrep

Pregunta:

Siempre que estoy usando Mx rgrep para buscar dentro de la arborescencia de mi proyecto, las indicaciones interactivas sugieren los siguientes argumentos predeterminados para la función:

Search for (default: <current word>) (OK, siempre lo que quiero)

Search for <current word> in files (default: *.<extension of the current file>) (en su mayoría bien, no siempre es lo que quiero, pero puedo vivir con eso)

Base directory: <current directory> (no está bien, nunca quiero que use el directorio actual)

Me gusta el primer argumento propuesto, pero me gustaría cambiar el segundo, y especialmente el tercero, para usar otros valores predeterminados (como "directorio principal" en lugar de "directorio actual").

¿Cómo puedo modificar rgrep para que (1) permanezca interactivo, pero proponga diferentes valores predeterminados, o (2) se vuelva no interactivo, pero use la palabra actualmente debajo del cursor como primer argumento?

Respuesta:

Método totalmente interactivo

Una forma de hacerlo consiste en llamar a rgrep interactiva en un contexto modificado para que los valores predeterminados deducidos se correspondan con lo que desea. Por ejemplo, deje que rgrep crea que lo llamó desde un archivo llamado "foo.cxx" en el directorio principal.

La ventaja de esto es que mantiene la inteligencia que rgrep pone en la deducción de parámetros predeterminados (para seguir con el ejemplo, no solo tiene " * .cxx " como patrón de archivos, sino también " * .cc ", " * .cpp " & co).

La desventaja de este método es que cambiar el buffer-file-name y default-directory podría tener efectos secundarios no deseados (pero no vi ninguno en este ejemplo).

(defun my-rgrep ()
  (interactive)
  (let ((buffer-file-name "foo.cxx")
        (default-directory (file-name-directory default-directory)))
    (call-interactively #'rgrep)))

Método semi-interactivo

También puede diseñar un comando que le permita gestionar de forma interactiva la parte del patrón y establecer valores de forma no interactiva para otros argumentos. Luego llama de forma no interactiva a rgrep :

(defun my-rgrep (&optional confirm)
  (interactive "P")
  (rgrep (grep-read-regexp)
         "*.cxx"
         (file-name-directory default-directory)
         confirm))

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım