Comment mettre à jour la propriété face pour que get-text-property fonctionne correctement?
Le
jack-mac

Bonjour vénérables emacsiens.
Comment faire pour que la propriété "face" soit mise à jour, soit pou=
r
tout le fichier, soit autour du "point"?
J'ai écrit une fonction emacs-lisp qui effectue une recherche sur du
texte et sur la propriété 'face'.
Cette fonction marche parfaitement lorsque le buffer a été entièremen=
t
affiché (via un scroll, par exemple).
Mais, lorsque je viens juste d'ouvrir un fichier, j'ai constaté que la
propriété "face" du texte qui n'a pas encore été affiché reste =
à nil
tant qu'il n'a pas été affiché.
(get-text-property (point) 'face) => nil
J'ai essayé (font-lock-fontify-buffer) mais ça ne provoque pas la mise
à jour que je souhaite.
Dans le temps, il y avait un lazy-lock, mais il n'existe pas dans mon
emacs.
Comment faire pour que la propriété "face" soit mise à jour, soit pou=
r
tout le fichier, soit autour du "point"?
Merci d'avance pour votre aide.
Rq:
Pour éviter tout problème de .emacs, j'ai lancé: "emacs -Q" et éval=
ué
seulement ma fonction.
GNU Emacs 23.1.1 (i686-pc-linux-gnu, GTK+ Version 2.22.0) of
2011-03-04 on roseapple, modified by Debian
Comment faire pour que la propriété "face" soit mise à jour, soit pou=
r
tout le fichier, soit autour du "point"?
J'ai écrit une fonction emacs-lisp qui effectue une recherche sur du
texte et sur la propriété 'face'.
Cette fonction marche parfaitement lorsque le buffer a été entièremen=
t
affiché (via un scroll, par exemple).
Mais, lorsque je viens juste d'ouvrir un fichier, j'ai constaté que la
propriété "face" du texte qui n'a pas encore été affiché reste =
à nil
tant qu'il n'a pas été affiché.
(get-text-property (point) 'face) => nil
J'ai essayé (font-lock-fontify-buffer) mais ça ne provoque pas la mise
à jour que je souhaite.
Dans le temps, il y avait un lazy-lock, mais il n'existe pas dans mon
emacs.
Comment faire pour que la propriété "face" soit mise à jour, soit pou=
r
tout le fichier, soit autour du "point"?
Merci d'avance pour votre aide.
Rq:
Pour éviter tout problème de .emacs, j'ai lancé: "emacs -Q" et éval=
ué
seulement ma fonction.
GNU Emacs 23.1.1 (i686-pc-linux-gnu, GTK+ Version 2.22.0) of
2011-03-04 on roseapple, modified by Debian
[...]
As-tu essayé font-lock-fontify-block
Sinon essaie peut-être juste avant de faire le get-text-property un truc
de ce genre
(let ((inhibit-read-only))
(delete-region (point) (progn (insert 32) (point))))
histoire de provoquer un rafraichissement du texte à cet endroit.
Vincent.
wrote:
Bonjour,
merci d'avoir répondu!
Pour rafraichir le texte autour du point, on peut utiliser (sit-for
0), mais c'est très lourd.
En fait, j'ai eu la réponse sur gnu.emacs.help :
Pour forcer la fontification, il faut utiliser jit-lock-fontify-now
Mais, en plus, ce n'est pas la bonne méthode:
Pour vérifier si le point est dans un commentaire ou une chaine, etc.,
il vaut mieux utiliser syntaxe-ppss
)jack(
[...]
Merci de l'info... Après avoir cherché cette fonction, c'est:
syntax-ppss
J'avoue que c'est un aspect d'EMACS que je connais très mal...
Vincent.
Moi, encore plus!
En deux mots, ça consiste en quoi une "propriété face"?
Lorsque Emacs affiche une partie du texte en couleurs (coloration syntaxiqu e, par exemple), il se passe quelque chose en interne!
Xemacs utilise un mécanisme d'overlays (que je décrirai pas).
Gnu FSF Emacs utilise un mécanisme de propriétés. Dans GNU FSF Emacs , si tu places le curseur à l'intérieur d'un mot en couleur et que tu t apes M-: (get-text-property (point) 'face) RET, emacs affichera la propri été 'face' du point courant.
Ok, merci pour ta réponse. J'ai essayé la manip, et effectivement , ça
m'affiche un message. Je n'arrive pas à l'interpréter correctemen t pour
l'instant, mais je garde l'info dans un recoin de mon cerveau... car il
se pourrait bien qu'elle me soit utile dans quelques temps.