Pesquisa incremental para caracteres não / acentuados

6

O emacs possui um modo de busca incremental, em que a pesquisa por um caractere procurará por ele mesmo e por qualquer outra versão do caractere com acentos, semelhante a como o Google Chrome (pelo menos v27) fará ao pesquisar em uma página?

Como alternativa, existe uma biblioteca adicional ou um pedaço de código elisp que possa colocar uma pesquisa incremental nesse modo?

Por exemplo, pesquisa incremental para:

  • 'manana', encontraria 'manana' ou 'mañana'
  • 'motley crue', também encontrará 'Mötley Crüe' (com a diferenciação de maiúsculas e minúsculas).

Até mesmo uma solução que cobre apenas um subconjunto desses caracteres seria útil.

    
por user38983 11.11.2013 / 23:52

2 respostas

5

Grande pergunta. Juri Linkov estava falando sobre implementar isso para o Emacs, mas nada aconteceu até agora. Veja estes dois tópicos de bug do Emacs:

Veja esta parte do primeiro tópico do bug , por exemplo. Inclui este código de Ulrich Mueller:

   (let ((eqv-list '("aAàÀáÁâÂãÃäÄåÅ"
             "cCçÇ"
             "eEèÈéÉêÊëË"
             "iIìÌíÍîÎïÏ"
             "nNñÑ"
             "oOòÒóÓôÔõÕöÖøØ"
             "uUùÙúÚûÛüÜ"
             "yYýÝÿ"))
     (table (standard-case-table))
     canon)
     (setq canon (copy-sequence table))
     (mapcar (lambda (s)
           (mapcar (lambda (c) (aset canon c (aref s 0))) s))
         eqv-list)
     (set-char-table-extra-slot table 1 canon)
     (set-char-table-extra-slot table 2 nil)
     (set-standard-case-table table))

UPDATE

A dobra de caracteres (capacidade de abstração de acentos e tal, quando pesquisar) estará disponível no Emacs 25. Veja o NEWS ( C-h N ) em uma compilação de desenvolvimento do Emacs 25. Essa é uma adição bem-vinda e promete ser aprimorada em versões futuras.

Minha biblioteca character-fold+.el é um possível aprimoramento disponível agora. Ele permite que você pesquise opcionalmente não apenas os caracteres acentuados (por exemplo, é ) digitando o caractere base (por exemplo, e ), mas também o inverso - digite um conjunto de caracteres equivalentes para procurar eles. E permite personalizar a dobra de caracteres adicionando suas próprias classes de equivalência (e editando aquelas definidas pelo Emacs, além daquelas para diacríticos).

Aqui é uma mensagem para [email protected] sobre isso.

    
por 13.11.2013 / 00:11
1

Não tenho uma solução perfeita, mas uso a pesquisa de regexp incremental: C-S-s ma[nñ]ana ou   C-S-s ma.ana mas isso não é ideal.

    
por 12.11.2013 / 09:28