Marcado de archivos en dired con subdirectorios


7

Estoy tratando de marcar un conjunto de archivos (incluidos los archivos de subdirectorios) en una coincidencia directa con una expresión regular, así que hago:

C-U C-x d -alR RET e:/ RET

Seguido por %my entrar en mi expresión regular. No hay coincidencias.

Sin embargo, si ingreso la misma expresión regular en una dirección "normal" (es decir, sin interruptor -R), la expresión regular coincide.

¿Estoy haciendo algo mal? Lo he intentado emacs -Qy obtengo el mismo resultado.

editar:

Parece que la expresión regular real es significativa; ingresar \.mp3$funciona como se esperaba, pero si intento anclar la expresión regular usando ^musicmarcas todo debajo de la e:/musiccarpeta.

Respuestas:


6

Creo que esto es un error en Dired (y también en Dired +).

Lo acabo de arreglar en Dired + ( dired+.el). Descargue la última versión (o espere hasta un día para recogerla en MELPA).

Revisé esto rápidamente, por lo que es posible que haya una buena razón para el comportamiento existente (de larga data), pero al menos por ahora, creo que fue un error.

Gracias por informarlo. Después de comprobarlo un poco más, lo reportaré como un error de Emacs. O bien, puede hacerlo ahora, si te gusta: M-x report-emacs-bug.


ACTUALIZAR

En realidad, las cosas son más interesantes (es decir, más complicadas). Estoy ocupado en este momento, pero actualizaré esto en poco tiempo.

Baste decir que existen ventajas para las diferentes formas de definir los "nombres de archivo" que coinciden. Si toma la versión actual (actualizada esta mañana) dired+.el, hará lo que esperaba: hacer coincidir los nombres de los archivos sin subdirectorios como prefijo.

Pero también puede ser útil hacer coincidir los subdirectores más los nombres de los archivos. De esa manera, por ejemplo, puede hacer coincidir el mismo nombre de archivo en múltiples subdirecciones, o no, au choix.

Es probable que cambie %m(en Dired +) para que un cierto tipo de argumento prefijo le proporcione comportamientos de coincidencia alternativos diferentes. (En este momento, un prefijo arg desmarca en lugar de marcas. Podría cambiarlo para que el signo numérico regule si desmarcar y qué tipo de coincidencia hacer).

Si desea experimentar usted mismo, simplemente tome la definición de dired-mark-files-regexp, junto con la definición de macro dired-mark-if, de dired+.el, y cambie el valor del primer argumento a dired-get-filename( LOCALP). Hay varias posibilidades de correspondencia, regidas por ese valor de argumento.


ACTUALIZACIÓN 2

OK, he actualizado Dired + ( dired+.el) ahora para proporcionar más flexibilidad a este respecto.

Ahora puede marcar / desmarcar nombres de archivos coincidentes que se consideran de diferentes maneras:

  • Relativo (sin parte del directorio, que es lo que suponía incorrectamente que estaba haciendo coincidir).

    Para esto, utiliza un prefijo negativo arg (por ejemplo M--) para marcar y un prefijo cero arg (por ejemplo M-0) para desmarcar.

  • Relativo al deldefault-directory búfer Dired. Esto significa que el nombre del archivo se construye con el nombre relativo adefault-directory. Para una entrada en una lista de subdirecciones insertadas, esto significa prefijar el nombre de archivo relativo (sin parte del directorio) con el nombre de subdirección relativo adefault-directory.

    Para esto, utiliza un argumento positivo (por ejemplo M-+) para marcar y un doble prefijo simple arg ( C-u C-u) para desmarcar.

    Esto es lo que realmente estabas haciendo coincidir, lo que explica por qué viste lo que viste. Con este comportamiento, habría necesitado proporcionar una expresión regular que coincidiera con el nombre relativo al default-directorybúfer. Su uso de ^en la expresión regular estaba tratando de coincidir con el comienzo de este nombre, no con el nombre no directorio. Este es el mismo comportamiento que Emacs vanilla.

  • Absoluto (nombre completo, incluidas todas las partes del directorio).

    Para esto, no utiliza ningún prefijo arg para marcar y un prefijo simple arg ( C-u) para desmarcar. Este es el comportamiento predeterminado ahora para Dired + . Creo que es probablemente un mejor comportamiento predeterminado que el que usa vanilla Emacs (nombres relativos a default-directory).


Eso es genial, muchas gracias por el trabajo que ha realizado, es muy apreciado
Dave F
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.