A sintaxe da palavra leva em consideração o script?

9

Eu chamo count-words-region( M-x =) na cadeia US / RU / IPA:

HelloПривheləʊ

A seguinte mensagem é impressa:

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

Todos os símbolos têm wsintaxe, mas diferem no 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

Isso significa que o limite da palavra é definido não apenas pela sintaxe char, mas também pelo script char ?

Gostaria de desativar esse comportamento nos modos selecionados para poder navegar pelas palavras, mas não pelos scripts. Como isso pode ser alcançado?

ATUALIZAÇÃO Discussões adicionais úteis sobre debbugs .

gavenkoa
fonte

Respostas:

7

Esse comportamento específico de forward-wordpode ser controlado pelas variáveis word-combining-categoriese word-separating-categories. Se você deseja ignorar completamente o script, é suficiente adicionar o par (nil. Nil) à primeira lista, por exemplo,

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

Você também pode alterar essa variável com setq-localse desejar o efeito em um buffer específico.

YoungFrog
fonte
Como você descobriu essas variáveis? Eu não vejo nenhuma menção deles no manual elisp ...
JeanPierre
@JeanPierre eu olhei para a fonte (e 100% concordam que deve ser documentado!)
YoungFrog
3
Por favor, M-x report-emacs-bugpara ter a documentação atualizada.
phils
2

De fato, forward-worde backward-wordtambém mostram que há várias palavras aqui. Faz sentido para mim que caracteres de scripts diferentes não possam estar na mesma palavra, mas a documentação deve ser explicitada sobre isso ( aqui ). Eu sugiro M-x report-emacs-bugsobre isso.

Se você deseja mover entre "palavras" ignorando o script, use skip-syntax-forwarde skip-syntax-backward(descrito aqui )

Jean Pierre
fonte