Sous XEmacs, je voudrais gagner un peu de place dans la modeline. J'ai
déjà trouvé comment retirer le « Xemacs: » avec
(setf (cdar modeline-buffer-identification) "%N")
; au lieu de "XEmacs%N:"
Maintenant, je voudrais réduire le nombre d'espaces (et tirets) un peu
partout. Les bouts de code que j'ai trouvés dans les news réécrivent
entièrement la liste modeline-format, et ça ne me plaît pas trop (ce
serait pour y remettre les valeurs par défaut, la plupart du temps).
Mon idée est plutôt de parcourir modeline-format et de retirer ou
modifier ce qui ne me convient pas. Mais mes trop vagues notions de Lisp
ne m'ont pas mené bien loin. Voilà mes essais:
; La chaîne " " est ce que renvoie (elt modeline-format 4).
; Mais ce code semble ne rien faire.
(setq modeline-format
(mapcar (lambda (x) (if (equal x " ") "A" x)) modeline-format))
; Avec une regexp, j'essaie de supprimer tous les espaces
; Pas plus de succès
(setq modeline-format
(mapcar (lambda (x) (cond (string-match "\\s" x)
(replace-match "")))
modeline-format))
; Alors que le code suivant modifie bien la modeline immédiatement
(setq modeline-format (reverse modeline-format))
Imagines ce qui se passe si modeline-format est ("---i--" "--") : on passe deux fois sur "--" ce qui est un peu ridicule et somme toute difficile à lire. Il vaut mieux, au lieu du my-replace-modeline-format interne, un my-modify-string qui ne s'occupe que de la chaine en question.
Est-ce le fait que l'on récurse une dernière fois lorsqu'il n'y a plus de remplacement à faire (« on passe deux fois sur "--" ») ?
Non ! La premiere fois est lors de l'appel interne de my-replace-modeline-format et là, comme on commence plus loin, on ne modifie pas, parce qu'on ne voit pas le premier "-" :-) Bon, on finira par le voir, mais c'est un peu tordu. Bien sur, on peut dire "c'est un point fixe, peu importe comment on y arrive". :-)
Ce que j'imagine, c'est
(defun my-replace-string (x start) (if (string-match "(s s +|--+)" x start) (my-replace-string (replace-match (substring (match-string 0 x) 0 1) t t x) (1+ start)) x))
et
(my-replace-string (replace-match replacement t t x) 1)
a la place de
(my-replace-modeline-format (replace-match replacement t t x) (1+ start))
Voilà, j'ai fini de pinailler :-p Amitiés, Olivier
Imagines ce qui se passe si modeline-format est ("---i--" "--") : on
passe deux fois sur "--" ce qui est un peu ridicule et somme toute
difficile à lire. Il vaut mieux, au lieu du my-replace-modeline-format
interne, un my-modify-string qui ne s'occupe que de la chaine en question.
Est-ce le fait que l'on récurse une dernière fois lorsqu'il n'y a
plus de remplacement à faire (« on passe deux fois sur "--" ») ?
Non ! La premiere fois est lors de l'appel interne de my-replace-modeline-format
et là, comme on commence plus loin, on ne modifie pas, parce qu'on ne voit
pas le premier "-" :-) Bon, on finira par le voir, mais c'est un peu tordu.
Bien sur, on peut dire "c'est un point fixe, peu importe comment on
y arrive". :-)
Ce que j'imagine, c'est
(defun my-replace-string (x start)
(if (string-match "\(\s \s +\|--+\)" x start)
(my-replace-string
(replace-match (substring (match-string 0 x) 0 1) t t x)
(1+ start))
x))
et
(my-replace-string (replace-match replacement t t x) 1)
a la place de
(my-replace-modeline-format (replace-match replacement t t x) (1+ start))
Voilà, j'ai fini de pinailler :-p
Amitiés,
Olivier
Imagines ce qui se passe si modeline-format est ("---i--" "--") : on passe deux fois sur "--" ce qui est un peu ridicule et somme toute difficile à lire. Il vaut mieux, au lieu du my-replace-modeline-format interne, un my-modify-string qui ne s'occupe que de la chaine en question.
Est-ce le fait que l'on récurse une dernière fois lorsqu'il n'y a plus de remplacement à faire (« on passe deux fois sur "--" ») ?
Non ! La premiere fois est lors de l'appel interne de my-replace-modeline-format et là, comme on commence plus loin, on ne modifie pas, parce qu'on ne voit pas le premier "-" :-) Bon, on finira par le voir, mais c'est un peu tordu. Bien sur, on peut dire "c'est un point fixe, peu importe comment on y arrive". :-)
Ce que j'imagine, c'est
(defun my-replace-string (x start) (if (string-match "(s s +|--+)" x start) (my-replace-string (replace-match (substring (match-string 0 x) 0 1) t t x) (1+ start)) x))
et
(my-replace-string (replace-match replacement t t x) 1)
a la place de
(my-replace-modeline-format (replace-match replacement t t x) (1+ start))
Voilà, j'ai fini de pinailler :-p Amitiés, Olivier
drkm
drkm writes:
Olve writes:
Tu pinailles, là ;-) Mais cela m'a fait découvrir une petite erreur. Il faut remplacer :
(1+ start))))
par :
(1+ (match-beginning 0)))))
Non ! Tu enleves la chaine !!! C'est bien (1+ start).
Oops. En effet. Voilà ce que c'est que de se corriger à la va-vite $-). Merci.
Bon. Je reviens une dernière fois sur la correction de changement de modification ;-) C'est bien
(1+ (match-beginning 0))
qu'il faut utiliser. Prenons le cas de "A--B--". Lors du premier appel, `START' vaut 0. (match-beginning 0) vaut 1. Le second appel reçoit "A-B--" comme `X'. On veut bien 2 comme `START'. On sait qu'il n'y a plus rien d'intéressant avant (match-beginning 0), y compris.
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
drkm <usenet.fcaemacs@fgeorges.org> writes:
Olve <Olve@there.wd> writes:
Tu pinailles, là ;-) Mais cela m'a fait découvrir une petite erreur.
Il faut remplacer :
(1+ start))))
par :
(1+ (match-beginning 0)))))
Non ! Tu enleves la chaine !!! C'est bien (1+ start).
Oops. En effet. Voilà ce que c'est que de se corriger à la va-vite
$-). Merci.
Bon. Je reviens une dernière fois sur la correction de changement
de modification ;-) C'est bien
(1+ (match-beginning 0))
qu'il faut utiliser. Prenons le cas de "A--B--". Lors du premier
appel, `START' vaut 0. (match-beginning 0) vaut 1. Le second appel
reçoit "A-B--" comme `X'. On veut bien 2 comme `START'. On sait
qu'il n'y a plus rien d'intéressant avant (match-beginning 0), y
compris.
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
Tu pinailles, là ;-) Mais cela m'a fait découvrir une petite erreur. Il faut remplacer :
(1+ start))))
par :
(1+ (match-beginning 0)))))
Non ! Tu enleves la chaine !!! C'est bien (1+ start).
Oops. En effet. Voilà ce que c'est que de se corriger à la va-vite $-). Merci.
Bon. Je reviens une dernière fois sur la correction de changement de modification ;-) C'est bien
(1+ (match-beginning 0))
qu'il faut utiliser. Prenons le cas de "A--B--". Lors du premier appel, `START' vaut 0. (match-beginning 0) vaut 1. Le second appel reçoit "A-B--" comme `X'. On veut bien 2 comme `START'. On sait qu'il n'y a plus rien d'intéressant avant (match-beginning 0), y compris.
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
drkm
Olve writes:
Non ! La premiere fois est lors de l'appel interne de my-replace-modeline-format et là, comme on commence plus loin, on ne modifie pas, parce qu'on ne voit pas le premier "-" :-) Bon, on finira par le voir, mais c'est un peu tordu. Bien sur, on peut dire "c'est un point fixe, peu importe comment on y arrive". :-)
Ce que j'imagine, c'est
[...]
Nous avons vraiment un problème de compréhension, aujourd'hui. Enfin, j'ai un problème de compréhension ;-) La seule différence que je vois entre ce que tu imagines et le code initial, c'est l'abscence du test `stringp()' et du caractère `&optional' de `START'.
Je suis sûr qu'il y a quelque chose que je ne vois pas, mais quoi ?
D'après ton paragraphe cité ci-dessus, j'ai l'impression que l'on ne voit pas le même chemin d'exécution. Ce que je vois, avec le code initial (et également avec le code que tu proposes), avec la chaîne "--", est ceci :
· 1er appel : `X' vaut "--", `START' vaut nil, et sera donc remplacé par 0 ; une correpsondance est trouvée, et un remplacement est effectué et passé à un appel récursif ;
· appel récursif : `X' vaut "-", `START' vaut 1 ; aucune correspondance n'est trouvée, on retourne donc "-", qui est lui-même retourné du premier appel.
Mais est-ce bien là que nous divergeons ? Je n'en suis même pas sûr ... J'aimerais vraiment comprendre ce que tu dis.
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
Olve <Olve@there.wd> writes:
Non ! La premiere fois est lors de l'appel interne de my-replace-modeline-format
et là, comme on commence plus loin, on ne modifie pas, parce qu'on ne voit
pas le premier "-" :-) Bon, on finira par le voir, mais c'est un peu tordu.
Bien sur, on peut dire "c'est un point fixe, peu importe comment on
y arrive". :-)
Ce que j'imagine, c'est
[...]
Nous avons vraiment un problème de compréhension, aujourd'hui.
Enfin, j'ai un problème de compréhension ;-) La seule différence que
je vois entre ce que tu imagines et le code initial, c'est l'abscence
du test `stringp()' et du caractère `&optional' de `START'.
Je suis sûr qu'il y a quelque chose que je ne vois pas, mais quoi ?
D'après ton paragraphe cité ci-dessus, j'ai l'impression que l'on ne
voit pas le même chemin d'exécution. Ce que je vois, avec le code
initial (et également avec le code que tu proposes), avec la chaîne
"--", est ceci :
· 1er appel : `X' vaut "--", `START' vaut nil, et sera donc
remplacé par 0 ; une correpsondance est trouvée, et un
remplacement est effectué et passé à un appel récursif ;
· appel récursif : `X' vaut "-", `START' vaut 1 ; aucune
correspondance n'est trouvée, on retourne donc "-", qui est
lui-même retourné du premier appel.
Mais est-ce bien là que nous divergeons ? Je n'en suis même pas
sûr ... J'aimerais vraiment comprendre ce que tu dis.
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html
Non ! La premiere fois est lors de l'appel interne de my-replace-modeline-format et là, comme on commence plus loin, on ne modifie pas, parce qu'on ne voit pas le premier "-" :-) Bon, on finira par le voir, mais c'est un peu tordu. Bien sur, on peut dire "c'est un point fixe, peu importe comment on y arrive". :-)
Ce que j'imagine, c'est
[...]
Nous avons vraiment un problème de compréhension, aujourd'hui. Enfin, j'ai un problème de compréhension ;-) La seule différence que je vois entre ce que tu imagines et le code initial, c'est l'abscence du test `stringp()' et du caractère `&optional' de `START'.
Je suis sûr qu'il y a quelque chose que je ne vois pas, mais quoi ?
D'après ton paragraphe cité ci-dessus, j'ai l'impression que l'on ne voit pas le même chemin d'exécution. Ce que je vois, avec le code initial (et également avec le code que tu proposes), avec la chaîne "--", est ceci :
· 1er appel : `X' vaut "--", `START' vaut nil, et sera donc remplacé par 0 ; une correpsondance est trouvée, et un remplacement est effectué et passé à un appel récursif ;
· appel récursif : `X' vaut "-", `START' vaut 1 ; aucune correspondance n'est trouvée, on retourne donc "-", qui est lui-même retourné du premier appel.
Mais est-ce bien là que nous divergeons ? Je n'en suis même pas sûr ... J'aimerais vraiment comprendre ce que tu dis.
--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html