Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mode line pleine

16 réponses
Avatar
Vincent Lefevre
Bonjour,

Que se passe-t-il quand la mode line devient pleine, i.e. qu'il n'y a
pas assez de colonnes pour afficher toutes les informations?

Y a-t-il un moyen de demander ce qui doit être affiché?

--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

10 réponses

1 2
Avatar
Olivier
Vincent Lefevre a écrit :
Bonjour,

Que se passe-t-il quand la mode line devient pleine, i.e. qu'il n'y a
pas assez de colonnes pour afficher toutes les informations?



Je n'ai pas essayé mais elle doit passer sur deux lignes.

Y a-t-il un moyen de demander ce qui doit être affiché?



Toutes les variables sont accessibles directement.
Par exemple C-h v tab-always-indent
donne la valeur de tab-always-indent (on peut utiliser
TAB pour completer les noms).
A.O.
Avatar
Vincent Lefevre
Dans l'article <47bd2616$0$12981$,
Olivier écrit:

Vincent Lefevre a écrit :
> Que se passe-t-il quand la mode line devient pleine, i.e. qu'il n'y a
> pas assez de colonnes pour afficher toutes les informations?

Je n'ai pas essayé mais elle doit passer sur deux lignes.



Je viens d'essayer. Il tronque la ligne.

> Y a-t-il un moyen de demander ce qui doit être affiché?

Toutes les variables sont accessibles directement.
Par exemple C-h v tab-always-indent
donne la valeur de tab-always-indent (on peut utiliser
TAB pour completer les noms).



Ce n'est pas ce que je demandais. Je voudrais savoir s'il y a un
moyen de dire quelles informations doivent être affichées lorsque
la mode line devient pleine.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
Avatar
Olivier
Vincent Lefevre a écrit :
[...]
Ce n'est pas ce que je demandais. Je voudrais savoir s'il y a un
moyen de dire quelles informations doivent être affichées lorsque
la mode line devient pleine.



Ben, en regardant la définition de mode-line-format, non ??
Oui, ce n'est peut être pas très lisible, mais c'est là.

Amitiés,
Olivier
Avatar
Vincent Lefevre
Dans l'article <47bdb185$0$11184$,
Olivier écrit:

Vincent Lefevre a écrit :
[...]
> Ce n'est pas ce que je demandais. Je voudrais savoir s'il y a un
> moyen de dire quelles informations doivent être affichées lorsque
> la mode line devient pleine.

Ben, en regardant la définition de mode-line-format, non ??



Non, ça ne concerne apparemment que le *début* de la mode line. Il
peut y avoir des infos supplémentaires sur la droite (heure...).
De plus, cette variable est modifiée par d'autres fonctions, e.g.
ajout de (vc-mode vc-mode). Bref, on ne peut rien contrôler avec
cette variable.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
Avatar
Olivier
Vincent Lefevre a écrit :
[...]
Non, ça ne concerne apparemment que le *début* de la mode line. Il
peut y avoir des infos supplémentaires sur la droite (heure...).
De plus, cette variable est modifiée par d'autres fonctions, e.g.
ajout de (vc-mode vc-mode). Bref, on ne peut rien contrôler avec
cette variable.



Bon, cette variable *contrôle* la mode line.
Sa valeur par *défaut* est default-mode-line-format.
(vc-mode vc-mode) est là par défaut en version 22 mais
pas en version 21.

La seconde variable est global-mode-alist qui va contenir
par exemple ce que display-time demande.

La troisième variable est minor-mode-alist. En version 21,
c'est là que se trouve le fait que version control soit là
ou pas. Quand un mode mineur est activé, il s'ajoute à la liste
entre parenthèses : on passe de
(Latex Ref Fill) à (Latex Ref Fill Isearch)
par exemple quand on entre C-s.

Chez moi, minor-mode-alist contient par exemple
(semantic-stickyfunc-mode "")
donc on n'affiche rien quand ce mode est actif.
Puis
(eldoc-mode eldoc-minor-mode-string)
donc on affiche
eldoc-minor-mode-string
quand ce mode est actif.

En l'occurrence l'espace des variables et celui
des fonctions sont séparés en elisp, ce dont profite
certains programmeurs. Bref
(vc-mode vc-mode) ici réfère en premier à la valeur
en tant que fonction dans le premier membre
et à celle en tant que variable dans le second :-p
Ici, le programmeur n'a pas déclaré vc-mode
(no defvar vc-mode anywhere) c'est malheureusement usuel :-p
Et on y met une chaîne de caractères que le mode
envoit. Par exemple on lit dans isearch.el
-----------------------------
(setq isearch-mode " Isearch") ;; forward? regexp?
(force-mode-line-update)
-----------------------------
mais aussi
-----------------------------
(setq isearch-mode nil)
[...]

(force-mode-line-update)
------------------------------
La fonction vc-mode-line de vc-hools.el
fait la même chose en un peu plus compliqué
parce que vc-call est une macro : bref vc-mode
est en fait une forme qui s'évalue en une chaîne.

