Mascaramento de saída de preenchimento-leia em Emacs Lisp
Pergunta
Eu estou fazendo completing-read
com uma lista de caminhos de sistema de arquivos, por exemplo. ("~/parent/child" "/parent/child")
.
Eu gostaria de máscara a saída de completing-read/ido-completing-read
para que ele iria mostrar apenas child
, mas ainda devolver o compelete caminho.
Isso é possível?
Melhores cumprimentos, Rato
Solução
Resposta:não, não é possível, porque, completando-leitura não manter em conta a semântica das cordas.
Isso é possível, mas com várias chamadas de completar a lista.
A idéia é que essa função é passada uma lista de cadeias de caracteres, e ele ajuda você a escolher uma seqüência de caracteres a partir da lista.
Concluindo-lista não tem nenhum controle sobre o que as cadeias contêm.Ele não se preocupa com a semântica de cadeias de caracteres, como caminhos.Ele vê apenas a lista de seqüências de caracteres.
Assim, para fazer como você quiser, você chamá-lo de uma vez com a lista de arquivos do diretório atual, e se você selecionar um diretório, primeiro você alterar tto que de diretório e, em seguida, chamá-lo mais uma vez com a lista de arquivos do diretório, etc.
Se você deseja manter pwd o mesmo que inicial, em seguida, quando ele retorna , você alterar novamente para o diretório original.
(cd (concat default-directory
(completing-read "> " (directory-files default-directory ))))
Outras dicas
O pacote uniquify
faz algo semelhante ao que você deseja.Quando você tem dois buffers de visitar arquivos com o mesmo nome que ele irá adicionar uma seqüência de caracteres no final, em seguida, para diferenciar os dois.
Por exemplo, se você tem arquivos /etc/foo/bar/a
e /mnt/a
ele irá chamar os buffers algo como a <bar>
e a <mnt>
.Em seguida, quando você usa ido
para alternar buffers você não tem que selecionar a partir do nome completo, mas você acaba com o direito de buffer.