La syntaxe des mots prend-elle en compte le script?


9

J'appelle count-words-region( M-x =) sur la chaîne US / RU / IPA:

HelloПривheləʊ

Le message suivant est imprimé:

Region has 1 line, 4 words, and 14 characters.

Tous les symboles ont une wsyntaxe, mais diffèrent dans le script:

(char-syntax ?H) ; ?w
(char-syntax ?П) ; ?w
(char-syntax ?ʊ) ; ?w
(aref char-script-table ?H)  ; script: latin
(aref char-script-table ?П)  ; script: cyrillic
(aref char-script-table ?ʊ)  ; script: phonetic

Est-ce à dire que la limite des mots est définie non seulement par la syntaxe des caractères mais aussi par le script des caractères ?

Je voudrais désactiver ce comportement pour les modes sélectionnés afin de pouvoir naviguer entre les mots mais pas entre les scripts. Comment cela peut il etre accompli?

UPDATE Discussion supplémentaire utile sur les debbugs .

Réponses:


7

Ce comportement spécifique de forward-wordpeut être contrôlé par les variables word-combining-categorieset word-separating-categories. Si vous voulez ignorer complètement le script, il suffit d'ajouter la paire (nil. Nil) à la première liste, par exemple

(let ((word-combining-categories (cons '(nil . nil)
                                       word-combining-categories)))
  (forward-word))

Vous pouvez également modifier cette variable avec setq-localsi vous souhaitez que l'effet dans un tampon spécifique.


Comment avez-vous trouvé ces variables? Je n'en vois aucune mention dans le manuel elisp ...
JeanPierre

@JeanPierre J'ai regardé la source (et 100% sont d'accord pour que cela soit documenté!)
YoungFrog

3
Veuillez mettre M-x report-emacs-bugà jour la documentation.
phils

2

En effet, forward-wordet backward-wordaussi montrer qu'il y a plusieurs mots ici. Il est logique pour moi que les caractères de différents scripts ne puissent pas être dans le même mot, mais la documentation devrait être explicite à ce sujet ( ici ). Je suggère M-x report-emacs-bugà ce sujet.

Si vous voulez simplement vous déplacer entre les "mots" en ignorant le script, vous pouvez utiliser skip-syntax-forwardet skip-syntax-backward(décrit ici )

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.