Discussion:Dot Emacs

De Ensiwiki
Aller à : navigation, rechercher

Il y a deux ou trois (bon OK, la deuxième est en plusieurs parties mais c'est fondamentalement la même idée) choses qui me dérangent dans le .emacs proposé :

  • La première est qu'il mélange des variables affectées de manière douteuse par custom-set-variables et des setq. Au-delà du fait qu'il n'y ait pas réellement de raison à cela, c'est confus pour les novices, le public principal de cette page, je suppose.
  • La seconde est que les bindings proposés vont à l'encontre des bindings standards et donnent ainsi des habitudes biaisées aux débutants :
    • M-q est déjà utilisé et réservé par Emacs pour refill les paragraphes, ce qui est fort utile, et backward-kill-word est par défaut sur M-DEL (M-Backspace), il faudrait au moins le préciser ;
    • scroll-{up,down} sont sur C-v et M-v par défaut, de même je ne vois pas l'intérêt d'enseigner des raccourcis non standards qui ont leur équivalent facilement accessible aux débutants ;
    • M-g est un préfixe pour plusieurs commandes utiles : navigation à une ligne donnée ou navigations d'une erreur de compilation à une autre, M-g n étant bien plus accessible que C-x ` sur un azerty français ;
    • pour comment-region et uncomment-region, ils ne sont que rarement nécessaires, en pratique (quand on a des commentaires imbriqués, ce qui est interdit en C de toute façon, donc c'est pour les moches), on peut utiliser en général la double marque (transient mark) et M-; à la place ;
    • kill-whole-line est sur C-S-Backspace, même si j'avoue, c'est pas terrible comme raccourci... mais c'est pas très utile non plus.
  • Lancer une commande shell pour faire un basename, argh, mon dieu : file-name-nondirectory, à la rescousse !

Et une ptite remarque pour finir :

  • Faire indenter à chaque RET est contre les guidelines Emacs (oui oui, je sais le mode Ada fait ça mais c'est scandaleux). Utilisez plutôt C-j pour retourner à la ligne et indenter à la fois.

--Len 16 septembre 2008 à 16:15 (UTC)


Salut,

C'est moi qui ai mis le .emacs. Essentiellement, j'ai sélectionné dans le mien tout ce qui me paraissait pouvoir être utile pour à peu près tout le monde. L'idée, c'était de mettre ce que j'aurais aimé avoir quand j'ai commencé emacs l'année dernière : des modes comme ido, un peu de lisp pour voir à quoi ca ressemble, et pas mal de petits trucs utiles (du genre le tab, la compilation ...). Je ne prétends pas être un spécialiste d'emacs, loin de là.

  • Pour les setq, il y a en fait une raison pour le '(inhibit-startup-echo-area-message (user-login-name)) (c'est la seule façon d'inhiber ce message, cf doc), mais lui seul. Le reste, en effet.
  • Pour les bindings, c'est de toute facon une question de préférences personelles, et je n'aurais probablement pas dû les mettre. Tentatives de mauvaise foi de justifications :-) :
    • Pour M-q, en effet. Personellement, j'utilise très rarement fill (que j'ai bindé à M-s) et très souvent backward-kill-word, je l'ai donc mis là.
    • Pour les commandes de scroll, il me semble logique de continuer le principe control/meta déjà utilisé sur d, a, e, f et b à n et p. M-n et M-p ne sont bindés à rien par défaut, et je ne connais pas de mode qui les redéfinissent (ce qui serait contre les guidelines emacs pour le coup, je pense).
    • Concernant M-g, en effet. J'ai remappé juste après next-error et previous-error sur C-c {n,p}, mais là c'est Mal, vu que ca peut être redéfini par des modes.
    • Pour les commentaires, effectivement ! Je ne me suis jamais penché sur comment-dwim
    • C-S-backspace est en effet pas super facile, et il a la désagréable idée de pouvoir se confondre avec C-M-backspace, qui sur pas mal de distributions linux relance X. J'aime bien mon C-S-k, je l'utilise assez souvent (avant pour dupliquer des lignes, maintenant j'ai un autre raccourci pour ca), et apparemment pas mal de gens (bien que ce soit biaisé par mon expérience personelle :)) remappent carrément C-k sur kill-whole-line, donc je suis pas le seul à trouver ca utile
  • Pour le basename, merci ! J'ai cherché quelques minutes, avant de me rabattre sur un hack dégueulasse mais simple.
  • Je crois pas que ce soit entièrement contre les guidelines : si je ne me trompe pas, c'est le comportement "electric", que pas mal de modes mettent en option

A la réflexion, mettre un bout de .emacs est probablement une mauvaise idée. Les keybindings, les modes à utiliser, ca fait pas vraiment grand sens de mettre tout ca en vrac dans un .emacs prêt à l'emploi. Peut être serait-il préférable de faire une mini-doc sur les concepts de base (variables, fonctions, comment binder un raccourci à une fonction ...), avec une partie listant des settings/modes utiles pour les élèves de l'ensimag (comment inhibiter tous les messages du début, le serveur/emacsclient, le style C et le mode de compilation pour le projet C, les modes ido et electric-buffer pour le changement de buffer, ce genre de choses). Qu'en pensez vous ?

--Levitta 17 septembre 2008 à 16:05 (UTC)

J'ai reformulé un peu l'intro, pour éviter que les gens ne le considèrent comme du « prêt à porter », mais ça serait bien de faire un petit cleanup quand même.

Moy 17 septembre 2008 à 16:49 (UTC)

<chipotage>Pour l'histoire du RET, je pensais l'avoir lu dans les guidelines, un jour, m'enfin je ne retrouve plus donc je retire ce que j'ai dit. Ceci dit, cela n'empêche pas que l'on ait déjà C-j pour ça.

Pour inhibit-startup-echo-area-message, la doc dit que l'on peut aussi le faire à la main :

 Setting this variable takes effect
 only if you do it with the customization buffer
 or if your `.emacs' file contains a line of this form:
  (setq inhibit-startup-echo-area-message "YOUR-USER-NAME")

Mais bon, le message dans le minibuf est pas bien gênant, à mon avis, de toute manière.

Sinon, C-c {n,p} appartiennent à l'utilisateur, comme tous les C-c <lettre> donc les redéfinitions pour {next,previous}-error sont OK.

Pour le reste, j'aime bien kill-line, pour ma part, mais c'est personnel, et C-M-BS, en effet c'est ancré dans un XKB map d'assez bas niveau (genre celui qui définit le type de clavier) le fait que ça reboote X, je crois me rappeler.</chipotage>

Et pour les suggestions bah, je suis loin d'être un grand pédagogue, mais de loin, ça a l'air plus orienté "débutant" que ce qu'il y a actuellement. Et euh, en plus, je ne sais pas encore ce que l'on fait durant l'année donc ça risque d'être dur d'aider sur ce point là. :D --Len 17 septembre 2008 à 17:30 (UTC)


Pour l'inhibit-startup-echo-area-message, en fait on peut pas sans customize. C'est probablement le truc le plus dégueulasse dans emacs. Essaie (setq inhibit-startup-echo-area-message (user-login-name)) dans le .emacs, Ca marchera pas, alors que la même chose avec "tonlogin" au lieu de (user-login-name) marche. Je pense que c'est un reliquat du temps où les types de GNU voulaient absolument promouvoir leur projet (<troll> comprendre : encore plus que maintenant </troll>). L'idée, c'est que tu puisses pas filer un .emacs générique qui annule ce message : l'utilisateur doit éditer le .emacs et mettre son propre login, ce qui signifie qu'il connait déjà emacs et a déjà vu le message. Si tu t'emmerdes, regarde l'implémentation du truc dans le source d'emacs, c'est à vomir :) (re-search-forward dans tout le .emacs voir si qqch matche "(setq inhibit-startup-echo-area-message "login")" ...)

Len, tu es 1A ? Si oui, c'est cool de voir un 1A arriver en connaissant déjà emacs (moi j'ai tout appris l'année dernière), ca change de tous ces vimistes :-)

Je remanierai la page quand j'aurai le temps (l'edt de 2A étant le gruyère qu'il est, ca va pas tarder :)).

--Levitta 17 septembre 2008 à 19:20 (UTC)

<HS>Bon, ça vire un peu dans le HS, mais ouep, je suis en 1A et oui je connais Emacs depuis un ptit moment. Mais habituellement il y a des vimistes en 1A ? J'ai fait les rangs en TD unix et m'a pas semblé voir de vieux barbu derrière son Vim (on pourrait aussi imaginer une mignonne petite fille derrière son Vim mais tout de suite, c'est plus violent) ou alors ils se cachaient bien.

Enfin, c'est bien que l'imag t'ait donné la vocation Emacs ! Par contre je me demande pourquoi des débutants iraient prendre Vim en arrivant à l'imag... m'enfin, c'est pas mon truc l'évangélisation.</HS>

Pour en revenir au sujet, euh, je pourrai mettre un lien vers mon .emacs dès que j'aurai remis à jour la version qui est en ligne, parce qu'elle date un peu ; c'est toujours informatif d'avoir des .emacs, même si le mien n'est pas commenté. Ceci dit, en général, pour de complets débutants, prendre quelques centaines de lignes d'elisp dans la gueule sans rien comprendre, ça fait pas du bien donc je pense que l'on fait aussi bien de ne pas trop montrer nos .emacs. J'attendrai les modifs pour commenter.

--Len 17 septembre 2008 à 20:48 (UTC)

J'ai tout réorganisé, rajouté des trucs, enlevé d'autres ... n'hésitez pas à changer/rajouter des trucs ! --Levitta 24 septembre 2008 à 15:41 (UTC)

Pour la compilation, je crois vraiment que ça aurait été plus simple de faire une fonction à part, genre my-compile et de dire aux gens d'appeler celle-là à la place de M-x compile, au moins, les elisp hackers en herbe pourraient comprendre le code. --Len 24 septembre 2008 à 22:09 (UTC)

  • C'est vrai, je n'y avais même pas pensé (les advices, c'est bien, mais ca pourrit l'esprit :-)). Je ne sais pas trop comment faire pour faire une fonction qui garde le comportement de compile vis à vis du préfixe par contre (à part recopier le code de compile). Si tu sais n'hésite pas. --Levitta 25 septembre 2008 à 07:41 (UTC)
    • Tu peux faire ça avec call-interactively :
(defun my-compile ()
  "Ad-hoc display of compilation buffer."
  (interactive)
  (let ((display-buffer-function 'display-buffer-by-splitting-largest))
    (call-interactively 'compile)))

--Len 25 septembre 2008 à 13:13 (UTC)

    • Merci, c'est en effet plus propre. Changé. --Levitta 25 septembre 2008 à 17:18 (UTC)

Pour la macro qui advise le comportement d'une touche, je trouve ça franchement assez crade, mais tant qu'à faire, si on y va par là, autant soit laisser l'appelant donner un nom à l'advice, soit en générer un anonyme avec un make-symbol dans la macro. --Len 24 septembre 2008 à 22:15 (UTC)

  • En effet, c'est relativement crade. Le fait est que ya pas beaucoup mieux si tu veux une vraie tab completion indépendante de tout mode. Donner un nom à l'advice, je vois pas vraiment l'intérêt, étant donné que l'advice est mis puis enlevé tout de suite après (et que de toute facon, donner un nom à un advice, c'est pas super utile). --Levitta 25 septembre 2008 à 07:41 (UTC)
    • Bah donner un nom à l'advice ça évite qu'un autre avec le même nom n'entre en conflit avec celui-ci, questions de bonnes pratiques après, je dis pas qu'un nom bizarroïde comme le tien entrera en conflit avec autre chose, mais c'est pas propre. Et non, il n'y a pas de moyen de faire des choses vraiment indépendantes des modes, vu quya pas de super-keymap qui override tout dans Emacs. Et sinon, j'aime pas les advice, de manière générale. :p --Len 25 septembre 2008 à 13:12 (UTC)
    • Bof. Dans ces cas là, la simplicité me paraît plus attractive qu'un bidouillage douteux pour éviter un problème inexistant. Je t'accorde qu'en théorie, c'est pas propre et je brûlerai en enfer, mais je prends le risque :) Pour les advice, effectivement c'est pas une solution optimale, et c'est pas aussi propre qu'une brave fonction, mais ca sauve la vie assez souvent pour des petits hacks de .emacs :)
    • Euh, on va éviter d'entrer dans un débat stérile mais juste pour finir : make-symbol est la méthode idiomatique pour créer des symboles non conflictuels dans les macros, étant donné que l'on n'a pas de macros hygiéniques comme en scheme, ce n'est pas "un bidouillage douteux". Et c'est pas moi qui le dis, cf. manuel elisp § 13.6.3 "Local Variables in Macro Expansions" pour un problème similaire de nom local à une macro. --Len 25 septembre 2008 à 19:05 (UTC)