Ceci dit, c'est une information qui est censée être au centre
(l'heure est censée être juste après le nom du buffer, ensuite
ya la charge et Mail puis entre parenthèses le mode majeur
suivi des mode mineurs en activité directe, puis le numéro de lignes
et peut être celui des colonnes et enfin le pourcentage du buffer
qui est affiché. Et les "---" sont en fait cliquables). Il faut
vraiment des frames très très petites pour qu'on rate cela --
Ou alors le nom du buffer est énormeeeeeeeeeeeeeee.
Ca peut arriver --

Des références :

http://www.cs.cmu.edu/cgi-bin/info2www?(emacs)Mode%20Line
http://www.gnu.org/software/emacs/elisp/html_node/Mode-Line-Format.html

Voilà ce que je peux en dire.
Que veux tu donc faire ?
Amitiés,
Olivier
Avatar
Vincent Lefevre
Dans l'article <47bfdc16$0$21840$,
Olivier écrit:

Bon, cette variable *contrôle* la mode line.



Mais elle ne fournit pas assez de souplesse.

[...]
La fonction vc-mode-line de vc-hools.el
fait la même chose en un peu plus compliqué
parce que vc-call est une macro : bref vc-mode
est en fait une forme qui s'évalue en une chaîne.

Ceci dit, c'est une information qui est censée être au centre



Oui, c'est bien ça.

(l'heure est censée être juste après le nom du buffer,



Non, ici, elle est après les modes majeur et mineurs.

ensuite ya la charge et Mail



J'ai désactivé l'affichage de la charge et du mail. Là encore,
la configuration laisse à désirer: j'ai dû modifier la fonction
display-time-string-forms pour pouvoir configurer la chaîne
d'aide (help-echo).

puis entre parenthèses le mode majeur suivi des mode mineurs en
activité directe, puis le numéro de lignes et peut être celui des
colonnes et enfin le pourcentage du buffer qui est affiché. Et les
"---" sont en fait cliquables).



Là aussi, j'ai tout ça dans un ordre différent.

Il faut vraiment des frames très très petites pour qu'on rate cela
-- Ou alors le nom du buffer est énormeeeeeeeeeeeeeee. Ca peut
arriver --



Non, même pas, il est très facile d'avoir la ligne pleine en 80 colonnes
(largeur standard d'un terminal). Par exemple:

-11u:---F1 mutt.xml Top (1,0) SVN-21271 (nXML Valid)----18:39:10----

Et encore, il n'y a même pas de mode mineur! Avec un ou deux modes
mineurs, l'heure disparaît.

Que veux tu donc faire ?



Il y a des blancs inutiles; peut-être les supprimer lorsqu'on a besoin
d'espace dans la ligne. Le SVN-21271 pourrait n'être affiché que s'il y
a la place. Éventuellement au tout début, puis être remplacé par l'heure
au bout d'une dizaine de secondes (mais s'il y a la place, garder tout
affiché). Autre suggestion: avoir des infos affichées dans la partie
droite de l'echo area (qui est généralement blanche).

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
Avatar
Erwan David
Vincent Lefevre <vincent+ écrivait :


