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

TAB

6 réponses
Avatar
Lucas Levrel
Bonjour,

Dans un emacs 23.4 récemment installé sur Slitaz, la touche Tab ne se
comporte pas comme dans une version antérieure sur une autre machine
(Opensuse 11.2) : dans un buffer, elle insère simplement une tabulation,
et je voudrais qu'elle fasse indent-for-tab-command (dans le minibuffer
elle fait bien minibuffer-complete).

Évidemment, si je fais (global-set-key (kbd "<tab>")
'indent-for-tab-command), ça change aussi le comportement dans le
minibuffer...

Est-ce que la différence entre mes deux installations est due à un
changement entre versions d'emacs, ou à une personnalisation par une des
deux distribs ? Dans le second cas, où peuvent se trouver les fichiers de
config pertinents, et comment obtenir le comportement que je souhaite ?

Merci.

--
LL

6 réponses

Avatar
Damien Wyart
* Lucas Levrel in fr.comp.applications.emacs:
Dans un emacs 23.4 récemment installé sur Slitaz, la touche Tab ne se
comporte pas comme dans une version antérieure sur une autre machine
(Opensuse 11.2) : dans un buffer, elle insère simplement une
tabulation, et je voudrais qu'elle fasse indent-for-tab-command (dans
le minibuffer elle fait bien minibuffer-complete).



Que donne C-h k <TAB> ? Et C-h v tab-always-indent ?

Peux-tu aussi tester avec emacs -q et emacs --no-site-file (ainsi que
les deux simultanément) pour voir si le comportement change ?

--
DW
Avatar
Lucas Levrel
Le 22 avril 2013, Damien Wyart a écrit :

* Lucas Levrel in fr.comp.applications.emacs:
Dans un emacs 23.4 récemment installé sur Slitaz, la touche Tab ne se
comporte pas comme dans une version antérieure sur une autre machine
(Opensuse 11.2) : dans un buffer, elle insère simplement une
tabulation, et je voudrais qu'elle fasse indent-for-tab-command (dans
le minibuffer elle fait bien minibuffer-complete).



Que donne C-h k <TAB> ?



self-insert-command pour le comportement indésirable.

Et C-h v tab-always-indent ?



t (avec ou sans les options ci-dessous)

Peux-tu aussi tester avec emacs -q et emacs --no-site-file (ainsi que
les deux simultanément) pour voir si le comportement change ?



Avec -q ça marche : indent-for-tab-command !
--no-site-file ne change rien.

