Marcando arquivos em dired com subdiretórios

7

Estou tentando marcar um conjunto de arquivos (incluindo arquivos de subdiretórios) em dired que corresponde a um regex, então faço:

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

Seguido por %me digite meu regex. Sem combinações.

Se, no entanto, eu inserir o mesmo regex em uma direção "normal" (ou seja, sem opção -R), o regex corresponderá.

Estou fazendo algo errado? Eu tentei com emacs -Qe obtive o mesmo resultado.

editar:

Parece que o regex real é significativo; inserir \.mp3$funciona como esperado, mas se eu tentar ancorar o regex usando ^musicmarcas tudo na e:/musicpasta

Dave F
fonte

Respostas:

6

Eu acho que isso é um bug no Dired (e também no Dired +).

Eu apenas corrigi- lo em Dired + ( dired+.el). Faça o download da versão mais recente (ou aguarde um dia para buscá-la no MELPA).

Eu verifiquei isso rapidamente, então é possível que exista uma boa razão para o comportamento existente (de longa data), mas por enquanto, pelo menos, acho que foi um bug.

Obrigado por denunciá-lo. Depois de conferir um pouco mais, relatarei como um bug do Emacs. Ou você pode fazê-lo agora, se você gosta: M-x report-emacs-bug.


ATUALIZAR

Na verdade, as coisas são mais interessantes (isto é, mais complicadas). Estou ocupado no momento, mas atualizarei isso em pouco tempo.

Basta dizer que existem vantagens em diferentes maneiras de definir os "nomes de arquivos" correspondentes. Se você pegar a versão atual (atualizada esta manhã) dired+.el, ela fará o que você esperava: corresponda aos nomes dos arquivos sem subdiretação como prefixo.

Mas também pode ser útil comparar com os subdiretórios e com os nomes dos arquivos. Dessa forma, por exemplo, você pode combinar o mesmo nome de arquivo em vários subdiretórios - ou não, au choix.

Provavelmente vou mudar %m(no Dired +) para que um certo tipo de prefixo arg ofereça comportamentos de correspondência diferentes e alternativos. (No momento, um prefixo arg desmarca em vez de marcas. Eu posso alterá-lo para que o sinal numérico decida se deseja desmarcar e que tipo de correspondência fazer.)

Se você quiser experimentar, basta pegar a definição de dired-mark-files-regexp, juntamente com a definição de macro dired-mark-if, de dired+.ele alterar o valor do primeiro argumento para dired-get-filename( LOCALP). Existem várias possibilidades de correspondência, regidas por esse valor de argumento.


ATUALIZAÇÃO 2

OK, atualizei o Dired + ( dired+.el) agora para fornecer mais flexibilidade nesse sentido.

Agora você pode marcar / desmarcar nomes de arquivos correspondentes que são considerados de maneiras diferentes:

  • Relativo (sem parte do diretório, que é o que você estava incorretamente assumindo que estava correspondendo).

    Para isso, use um prefixo negativo arg (por exemplo M--) para marcar e um prefixo zero arg (por exemplo M-0) para desmarcar.

  • Relativo aodefault-directory buffer Dired. Isso significa que o nome do arquivo é construído com o nome relativodefault-directory. Para uma entrada em uma listagem de subdiretórios inserida, isso significa prefixar o nome do arquivo relativo (sem parte do diretório) com o nome do subdiretório relativo adefault-directory.

    Para isso, use um arg positivo (por exemplo M-+) para marcar e um prefixo duplo e simples arg ( C-u C-u) para desmarcar.

    Isto é o que você estava realmente correspondência, o que explica por que você viu o que viu. Com esse comportamento, você precisaria fornecer uma regexp que correspondesse ao nome em relação ao default-directorybuffer. Seu uso ^no regexp estava tentando corresponder ao início desse nome, não ao nome do não-diretório. Esse é o mesmo comportamento do Emacs de baunilha.

  • Absoluto (nome completo, incluindo todas as partes do diretório).

    Para isso, você não usa o prefixo arg para marcar e um prefixo simples arg ( C-u) para desmarcar. Portanto, esse é o comportamento padrão agora para o Dired + . Eu acho que é provavelmente um comportamento padrão melhor do que o usado pelo Emacs de baunilha (nomes relativos a default-directory).

Desenhou
fonte
Isso é brilhante - muito obrigado pelo trabalho que você fez, é muito apreciado
Dave F