Non, même pas, il est très facile d'avoir la ligne pleine en 80 colonnes
(largeur standard d'un terminal). Par exemple:

-11u:---F1 mutt.xml Top (1,0) SVN-21271 (nXML Valid)----18:39:10----

Et encore, il n'y a même pas de mode mineur! Avec un ou deux modes
mineurs, l'heure disparaît.



Ou alors quand on split la frame en 2 verticalement...

--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Avatar
Olivier
Vincent Lefevre a écrit :
[...]
Bon, cette variable *contrôle* la mode line.



Mais elle ne fournit pas assez de souplesse.



Oh, lisp non souple, voilà bien une catastrophe !
[...]

J'ai désactivé l'affichage de la charge et du mail. Là encore,
la configuration laisse à désirer: j'ai dû modifier la fonction
display-time-string-forms pour pouvoir configurer la chaîne
d'aide (help-echo).



Ah oui, display-time fait d'un seul coup heure/charge/mail et
c'est clairement une connerie, je suis bien d'accord, surtout
concernant la terminologie.

[...]

Bon, je ne sais pas d'où viens ta mode-line-format, mais elle
me semble un peu exotique. La mienne
----------------------------------------------------------------------
(#("-" 0 1
(help-echo "mouse-1: select window, mouse-2: delete others, mouse-3:
delete ..."))
mode-line-mule-info mode-line-modified mode-line-frame-identification
mode-line-buffer-identification
#(" " 0 3
(help-echo "mouse-1: select window, mouse-2: delete others, mouse-3:
delete ..."))
global-mode-string
#(" %[(" 0 6
(help-echo "mouse-1: select window, mouse-2: delete others, mouse-3:
delete ..."))
(:eval
(mode-line-mode-name))
mode-line-process minor-mode-alist
#("%n" 0 2
(help-echo "mouse-2: widen" local-map
(keymap
(mode-line keymap
(mouse-2 . mode-line-widen)))))
#(")%]--" 0 5
(help-echo "mouse-1: select window, mouse-2: delete others, mouse-3:
delete ..."))
(which-func-mode
("" which-func-format
#("--" 0 2
(help-echo "mouse-1: select window, mouse-2: delete others,
mouse-3: delete ..."))))
(line-number-mode
(#("L%l" 0 3
(help-echo "mouse-1: select window, mouse-2: delete others,
mouse-3: delete ..."))
#("--" 0 2
(help-echo "mouse-1: select window, mouse-2: delete others,
mouse-3: delete ..."))))
(column-number-mode
(#("C%c" 0 3
(help-echo "mouse-1: select window, mouse-2: delete others,
mouse-3: delete ..."))
#("--" 0 2
(help-echo "mouse-1: select window, mouse-2: delete others,
mouse-3: delete ..."))))
(-3 .
#("%p" 0 2
(help-echo "mouse-1: select window, mouse-2: delete others,
mouse-3: delete ...")))
#("-%-" 0 3
(help-echo "mouse-1: select window, mouse-2: delete others, mouse-3:
delete ...")))
-----------------------------------------------------------------
c'est aussi ma default-mode-line-format. Je ne sais d'où sort
la tienne mais elle m'a l'air trop sioux pour être honnête.
Verifie ta default-mode-line-format, il te suffira peut etre
de la reallouer a mode-line-format.
Sinon, je vais reflechir pour avoir une mode-line sur plusieurs lignes --

A plus !
Amities,
Olivier
Avatar
Vincent Lefevre
Dans l'article <47c07bfc$0$13325$,
Olivier écrit:

Bon, je ne sais pas d'où viens ta mode-line-format, mais elle
me semble un peu exotique.



C'est celle standard d'Emacs 22.0.97.1 (c'est la même que j'obtiens
avec "emacs -q -no-site-file") sous Mac OS X et d'Emacs 22.1.1 sous
Debian.

("%e"
#("-" 0 1
(help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
mode-line-mule-info mode-line-modified mode-line-frame-identification mode-line-buffer-identification
#(" " 0 3
(help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
mode-line-position
(vc-mode vc-mode)
#(" " 0 2
(help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
mode-line-modes
(which-func-mode
("" which-func-format
#("--" 0 2
(help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))))
(global-mode-string
(#("--" 0 2
(help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
global-mode-string))
#("-%-" 0 3
(help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0")))

c'est aussi ma default-mode-line-format. Je ne sais d'où sort
la tienne mais elle m'a l'air trop sioux pour être honnête.
Verifie ta default-mode-line-format, il te suffira peut etre
de la reallouer a mode-line-format.



Même valeur que mode-line-format.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)
Avatar
Olivier
Bonjour,

C'est vrai que le display de la mode-line est codé en
dur et que le modifier de façon élégante est un peu long.

Que veux tu donc faire ?



Il y a des blancs inutiles; peut-être les supprimer lorsqu'on a besoin
d'espace dans la ligne. Le SVN-21271 pourrait n'être affiché que s'il y
a la place. Éventuellement au tout début, puis être remplacé par l'heure
au bout d'une dizaine de secondes (mais s'il y a la place, garder tout
affiché).



J'ai préféré opter pour une solution moins automatique (mais beaucoup
plus facile à mettre en oeuvre !!)

Autre suggestion: avoir des infos affichées dans la partie
droite de l'echo area (qui est généralement blanche).



Ca, je ne sais pas le faire proprement, dû au caactère "codé en dur".
Ce que je te propose pour ton .emacs:
---------------------------------------------------------------------------
(defvar vc-mode-adaptative-default-string "$$")
(defvar vc-mode-adaptative-stored-string vc-mode-adaptative-default-string)

(defun vc-mode-adaptative-mode-line nil
(interactive)
(setq vc-mode
(propertize vc-mode-adaptative-stored-string
'help-echo (purecopy "mouse-1: collapse")
'mouse-face 'mode-line-highlight
'local-map
'(keymap
(mode-line keymap
(down-mouse-1 .
vc-mode-adaptative-switch-1)))))
(force-mode-line-update))

(defun vc-mode-adaptative-switch-1 nil
(interactive)
(setq vc-mode
(propertize vc-mode-adaptative-default-string
'help-echo (purecopy "mouse-1: expand")
'mouse-face 'mode-line-highlight
'local-map
'(keymap
(mode-line keymap
(down-mouse-1 .
vc-mode-adaptative-mode-line)))))

(force-mode-line-update))

(defadvice vc-mode-line (after vc-mode-adaptative-advice nil)
""
(setq vc-mode-adaptative-stored-string vc-mode)
(vc-mode-adaptative-mode-line))

(ad-activate 'vc-mode-line)
--------------------------------------------------------------

Tu peux jouer avec si tu as de meilleures idées !
Donc, le numéro de version (qui fout le brun, comme on dit
à ch'nord) deveitn cliquable, mouse-1, et est alors remplacé par

vc-mode-adaptative-default-string

qui devient cliquable (mouse-1) et est remplacé alors par son
numéro de version.

Cela te convient-il ?
Amitiés,
Olivier
1 2