Finalización difusa al insertar caracteres Unicode

12

Acabo de descubrir C-x 8 RETcomo una forma de insertar caracteres Unicode por nombre Unicode o código hexadecimal. No he memorizado (¿todavía?) Todos los nombres de caracteres Unicode, por lo que no siempre encuentro el carácter correcto.

Existe, por ejemplo, el carácter "MONTAÑA CUBIERTA DE NIEVE". Si escribo simplemente "MONTAÑA", este carácter no aparecerá en la lista de finalización. Necesito recordar buscar "SNOW" para ver este personaje en particular en la lista de finalizaciones.

Como alguien que se ha vuelto dependiente de IDO para cualquier cosa que implique la finalización, esta falta de flexibilidad es bastante inquietante. Yo uso ido-ubiquitous-mode.

¿Cómo puedo usar la coincidencia IDO-like para la entrada Unicode? ¿Cómo puedo usar la terminación flexible para TODAS LAS COSAS ?

(Estaría de acuerdo con abandonar el modo IDO si hubiera algo mejor).

rekado
fuente
Como solución para ese mismo problema, escribiría C-q SPC mountain TAB. Eso coincidiría con cualquier nombre de personaje con "montaña" como no primera palabra.
legoscia
1
Echa un vistazo a emacs.stackexchange.com/a/3139/2094 para completarlo desde el timón.
abo-abo el
1
Hmm, esto suena como un error que puedes reportar en el rastreador de problemas del proyecto .
wasamasa
1
Si escribe *cap*mou TAB, obtendrá la (s) finalización (es) completa (s).
Juancho
@Juancho es cierto, pero no es el comportamiento que quiero
rekado

Respuestas:

8

Como sugirió @wasamasa, ido-ubiquitousdebe encargarse de completar cuando insert-charse usa. Hay un informe de error que se cerró en 2013 , pero todavía veo este comportamiento con Emacs 24.4 y la ido-ubiquitousversión 20140904.1547, así que presenté otro informe de error .

EDITAR:

El mantenedor de ido-ubiquitousescribió esto:

Ok, descubrí el problema. Hay muchos caracteres Unicode, por lo que la lista de finalizaciones está excediendo ido-ubiquitous-max-itemsy se ido-ubiquitousestá inhabilitando por esa razón. En mi sistema, hay casi 40k terminaciones disponibles, y el valor predeterminado para ido-ubiquitous-max-items30k. Establecerlo en 50k me permite idocompletarlo insert-char. Intenta personalizar eso.

De hecho, lo (setq ido-ubiquitous-max-items 50000)arregla.

rekado
fuente
Para ido-completing-read+, utilice (setq ido-cr+-max-items 50000)para corregir este error.
Bach Lien
5

Para ser snow capped mountainincluido cuando solo escribe mount, puede hacer lo siguiente:

(push '(unicode-name (styles substring)) completion-category-overrides)

En realidad, tal vez este substringestilo debería estar habilitado de manera predeterminada para los nombres Unicode, como lo es para los nombres de búfer. Tal vez deberías presionarlo a través de M-x report-emacs-bug.

Stefan
fuente
3

Si usa Icicles, entonces le C-x 8 RETpermite usar subcadenas o expresiones regulares o coincidencias difusas durante la finalización. Y puede usar la finalización progresiva , para hacer coincidir patrones múltiples (por ejemplo, simples).

Además, si la opción icicle-read-char-by-name-multi-completion-flages no nil, que es la opción predeterminada, puede usar la finalización múltiple para hacer coincidir cualquier combinación de estas:

  • el nombre Unicode
  • el punto de código Unicode , como un número hexadecimal
  • el carácter en sí (como aparece en el texto, no un entero)

Los candidatos de finalización que ve en el búfer *Completions*contienen todos estos componentes: WYSIWYG.

¿Por qué querrías enfrentarte al personaje en sí? Para ver los puntos de código Unicode correspondientes y los nombres de caracteres, incluidos los nombres antiguos. Por ejemplo, para el personaje ` (acento grave) obtienes estos dos candidatos de finalización:

GRAVE ACCENT      60      `
SPACING GRAVE     60      `
Dibujó
fuente
Creo que realmente debería probar Icicles algún día. Gracias por tu respuesta.
Rekado
0

Puede usar el comando apropos-charen la biblioteca apu.elpara mostrar todos los caracteres Unicode cuyos nombres coinciden con una expresión regular o una lista de palabras que escribe. Por defecto, las palabras coinciden como subcadenas.

En la lista de coincidencias, puede presionar ^para insertar el carácter que se muestra en la línea actual en el búfer donde invocó apropos-char, en el punto. O puede presionar C-ypara copiar ese personaje en el anillo de matar (o M-ycopiarlo en la selección secundaria ). (Presione RETpara ver más información sobre el personaje).

Dibujó
fuente