Du coup j'ai cherché ce que fait -q, puis le fichier default.el, et
bingo :
(global-set-key (kbd "TAB") 'self-insert-command)

Mais du coup, comment se fait-il que tab fasse bien la complétion dans le
minibuffer ?

Enfin, après examen de son contenu, il semble que je puisse me passer de
ce default.el . Est-ce possible tout en chargeant quand même .emacs ?
Sinon, comment redéfinir tab ?

--
LL
Avatar
Damien Wyart
* Lucas Levrel in fr.comp.applications.emacs:
[...]
Du coup j'ai cherché ce que fait -q, puis le fichier default.el, et
bingo :
(global-set-key (kbd "TAB") 'self-insert-command)



J'ai jeté un coup d'oeil au packaging Emacs dans SliTaz
(http://hg.slitaz.org/wok/file/cb84de8a6840/emacs) et je trouve que ce
default.el est un peu intrusif (même si bien sûr on peut le surcharger
dans le .emacs)...

Mais du coup, comment se fait-il que tab fasse bien la complétion dans
le minibuffer ?



global-set-key modifie la "global key map", mais les modes peuvent avoir
leur propre "local key map" ; c'est le cas pour la saisie dans le
minibuffer (qui n'est pas un mode au sens strict, mais c'est similaire).

Enfin, après examen de son contenu, il semble que je puisse me passer
de ce default.el . Est-ce possible tout en chargeant quand même
.emacs ? Sinon, comment redéfinir tab ?



En effet, je ne vois rien d'indispensable (sauf les particularités pour
busybox, mais ne me dis pas que c'est ton shell par défaut...) dans
default.el (http://hg.slitaz.org/wok/file/cb84de8a6840/emacs/stuff/default.el),
je te conseille tout simplement de ne pas l'utiliser. Cela n'aura pas
d'influence sur .emacs, ça n'est pas lui qui se charge de sa prise en
compte.

Sinon (en gardant default.el), tu devrais pouvoir remettre dans ton
.emacs ceci (je pense qu'il doit être chargé après default.el) :

(define-key global-map "t" 'indent-for-tab-command)

(issu de lisp/indent.el), ce qui est équivalent à

(global-set-key "t" 'indent-for-tab-command)

et cela ne changera rien pour le minibuffer, qui a sa propre local map.

--
DW
Avatar
Lucas Levrel
Le 22 avril 2013, Damien Wyart a écrit :

En effet, je ne vois rien d'indispensable (sauf les particularités pour
busybox, mais ne me dis pas que c'est ton shell par défaut...)



C'est le shell par défaut de Slitaz (qui est extrêmement petite, sans
doute en grande partie grâce à busybox), mais j'ai installé le vrai bash
(et tous les paquets d'outils GNU).

dans default.el
(http://hg.slitaz.org/wok/file/cb84de8a6840/emacs/stuff/default.el), je
te conseille tout simplement de ne pas l'utiliser.



Peut-on le faire autrement qu'en effaçant le fichier ?

Cela n'aura pas d'influence sur .emacs, ça n'est pas lui qui se charge
de sa prise en compte.



Mais -q désactive les deux.

Sinon (en gardant default.el), tu devrais pouvoir remettre dans ton
.emacs ceci (je pense qu'il doit être chargé après default.el) :

(define-key global-map "t" 'indent-for-tab-command)

(issu de lisp/indent.el),



Merci, j'essaierai pour voir.

ce qui est équivalent à

(global-set-key "t" 'indent-for-tab-command)

et cela ne changera rien pour le minibuffer, qui a sa propre local map.



Quand j'avais fait (global-set-key (kbd "<tab>") 'indent-for-tab-command)
ça avait affecté le minibuffer. Est-ce que le fait de ne pas utiliser
(kbd) change quelque chose ?


--
LL
Avatar
Damien Wyart
> En effet, je ne vois rien d'indispensable (sauf les particularités
> pour busybox, mais ne me dis pas que c'est ton shell par défaut...)



* Lucas Levrel in fr.comp.applications.emacs:
C'est le shell par défaut de Slitaz (qui est extrêmement petite, sans
doute en grande partie grâce à busybox), mais j'ai installé le vrai
bash (et tous les paquets d'outils GNU).



Oui, c'est ce que j'avais compris (pour busybox par défaut) et supposé
(pour bash comme shell au quotidien).

> dans default.el
> (http://hg.slitaz.org/wok/file/cb84de8a6840/emacs/stuff/default.el),
> je te conseille tout simplement de ne pas l'utiliser.

Peut-on le faire autrement qu'en effaçant le fichier ?



La façon la plus "propre" est sans doute :

(setq inhibit-default-init t)

dans .emacs (pas suggéré dans mon précédent message car je n'avais plus
en tête tous les détails des fichiers d'init, donnés ici :
http://www.gnu.org/software/emacs/manual/html_node/emacs/Init-File.html).

> Cela n'aura pas d'influence sur .emacs, ça n'est pas lui qui se
> charge de sa prise en compte.

Mais -q désactive les deux.



Oui, comme indiqué dans la documentation citée juste au-dessus.

> Sinon (en gardant default.el), tu devrais pouvoir remettre dans ton
> .emacs ceci (je pense qu'il doit être chargé après default.el) :

> (define-key global-map "t" 'indent-for-tab-command)

> (issu de lisp/indent.el),

Merci, j'essaierai pour voir.



Maintenant que j'ai relu la doc, je pense que cela ne fonctionnera pas,
puisque .emacs est lu avant defaut.el.

Quand j'avais fait (global-set-key (kbd "<tab>")
indent-for-tab-command) ça avait affecté le minibuffer. Est-ce que le
fait de ne pas utiliser (kbd) change quelque chose ?



Non, c'est peut-être une histoire d'ordre de chargement mais j'avoue que
sur ce point là, je ne comprends pas pourquoi car le minibuffer a sa
propre local map qui normalement n'est pas affectée par global-set-key.

--
DW
Avatar
Lucas Levrel
Le 23 avril 2013, Damien Wyart a écrit :

dans default.el
(http://hg.slitaz.org/wok/file/cb84de8a6840/emacs/stuff/default.el),
je te conseille tout simplement de ne pas l'utiliser.





Peut-on le faire autrement qu'en effaçant le fichier ?



La façon la plus "propre" est sans doute :

(setq inhibit-default-init t)

dans .emacs



Impeccable, merci !

(pas suggéré dans mon précédent message car je n'avais plus
en tête tous les détails des fichiers d'init,



Rhôô... impardonnable !


--
LL