Journal Emacs 24 : Toute résistance est inutile

72
18
sept.
2013

Sommaire

Emacs 24

Emacs 24 vient de sortir (1 an Emacs = 1 instant terrestre) c'est l'occasion de s'approcher un peu plus près.
Le premier contact avec Emacs est toujours un peu brutal. Voici deux ou trois choses qui peuvent aider à répondre à la question "pourquoi utiliser Emacs en 2017 ?" comme ça tu seras prèt. À la fin tu pourras essayer ma config de ninja.

Hors de la boite

De base, Emacs se comporte bizarrement. Pourtant toute la puissance qui va être mise en oeuvre plus tard est bien là, brute. Certains disent qu'Emacs est un OS avec un éditeur de texte chelou, et si c'est drôle c'est sans doute parce que c'est vrai. Les concepteurs d'Emacs, et maintenant les mainteneurs, ont fait le choix d'un système qui définit ses propres règles, ses propres paradigmes. Emacs est écrit en C, mais toute la couche "userland" est en LISP, enfin un dialecte LISP, appelé Emacs Lisp (intro). Emacs est ex-ten-sible.

Conventions

  • C : (Control) la touche Ctrl
  • M : (Meta) la touche ALT
  • S : (Shift) la touche Maj.
  • s : (Super) la touche WIN
  • SPC : (Space) la touche Espace
  • buffer : Un heu buffer

Eu'l néon bleu, y 'claire la route

  • Je sauve mes fichiers avec ALT-S, c'est un mouvement beaucoup plus naturel pour moi
  • Je les ouvre avec C-o parce que ma mémoire musculaire me l'a ordonné (fichiers récents M-o)
  • Je sélectionne tout avec C-a pasque bon, quoi
  • Je (dé)commente avec M-d (sélection ou pas sélection) pour les même raisons
  • Je vérifie l'orthographe d'un buffer avec F7, parce que c'est le raccourci standard
  • J'ai remappé isearch-forward (voir "Recherche") sur C-f (mais j'ai gardé C-s, les deux combinaisons font la même chose)
  • j'ai écrit une fonction qui sélectionne n'importe quoi situé entre deux signes identiques (et je m'en sers tout le temps)
  • Quand je M-i le mini-buffer m'affiche toutes les expressions (fonctions, classes, etc.) définies dans le fichier que je peux afficher à la volée dans n'importe quel langage (cette fonction n'est pas de moi, c'est un chef-d'oeuvre)
  • Je bouge la ligne courante avec M-up M-down, je peux chercher la sélection sur le web d'un coup de C-c g
  • Quand je tape C-( ça fait () si rien n'est sélectionné, ou (texte sélectionné), et ce avec tous les doubles signes courants. Si, si.
  • Mon historique d'undo est persistente entre les sessions (à peu près tout est persistant en fait)
  • Quand j'appuie sur C-M-SPC (tu es assis là, hein ?) à répétition, Emacs me sélectionne la prochaine expression (dans n'impor enfin toi-même tu sais). Donc tu te mets devant un for (condition) { ... et il te sélectionne toute la boucle jusqu'à la dernière accolade (à la fin il émet une erreur, qui annonce la fin de l'expression, et indique que ce que tu voulais sélectionner, l'est) ce qui permet de sélectionner comme qui rigole des if / else de quatre pages écrans (ça ((mark-sexp &optional ARG ALLOW-EXTEND)) c'est built-in)
  • Bien entendu cette config est synchro sur toutes mes machines.

Mark-ring

Quand tu te déplaces dans le fichier de façon rapide, genre C-end pour aller voir un truc à la fin du fichier, comment tu reviens "là où tu étais" ?
Emacs maintient un "mark ring" qui contient toutes les positions de départ de ce type, l'endroit où tu as commencé une recherche ou un mouvement, et fais une marque à chaque fois qu'un de ces déplacements se produit.
C-u C-SPC permet de remonter dans le mark-ring (je l'ai mappé sur s-left). Ça n'a l'air de rien, c'est extrêmement puissant (et un peu mystique, faut bien le dire).

Kill-ring

Quand tu "killes" un mot, une ligne, avec C-w ou M-backspace par exemple, l'objet passe dans le "kill-ring", qui est accessible avec M-y (apres un C-y seulement) ce qui permet de jongler avec le presse-papiers pour permuter des valeurs en sifflotant.
Note que ça marche aussi dans ton shell, ce qui rend l'étude de cette killer-feature indispensable.

Rectangles

C-x r k Pour killer un rectangle, C-x r t pour insérer une string.

Macros

Pour démarrer l'enregistrement, C-x ( et pour l'arrêter, C-x ).
Pour exécuter, C-x e (je l'ai mappé sur C-kp-0). Ça juste marche.

Recherche

Quand tu est devant un mot, et que tu veux chercher ce mot (ça t'arrive tout le temps, cherche pas) tu appuies sur C-s (chez moi C-f marche aussi) tu passes alors en mode incremental-search-forward (C-r pour basculer en backwards anytime) maintenant sans lacher control, appuie sur w : La sélection commence à "manger" le mot, puis les autres à mesure que tu rappuies sur w. Pendant ce temps, toutes les occurrences de cette sélection sont colorées dans le buffer. Si tu rappuies alors sur s, tu cycles toutes ces occurrences. That's how we search in the Shire.

Tramp (Transparent Remote (file) Access, Multiple Protocol)

Ouvrir un fichier à distance (chez moi C-o, remember)
C-x C-f /ssh:user@machine:~/fichier.ext

Ouvrir un fichier as root
C-x C-f /sudo:root@localhost:/etc/fichier.ext

Server

Pour n'avoir qu'un seul Emacs ouvert et y charger tous les fichiers voulus à la volée, enregistrer le script shell suivant sous ~/bin/e :

#!/bin/sh

if [ "$(pidof emacs)" ] ; then
    emacsclient "$@" &
else
    emacs -mm "$@" &
fi

Et ouvrir les fichier comme ça

e ~/.zshrc &

(astuce : Lancer le 1er ~/bin/e de la journée avec le shell graphique, genre Ctrl-F2 ~/bin/e, gnomedo ou équivalent, pour éviter qu'un crash du shell - shit happens - ne kille Emacs, ce qui est criminel)

Packages

M-x package-list-packages
Il faut avoir des dépôts définis, voir mon .emacs à la section "packages"

Undo-tree

L'undo d'Emacs est très puissant, si tant qu'il confuse les nouveaux arrivants qui peine à comprendre comment marche le redo. Ouvre la fenêtre, respire un peu. Le redo est un undo de l'undo.

           Undo/Redo classique             Emacs' undo

              o                                o
              |                                |
              |                                |
              o                                o  o
              .\                               |  |\
              . \                              |  | \
              .  x  (new edit)                 o  o  |
  (discarded  .                                | /   |
    branch)   .                                |/    |
              .                                o     |
                                                     |
                                                     |
                                                     x  (new edit)

Alors certes, ça permet de ne jamais perdre un edit, mais l'undo-ring peut devenir long à naviguer, surtout si on n'a pas compris. Ça peut devenir plus dur que de convertir des °F en °C pendant que ta maison brûle :

     (trying to get   o                          x  (finally got there!)
      to this state)  |                          |
                      |                          |
                      o  o     o     o     o     o
                      |  |\    |\    |\    |\    |
                      |  | \   | \   | \   | \   |
                      o  o  |  |  o  o  o  |  o  o
                      | /   |  |  | /   |  |  | /
                      |/    |  |  |/    |  |  |/
     (already undid   o     |  |  o<.   |  |  o
      to this state)        | /     :   | /
                            |/      :   |/
                            o       :   o
                                    :
                            (got this far, but
                             broke the undo chain)

Undo-tree permet non seulement un contrôle plus simple en définissant un redo, mais en gardant l'arbre, qui est visualisable et cliquable. Il affiche aussi un diff en temps réel, et les timestamps avec t ; c'est un truc de dingue.

                               o
                           ____|______
                          /           \
                         o             o
                     ____|__         __|
                    /    |  \       /   \
                   o     o   o     o     x
                   |               |
                  / \             / \
                 o   o           o   o

Chez moi ces commandes sont mappées C-z, C-S-z, et C-x u pour l'undo-tree. qui sauve ma journée assez régulièrement, merci undo-tree.

Magit

Magit permet une utilisation en profondeur des fonctions de git : Il permet de voir ce qui est staged, commited, (un)pushed et de gérer ces objets de façon très fine, en stageant à la volée s seulement les fichiers désirés et en ne pushant P P que les commits c voulus, et ce n'est que la première ligne de la réponse à la question "Magit?"

Kituu

Pour tester mon environnement, entrer ces deux commandes :

  • cp -R ~/.emacs.d/ ~/.emacs.d.tmp/
  • cd & wget https://raw.github.com/xaccrocheur/kituu/master/.emacs

(ou carrément git clone https://github.com/xaccrocheur/kituu.git .kituu && .kituu/scripts/kituu-setup.sh mais là c'est tout mon environnement que tu clones, alors RTFM)

Une fois Emacs lancé, px-help-emacs rappelle mes raccourcis spécifiques (pas tant que ça) et d'autres trucs moins évidents que j'ai eu du mal à retenir.

Tu es dans le "Scratch buffer" ; entre (animate-string "Welcome to Emacs, little mussel!" 10 10) reste positionné après la dernière parenthèse, et entre C-x C-e (eval-last-sexp) ; Bonne exploration :)

Documentation

Pour savoir ce que fait une combinaison de touches C-h k "combinaison" ; pour avoir la liste de tous les raccourcis clavier (bindings) C-h b. Toutes les docs sont dans Emacs lui-même, C-h i. Des liens mênent vers les very définitions des fonctions et variables directement dans les fichiers source. Oui, pour les fonctions C aussi, je sais même pas comment il fait ça.
Pour lancer le tutorial, C-h t. Pour le psy, M-x doctor (les enfants adorent, ma fille a appris l'anglais avec).

La mailing-liste help-gnu-emacs est plein de hippies géniaux et de professeurs éminents qui font des blagues rigolotes.

Épilogue

Ce petit journal est juste un bout minuscule de ce qu'une moule bien réveillée peut faire avec Emacs. Oui je sais, c'est mystérieux. Be afraid. Be very afraid.

Emacs a vaincu ma résistance. Comme la musique, il a déformé mon corps. Emacs a ruiné ma vie. G-Gollum ! ;)

  • # Où suis-je

    Posté par (page perso) . Évalué à 8. Dernière modification le 18/09/13 à 20:02.

    J'ai oublié un truc essentiel : Naviguer dans les buffers.

    Dans un Emacs à la vanille

    • C-x 1 Virer les autre fenêtres
    • C-x o Passer dans "l'autre fenêtre" (cycle)
    • C-x b Afficher un autre buffer
    • C-x C-b Lister tous les buffers ouverts (intelligent, permet de permuter deux buffers parmi beaucoup)

    Dans mon Emacs

    • F1 Virer les autre fenêtres
    • F2 Passer dans "l'autre fenêtre" (cycle)
    • F3 Splitter la fenêtre horizontalement
    • F4 Splitter la fenêtre verticalement
    • F5 Lister tous les buffers ouverts (intelligent, permet de permuter deux buffers parmi beaucoup)
  • # Passé immédiat

    Posté par . Évalué à 5.

    « Vient de sortir », il y a quinze mois quand même…

    Sinon, en mode serveur, emacsclient -t ouvre un client en mode texte (dans le terminal), très pratique pour éditer un fichier en CLI (on est déjà dans le bon répertoire, etc.). Notamment utile dans un émulateur de terminal qui se fend (split), avec des onglets : on se promène de l’éditeur au shell en un seul raccourci (plus pratique qu’un alt-tab ou la souris ; ok, les gestionnaires de fenêtres en tuiles sont aussi une solution et on peut aussi lancer un shell dans un buffer Emacs…).

    Le mode serveur élimine toutes les récriminations sur la vitesse de lancement d’un éditeur complet.

    • [^] # Re: Passé immédiat

      Posté par (page perso) . Évalué à 1. Dernière modification le 18/09/13 à 20:26.

      Le mode serveur élimine toutes les récriminations sur la vitesse de lancement d’un éditeur complet.

      Mmm.. Ben il l'élimine pour le second fichier, en fait :)
      Il ya toujours des cas où j'ouvre le fichier dans vim pour l'éditer rapide car aucun emacs n'est lancé sur cette bécane, ou je suis déjà logué en root et bon, ou whatever reason. Il se trouve que j'aime bien vim, en plus.

      Scénario classique : Je me loggue sur une machine pour éditer un fichier, ben c'est vi, direct.

      • [^] # Re: Passé immédiat

        Posté par . Évalué à 3.

        Pour info, ton script ~/bin/e peut être remplacé par l'option -a sans argument: emacsclient -a

      • [^] # emacs et systemd

        Posté par . Évalué à 9.

        Pour démarrer automatiquement emacs (avant tout autre programme utilisateur)

        /etc/systemd/system/emacs@.service

        [Unit]
        Description=Emacs: the extensible, self-documenting text editor
        
        [Service]
        Type=forking
        ExecStart=/usr/bin/emacs --daemon
        ExecStop=/usr/bin/emacsclient --eval "(progn (setq kill-emacs-hook 'nil) (kill-emacs))"
        Restart=always
        User=%i
        WorkingDirectory=%h
        
        [Install]
        WantedBy=multi-user.target
        

        Et pour l'activer pour l'utilisateur foo :
        # systemctl enable emacs@foo.service

        Personnellement, je n'utilise pas ce script, c'était trop lent, j'imagine que ça a quelque chose à voir avec la configuration réseau qui n'est pas encore en place à ce moment là.

        Please do not feed the trolls

  • # Vraiment sympa !

    Posté par . Évalué à 4. Dernière modification le 18/09/13 à 20:03.

    Super astuces, ça vas m'être utile :)

    Il y en a une que j'utilise souvent pour compiler :
    M-x compile permet de définir une commande pour la compilation, par exemple : cd ~/code/teeworlds && bam debug ou encore cd ~/code/sudoku && make
    Ensuite, pour recompiler à l'aide de la commande que l'on vient de définir, il faut appeler recompile : M-x recompile. Comme c'est assez chiant à taper, je l'ai mise en raccourci :

    (global-set-key (kbd "C-c c") 'recompile)

    Une autre 'astuce' : il existe un mode pour mettre à jour le buffer lorsqu'un que le fichier a changé sur le disque :

    (global-auto-revert-mode 1)

    Ainsi, lorsque je change de branche sur mon gestionnaire de version, le fichier est automatiquement rechargé :)

    • [^] # Re: Vraiment sympa !

      Posté par . Évalué à 4.

      Il y a aussi uniquify (fourni en standard), pour nommer un peu mieux les buffers avec des noms de fichiers identiques.
      Si on ouvre 2 fichiers foo/homonyme.txt et bar/homonyme.txt, au lieu d'avoir des noms tels que:
      homonyme.txt<0>
      homonyme.txt<1>

      uniquify permet d'avoir (par exemple):
      homonyme.txt<foo>
      homonyme.txt<bar>

      ajouter (require 'uniquify) dans l'initialisation, puis dans emacs faire C-h v uniquify-buffer-name-style puis aller sur 'customize' et taper entrée…

    • [^] # Re: Vraiment sympa !

      Posté par . Évalué à 3.

      Pour recompiler, tu peux aussi taper g dans le buffer de compilation.

      • [^] # Re: Vraiment sympa !

        Posté par . Évalué à 10.

        Et pour avoir les dernières infos sur le noyau linux, c'est patrick g ?

    • [^] # Re: Vraiment sympa !

      Posté par . Évalué à 3.

      Quelques astuces pour le mode compilation:

      (1) La commande de compilation peut contenir plusieurs commandes dont un 'cd' pour toujours compiler dans le même dossier:

        cd ~/myproject/ && make -k
      

      On pourra utiliser la variable globale default-directory pour toujours lancer la compilation depuis le dossier depuis lequel emacs a été lancé. Voir ci-dessous pour des exemples.

      (2) La variable compile-history contient l'historique des commandes de compilations.
      Par defaut c'est juste 'make' mais on peut le redéfinir dans le .emacs:

      (setq compile-history ( list
          (format "cd %s && make -k " default-directory) 
          (format "cd %s && make -k clean" default-directory)          
          "make -k" 
      ))
      
      ; et utilise la 1ere commande comme valeur par défaut 
      (setq compile-command (car compile-history)) 
      

      Cela marche aussi pour des commandes grep et grep-find:

      (setq grep-history ( list
         (format "cd %s && grep -nH -e " default-directory) 
         (format "cd %s && grep -rnH -e " default-directory) 
         "grep -nH -e" 
      ) )
      
      (setq grep-find-history ( list
         (format "cd %s && find . -type f -exec grep -nH -e  {} +" default-directory)
      ))
      

      (3) une petite commande pour sauver tout les fichiers et recompiler avec la dernière commande.

      (defun save-all-and-recompile ()
        "Sauve tout les fichiers et lance une re-compilation"
        (interactive)
        (save-some-buffers 1)
        (recompile)
      )
      
      ;; F7 pour la 1ere compilation ou pour changer la commande de compilation
      (global-set-key [f7]    'compile)                  
      ;; F8 pour recompiler rapidement
      (global-set-key [f8]    'save-all-and-recompile)
      

      (4) Par défaut le buffer de compilation ne scrolle pas ce que je trouve assez agaçant.

      ;; t pour scroller automatiquement dans le buffer de *compilation* 
      ;; 'first-error pour stopper le scroll à la 1ere erreur
      (setq compilation-scroll-output t)
      

      (5) Les commandes previous-error et next-error permettent d'explorer rapidement les fichiers sources où des erreurs de compilation se sont produites:

      (global-set-key [f11]   'previous-error)  
      (global-set-key [f12]   'next-error)     
      

      Cela fonctionne aussi dans les buffer grep, grep-find, occur, multi-occur-in-matching-buffers, … à la condition d'avoir passé les options -n et -H à grep.

      • [^] # Re: Vraiment sympa !

        Posté par . Évalué à 3.

        (1) La commande de compilation peut contenir plusieurs commandes dont un 'cd' pour toujours compiler dans le même dossier:

          cd ~/myproject/ && make -k
        

        Je comprends que c'est pour l'exemple, mais ça peut se faire avec :

        make -kC ~/myproject/

        Par defaut c'est juste 'make' mais on peut le redéfinir dans le .emacs:

        À moins que ça ai changé, par défaut c'est make -k.

        Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • # Comme quoi...

    Posté par (page perso) . Évalué à 10.

    …les commandes de Vim sont pas si compliqués que ça au final. :p

    • [^] # Re: Comme quoi...

      Posté par (page perso) . Évalué à -5.

      Ton avatar c'est l'ulti de lifestealer sur dota 2 :)

    • [^] # Re: Comme quoi...

      Posté par (page perso) . Évalué à -1.

      C'est possible d'avoir la même chose pour vim ?

      J'entends, une liste de raccourcis utiles à la vie de tous les jours…

      • [^] # Re: Comme quoi...

        Posté par . Évalué à 7.

      • [^] # Re: Comme quoi...

        Posté par (page perso) . Évalué à 4.

        Y a les vimcasts qui sont formidables pour apprendre des tips delamortkitue : http://vimcasts.org/

        It's a fez. I wear a fez now. Fezes are cool !

      • [^] # Re: Comme quoi...

        Posté par (page perso) . Évalué à 2.

        Sans répondre totalement à la question, ll y a quelques temps, j'ai fait une petite doc pour vim et sa gestion de conf :
        http://www.kywyxy.net/blog/2013/09/10/industrialiser-la-gestion-de-sa-configuration-vim-et-son-partage/

        Et le vimrc qui me sert de base partout ou j'ai besoins de lui:
        https://github.com/mornik/.vim

        En ce qui me concerne je ne programme pas, en dehors du shell. Donc les trucs utiles dan la vie de tous les jours ne sont pas forcément les même que pour un programmeur python.

        Il est aussi aisé de faire, avec vim, une config de base et de faire une config spéciale dev python etc… qui sera chargée au besoins.

        Et ça je trouve que c'est hyper intéressante. ça évite les mode/plugins qui mappent les mêmes raccourcis ou qui charge des trucs inutiles (genre je me fiche du module de refactoring de code python lorsque je veux modifier le httpd.conf, ou éditer mon dernier sh à la mode ou même d'embarquer sur un serveur toute la configuration de développement Latex).

        En tout cas sympas ce journal. Les ressources en français sur emacs sont trop peu nombreuses je trouve.

    • [^] # Re: Comme quoi...

      Posté par . Évalué à 4.

      Ça tombe bien. Emacs sait faire.

      • [^] # Re: Comme quoi...

        Posté par (page perso) . Évalué à 3.

        La dernière fois que j'avais regardé, le mode Vim ne supportait 10% des commandes que j'utilisais dans Vim. Bref, une grosse fumisterie à l'époque. Le mode Vim a l'air d'avoir changé, peut-être que maintenant, ça passerait…

        • [^] # Re: Comme quoi...

          Posté par . Évalué à 3. Dernière modification le 19/09/13 à 13:22.

          Je suppose que tu parles de viper-mode qui est réellement limité. Il a été remplacé par vimpulse qui rajoutait, entre autre, les "object-motion" (e.g. les commandes du genre: daw, cip, yaB) mais qui s'intégrait mal avec les nombreux mode mineurs d'Emacs.

          De là est né evil-mode des mêmes auteurs que vimpulse qui améliore celui-ci jusqu'à rendre l'utilisation d'Emacs assez similaire à celle de vim. Ça va des commandes de base (déplacement, insertion, …) au commandes plus avancés telle que les digrammes (utile pour taper des accents (les accents de se poste sont entrés comme cela), des hiragana/katakana ou autres symboles spéciaux) en passant par les commandes plus particulières comme encodage/décodage en rot13 (g?). Sur certaines commandes, le comportement d'evil-mode améliore celui de vim (e.g. lorsque l'on tape une substitution :s/foo/bar/g, on voit interactivement ce qui va être remplacé dans le buffer). Parfois il y a des différences plus gênantes comme la commande pour répéter la dernière commande (.)*. evil-mode va répéter aussi les commandes de mouvement, ce que vim ne fait pas il me semble.

          Dans les "moins", il y aussi les commandes de navigation entre buffers (C-w j, C-w h…) qui, bien qu'implementées dans evil-mode, ne sont pas des plus intuitives. Le problème vient du fait que si on se déplace dans un buffer qui n'utilise pas evil-mode, on est obligé d'utiliser les commandes d'origine d'Emacs (e.g. C-x o) pour revenir au buffer précédent.

          Personnellement, ces "moins" ne m'ont pas arrêté car au prix d'une légère adaptation, j'ai gagné un "vrai" langage pour écrire des extensions (plus les autres avantages d'Emacs bien sur e.g. fini les hack avec screen/tmux pour communiquer avec un interpréteur). D'ailleurs, les personnes qui utilise encore vim n'ont pas dû écrire beaucoup d'extensions.

          * Désolé pour la lourdeur de cette phrase :\

          • [^] # Re: Comme quoi...

            Posté par (page perso) . Évalué à 5.

            Donc en fait, c'est pas une blague, tu utilises Emacs … pour son mode Vim ?

            Mais tu es dans quelle nimage alors : Vi ou Emacs ?

            C'est sur qu'écrire des extensions à Vim, j'ai renoncé (j'ai même renoncé à Vim d'ailleurs, je suis passé à SublimeText). Mais … écrire des extensions en Emacs Lisp, c'est pas un peu … ardu ?

            • [^] # Re: Comme quoi...

              Posté par (page perso) . Évalué à 1.

              Emacs permet un contrôle important des objets sur lesquels tu travailles. Déplace ton curseur (en jargon Emacs : point) sur un caractère, et entre M-x describe-face et tu obtiendras toutes les infos sur la "face" (fonte, chasse, graisse, etc.) si tu M-x describe-TAB tu obtiendras toute la liste des commandes de describe :

              Possible completions are:
              describe-bindings                      describe-buffer-case-table
              describe-categories                    describe-char
              describe-character-set                 describe-class
              describe-coding-system                 describe-copying
              describe-current-coding-system         describe-current-coding-system-briefly
              describe-current-display-table         describe-distribution
              describe-face                          describe-font
              describe-fontset                       describe-function
              describe-generic                       describe-gnu-project
              describe-input-method                  describe-key
              describe-key-briefly                   describe-language-environment
              describe-minor-mode                    describe-minor-mode-from-indicator
              describe-minor-mode-from-symbol        describe-mode
              describe-no-warranty                   describe-package
              describe-prefix-bindings               describe-project
              describe-specified-language-support    describe-syntax
              describe-text-properties               describe-theme
              describe-variable
              

              L'idée en fait, c'est de comprendre comment Emacs peut t'aider, et crois-moi il peut.

              Pour ce qui est de la syntaxe, je suppose que le code suivant ne te fait pas peur :

              (defun px-date ()
                "Insert date"
                (interactive)
                (insert (format-time-string "%d %B %Y - %H:%M:%S - %3Nms" (current-time))))

              Déplace le point sur "insert" ou "defun" et entre C-h f (describe-function). (q pour quitter une fenêtre d'aide - où d'erreur).
              Remplace "insert" par "message". Re-évalue l'expression et lance-la : M-x px-date.
              Passe dans le "Scratch buffer" (chez moi C-h *) parce que je ne l'ai pas dans ma liste de buffers, je ne vois les buffers internes que si je le demande (ya aussi un menu buffer hein) entre (+ 1 2 3 4) positionne le point après la dernière parenthèse et entre C-x C-e (évaluation rapide de l'expression). La sortie est dans le minibuffer.
              Bon week-end :)

            • [^] # Re: Comme quoi...

              Posté par . Évalué à 5.

              Donc en fait, c'est pas une blague, tu utilises Emacs … pour son mode Vim ?

              C'est en partie vrai. J'ai longtemps utilisé Vim et j'apprécie vraiment sa philosophie. Le fait de garder la plupart du temps ces doigts sur les touches de repos est un confort indéniable. Donc l'émulation Vim était un critère important lorsque je suis parti à la recherche d'un nouvel éditeur.

              Mais tu es dans quelle nimage alors : Vi ou Emacs ?

              Emacs. Parce qu'avec Emacs, tu peux sûrement faire ce que fait Vim alors que l'inverse n'est pas vrai.

    • [^] # Re: Comme quoi...

      Posté par (page perso) . Évalué à 3.

      Un truc qui est génial sur Emacs, c'est le yank-ring. C'est hyper pratique. Et je réalise que couramment, j'ai besoin de coller un truc que j'ai copié mais qui a été écrasé par plusieurs copies depuis. C'est très simple et visuel de remonter dans l'historique.

      Vim fait vaguement ça avec des '3P mais ça n'arrive pas à la cheville de la convivialité du yank-ring d'emacs. Si d'ailleurs qq'un a un plugin pour faire ça, je suis preneur.

      • [^] # Re: Comme quoi...

        Posté par (page perso) . Évalué à 2.

        Dans vim je copie les lignes inintéressantes dans un buffer (genre y"a pour copier la ligne dans le buffert a),et "ap pour le coller.

        ça ne sauvegarde pas au fur et à mesure tout ce que tu copies mais ça rend peu ou prou le même service. Disons que tu dois savoir à l'avance si tu veux réutiliser.

        Pour supprimer un truc sans risquer d'écraser le buffer de copie (celui du yy par exemple) j'utilise le buffer "trou noir" : "_

        L'approche est différente, mais tu faits globalement la même chose.

        • [^] # Re: Comme quoi...

          Posté par (page perso) . Évalué à 3.

          C'est bien le problème, c'est que d'une part, il faut anticiper que tu veux copier un bloc de texte plusieurs fois, et que d'autre part, ça demande une gymnastique mentale (retrouver la lettre associée à ton buffer) et digitale (le ' est pas le caractère le plus agréable à taper) pas très agréable.

          Avec Emacs au contraire, si tu prévois de copier un bloc mais te retrouves en fait à en copier 3, pas de problème.

          Cela dit, maintenant j'utilise SublimeText et je trouve son approche bien plus intélligente (étonnant d'ailleurs qu'Emacs ne fasse pas un truc pareil): quand tu veux modifier N morceaux de textes, tu crées N curseurs et tu modifies tout de façon interactive à l'écran.

          • [^] # Re: Comme quoi...

            Posté par . Évalué à 3.

            Cela dit, maintenant j'utilise SublimeText et je trouve son approche bien plus intélligente (étonnant d'ailleurs qu'Emacs ne fasse pas un truc pareil): quand tu veux modifier N morceaux de textes, tu crées N curseurs et tu modifies tout de façon interactive à l'écran.

            iedit ne permet-il pas de faire ce que tu décris dans SublimText?

      • [^] # Re: Comme quoi...

        Posté par (page perso) . Évalué à 2. Dernière modification le 19/09/13 à 21:41.

  • # Who needs X ?

    Posté par (page perso) . Évalué à 2.

    Rha, encore un truc que j'ai oublié, qui est à la fois évident et pas du tout.

    Si tu demandes à ouvrir un fichier
    C-x C-f, ou C-o bref, et qu'au lieu d'indiquer, dans le minibuffer, un fichier, tu indiques un répertoire, Emacs te montre ce répertoire, te voilà en mode dired. Où tu peux faire mille trucs, marquer des fichiers, appliquer des patches, faire des diffs et toutes sortes de trucs, en plus de charger de fichier dans un buffer. donc ça en mode console sur une bécane quelconque (VM) X te manque pas.
    Pour avoir de la doc (keys, commands) sur le mode majeur actuel et les modes mineurs enabled : C-h m.

    • [^] # Re: Who needs X ?

      Posté par (page perso) . Évalué à 2.

      Tu voulais sans-doute parler de dired-x la version de dired en mieux — car oui c'était possible de faire mieux.

  • # Rectangle ?

    Posté par . Évalué à 4.

    J'ai pas capté ce qu'était cette histoire de rectangles… :O

    • [^] # Re: Rectangle ?

      Posté par . Évalué à 5. Dernière modification le 19/09/13 à 01:47.

      Il s'agit de la sélection en rectangle.

      Dans une application classique (e.g. un navigateur web), la sélection se fait par ligne. Je m'explique: tu commences ta sélection à un endroit. Tu descends ta souris[0], toute la fin de la ligne est sélectionnée puis la ligne suivante (jusqu'à la position de ta souris) et ainsi de suite.

      La sélection en rectangle permet de sélectionner par colonne. Cela veut dire que pendant ta sélection, lorsque tu descends ta souris, la fin de la ligne où tu te trouves ne sera pas sélectionnée. Seulement le nombre de colonne que tu as choisis. La sélection aura la forme d'un rectangle d'où le nom.

      En espérant être claire. Ce qui n'est pas gagner à cette heure.

      [0] Ça peut aussi se faire au clavier.

      • [^] # Re: Rectangle ?

        Posté par . Évalué à 3.

        Si ça semble très clair, ça a l'air sympa quand on manipule autre chose que du texte !

      • [^] # Re: Rectangle ?

        Posté par (page perso) . Évalué à 2.

        La sélection aura la forme d'un rectangle d'où le nom.

        Précision : Certains modes d'Emacs permettent ça (enfin je crois, en fait je sais pas) mais les deux commandes que j'ai indiqué à la section "rectangle" opèrent sans changer de mode, C à d que si tu as sélectionné

         v--------d'ici
        p|lop
        plop
        plop
        plo|p
           ^------à là

        et bien que la sélection ait l'aspect habituel, en entrant des commandes "rectangles" tu ne travailles que sur une colonne de 4 lignes de "lo".

        • [^] # Re: Rectangle ?

          Posté par . Évalué à 0.

          Précision : Certains modes d'Emacs permettent ça (enfin je crois, en fait je sais pas)

          evil-mode le permet.

  • # Mode simple

    Posté par . Évalué à 3.

    Je ne cherche surtout pas à lancer un troll. Je sais qu'emacs est puissant, mais je n'ai pas envie d'apprendre tout de suite des raccourcis tarabiscotés. Existe-t-il un mode, une extension… qui transforme emacs en éditeur compatible avec les gens frustres comme moi qui utilisent kwrite et gedit (c-à-d utilisation intuitive et raccourcis claviers simples comme Ctrl-S qui fonctionnent), tout en conservant la possibilité d'entrer des commandes élaborées lorsque c'est utile ?

    • [^] # Re: Mode simple

      Posté par . Évalué à 3.

      Pour remapper les raccourcies claviers relatifs au copier/coller (C-c, C-v, C-x), il existe le cua-mode (M-x cua-mode).

      • [^] # Re: Mode simple

        Posté par . Évalué à 4.

        Aussi dispo a travers la GUI dans le menu options.

      • [^] # Re: Mode simple

        Posté par (page perso) . Évalué à 2.

        Oui mais c'est cua-mode c'est relou car ça te prive de certains raccourcis (C-c notamment qui dédié à l'utilisateur pour mettre ses commandes perso). Vu que c'est juste pour le copier-coller, il vaut mieux s'habituer à utiliser les commandes emacs, C-w, M-w et C-y.

    • [^] # Re: Mode simple

      Posté par (page perso) . Évalué à 1.

      Oui, je connais au moins deux projets qui font ça, Emacs Prelude et Ergoemacs.

      D'une certaine façon, mon .emacs fait ça aussi. Je venais de Kate (oui) et j'avais besoin d'un minimum de continuité pour ne pas devenir fou (enfin, encore plus fou).

      Note qu'à mesure que le temps a passé, j'ai viré plein de ces customisations pour revenir à la méthode standard. Mon but théorique est de les virer toutes graduellement (il me semble que c'est l'approche d'Emacs Prelude, donc j'éssaierai celui-là en premier - Et puis c'est plus facile de parler à Bozhidar qu'à Xah ;)).

      Toujours tenter de laisser les deux méthodes opérationnelles, puis les tester de façon concurrente afin d'être bien sur de la pertinence de ta customisation ; comme pour tout, en fait.

  • # vim FTW

    Posté par (page perso) . Évalué à 4.

    E.M.A.C.S = Escape Meta Alt Control Shift

    Bref, il faut avoir des mains comme ça pour s'en servir:
    Titre de l'image

    • [^] # Re: vim FTW

      Posté par . Évalué à 1.

      Vim power.
      Vim le meilleur éditeur de texte du monde libre et des autres.
      Vim c'est la vi (mais encore mieux).

      Bof et puis non en fait, pas le courage de soutenir un troll.
      ggvGx:q!

      kentoc'h mervel eget bezan saotred

      • [^] # Re: vim FTW

        Posté par . Évalué à 7.

        VI VI VI, the number of the beast !

      • [^] # Re: vim FTW

        Posté par (page perso) . Évalué à 9.

        Va en paix mon frère, utiliser un vi libre n'est pas un péché.
        C'est une pénitence.

        (RMS)

      • [^] # Re: vim FTW

        Posté par . Évalué à 10.

        Faudrait plus de pistes cliquables pour faire du vi lib.

        kentoc'h mervel eget bezan saotred

      • [^] # Re: vim FTW

        Posté par (page perso) . Évalué à 3.

        ESC ESC ESC

        Pour info, vi a été conçu sur ce type de machine, où la touch esc est à la place de la touche tab sur les claviers contemporains.

        Le clavier pourlequel VI a été conçu

        L'emploi des touches control et alt est bien plus pratique — rien que parcequ'on les trouve des deux côtés, et sous les doigts. (Le Control-X cela se fait avec les deux mains, hein.)

        On peut trouver des avantages à vi par rapport à Emacs, mais invoquer une meilleure ergonomie des raccourcis clavier est soit de la mauvaise foi, soit de la bêtise.

        • [^] # Re: vim FTW

          Posté par . Évalué à 2.

          mais invoquer une meilleure ergonomie des raccourcis clavier est soit de la mauvaise foi, soit de la bêtise.

          Soit une question de goût.

          kentoc'h mervel eget bezan saotred

          • [^] # Re: vim FTW

            Posté par (page perso) . Évalué à 1.

            Soit une question de goût.

            Je parle d'ergonomie, pas de goût. Pur atteindre la touche ESC ta main doit quitter sa position habituelle de frappe, ce qui est inergonomique.

            • [^] # Re: vim FTW

              Posté par . Évalué à 1.

              atteindre la touche ESC ta main doit quitter sa position habituelle de frappe, ce qui est inergonomique.

              Certes c'est un point handicapant de vim même si on s'y habitue.
              Mais si on exclus la touche ESC je préfère l'ergonomie des raccourcis de vim que ceux d'emacs et pourtant j'ai essayé emacs pendant pas mal de temps (plusieurs mois) avant de me mettre à vim et au final j'ai choisi celui que je préférais, c'est tout, je n'irais jamais dire qu'emacs est moins bien que vim car ce sont tout deux d'excellents éditeurs.

              kentoc'h mervel eget bezan saotred

        • [^] # Re: vim FTW

          Posté par . Évalué à 1.

          J'utilise vim quotidiennement, et je n'utilise pas .

          En mode insert, je revient en normal via et en visuel, …
          J'ai configuré la touche caplock sur ctrl car j'utilise également beaucoup tmux. Sans tmux, elle serait certainement bind sur Esc.

          Après il est possible de mettre des binds, on vois par exemple beaucoup de "jj" ou "jk" pour sortir du mode insert.

          Après pour la guerre vim vs emacs, je suis sur vim uniquement parce que j'ai croisé des devs/admins utilisant vim et qu'il est disponible sur la plupart des linux out of the box.

  • # Comment ne respecter les conventions dès le premier exemple

    Posté par . Évalué à 8.

    M : (Meta) la touche ALT

    Je sauve mes fichiers avec ALT-S, c'est un mouvement beaucoup plus naturel pour moi

    Tu veux dire avec M-S ?

  • # Merci

    Posté par (page perso) . Évalué à 7.

    Je plussoie massivement ce journal qui mériterait largement une news rien que pour sa qualité !

  • # Improve your productivity

    Posté par . Évalué à 3.

    Et pour ceux qui voudraient tenter emacs, il y a le package emacs code browser.

    En gros, ca permet d'avoir les fichiers locaux a portée de clics, une vue sur les différentes fonctions du buffer courant, et pleins d'autres siouxeries dont je n'ai meme pas idée.

    Ca fait ressembler emacs a un IDE plus moderne.

  • # Evil

    Posté par (page perso) . Évalué à 5. Dernière modification le 19/09/13 à 09:34.

    Non ceci n'est pas un troll, ou alors un tout petit !
    J'ai passé pas mal de temps sous Emacs à utiliser Evil, une extension permettant d'avoir des modes de bases à la Vim (normal, insertion, visual,…etc). Cela permet d'arrêter les Escape+Meta+Control+…etc. Je suis accro aux modes et j'ai horreur d'utiliser les flèches directionnelles (déplacement de la main nécessaire, ça pue, ..etc).

    Bref, tout ça pour dire qu'Evil c'est trés bien fait !

    Finalement, je trouve qu'Emacs a une meilleur gestion des modes que dans Vim, pour lequel c'est difficile de définir ses propres modes (je ne connais pas tout non plus). Mais bon, malgré cela je suis sous Vim en ce moment, pour explorer davantage les possibilité de la bête (autant dire que ça va prendre un peu de temps).

  • # magit-tramp

    Posté par (page perso) . Évalué à 6.

    Tiens puisque ça parle de Magit et Tramp, je me permets de faire un peu de pub pour le petit dernier de la famille, magit-tramp (original hein?) qui fait un lien entre les deux mondes en permettant d'accéder à l'historique des fichiers par une interface filesystem propre à Emacs (/git:<revision>@<repo>:/path/to/foo.txt)
    C'est un peu jeune, mais suffisant pour mon quotidien.

    Quelques exemples de ce que ça permet de faire:
    screenshot

    Sait-on jamais, ça pourrait servir à quelqu'un :)

    • [^] # Re: magit-tramp

      Posté par . Évalué à 2.

      Aha, voilà ce qu'il me manquait!

      Magit est très bon pour gérer des diffs, mais pour naviguer dans l'historique à part la liste des commits il n'y a rien.

      Il manque peut-être un sélecteur de branche & dépôt, avec des valeurs par défaut raisonnables (si on est sur un fichier d'un dépôt, utiliser lui, puis proposer les git refs).

      J'utilise aussi mo-git-blame pour git blame, patché pour qu'il affiche les commits avec le mode magit, mais il est très limité: il est perdu dès qu'on a plusieurs windows dans la frame, la synchro entre son buffer qui listes les commits par ligne et le buffer fichier est perdu régulièrement…

      • [^] # Re: magit-tramp

        Posté par (page perso) . Évalué à 2.

        oui, c'est quelque chose qui manque à magit. Le but premier pour moi était de pouvoir faire de la revue de code avec ediff (ce que je fais maintenant avec (ediff-directories "/git:<base>@<repo>:/" "/git:<target>@<repo>:/" nil))

        Évidemment, je compte intégrer ça proprement à magit quand j'aurai un moment… (un jour, oh oui un jour)

        Sinon concernant git blame, as-tu essayé magit-blame.el (qui est d'ailleurs dans le screenshot)? C'est essentiellement du code que j'ai backporté depuis un fork non-maintenu de Magit. Assez bourrin (use et abuse d'overlays), mais ça marche plutôt pas mal

        • [^] # Re: magit-tramp

          Posté par . Évalué à 2.

          Les infos de blame inline, c'est surprenant. A voir à la longue, mais en test rapide c'est plus perturbant qu'autre chose, ça casse la lecture du code je trouve (mais ça résout le problème de synchro données blame<->file).

          Ce qu'il manque par rapport à mo-git-blame c'est la navigation dans le passé: afficher le fichier tel qu'il était au commit qui a modifié cette ligne ('b' dans mo-git-blame), ou au commit précédent ('a'), (mo-git-blame a d'autres fonctions du genre, mais je n'ai pas l'habitude de m'en servir).

          (et pour une raison qui m'échappe la key-map de magit-blame n'est pas dans describe-mode (C-h m)).

  • # Customize

    Posté par . Évalué à 4. Dernière modification le 19/09/13 à 10:19.

    Pour ceux qui ont le mal de mer avec toutes ces parenthèses, il existe M-x customize qui enlarge ton Emacs… simplement. Attention cependant à ne pas se perdre dans la forêt d'options.

  • # Ainsi que

    Posté par (page perso) . Évalué à 6.

    Pour la petite histoire, j'ai entendu parler de vim. Alors je suis allé voir et ça m'a plus. Puis on m'a parlé d'evil pour emacs et là, j'ai aimé.

    Puis j'ai entendu parlé de sublimetext. Alors je suis allé voir et ça m'a plus. Puis on m'a parlé de mark-multiple, iedit et autre pour emacs et là, j'ai aimé.

    Puis j'ai entendu parlé d'eclispe, visual studio, etc… Ca m'a pas plus, mais on m'a quand même parlé de CEDET. Ca m'a plus, j'aimerais aimer, mais c'est pas encore ça je trouve…

    Petit florilège de package qui rox (faite une recherche en ajoutant emacs):

    • el-get ! et package.el !
    • ido et smex
    • buffer-move, win-swith et switch-window
    • autopair
    • autocomplete !
    • deft
    • mark-multiple !!
    • helm !
    • yasnippet
    • flycheck !
    • scratch
    • calfw !
    • iedit !
    • jedi !!
    • evil !
    • org-caldav !
    • mmm-mode
    • ein !

    Et pour ceux qui veulent faire leur mail en imap : la combinaison offlineimap, imapfilter et notmuch roule nickel depuis un an !

    Emacs est vivant, avec une communauté acharnée qui fait des trucs de ouf en allant puiser partout les bonnes idées !

    • [^] # Re: Ainsi que

      Posté par . Évalué à 4.

      • ido : activer le mode flex, voire utiliser flx-ido (emacs 24 only) qui rajoute des heuristiques pour trier les résultats de flex match "qui font sens": il favorise les sous-matches les plus grands, plutôt qu'une lettre qui match toutes les 3, et une indication visuelle: les sous parties matchées sont soulignées.

      • des substituts à CEDET (pour C++ principalement), grâce à libclang: emacs-clang-complete-async et/ou rtags, c'est encore bien expérimental, mais les bases sont là, et ça marche, contrairement à CEDET.

      • gnus pour rss avec gwene.org

      • [^] # Re: Ainsi que

        Posté par (page perso) . Évalué à 2.

        gnus pour rss avec gwene.org

        Gnus mérite à lui seul qu'on ait écrit Emacs!

        • [^] # Re: Ainsi que

          Posté par . Évalué à 4.

          org-mode : pour faire du powerpoint, msproject, excel, evernote, calendar, gtd sans quitter son emacs.

  • # vIM : toutes insistances est inutile! :)

    Posté par . Évalué à -10.

    pas besoin de rabâcher, de faire des dessins, l'utiliser, c'est l'adopter. :)

  • # Petite précisions

    Posté par . Évalué à 2.

    Je sélectionne tout avec C-a pasque bon, quoi

    C-x h pour tout sélectionner.

    Je (dé)commente avec M-d (sélection ou pas sélection) pour les même raisons

    M-; est le raccourci clavier d'origine.

    Après, c'est dans la philosophie d'Emacs de le configurer pour qu'il s'adapte à notre utilisation.

    • [^] # Re: Petite précisions

      Posté par (page perso) . Évalué à 2.

      Après, c'est dans la philosophie d'Emacs de le configurer pour qu'il s'adapte à notre utilisation.

      Heu, ça c'est la philosophie des utilisateurs d'Emacs.

      La philosophie d'Emacs, c'est que tu t'adaptes à lui (et en échange il te laisse la vie sauve, misérable humain) ;)

    • [^] # Re: Petite précisions

      Posté par . Évalué à 3.

      Après, c'est dans la philosophie d'Emacs de le configurer pour qu'il s'adapte à notre utilisation.

      Pareil pour vim mais personnellement, j'essaie d'avoir le minimum de configuration pour être vraiment capable de passer partout. La base (dans le cas d'emacs comme dans celui de vim) est déjà suffisamment fourni.

      Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • # Escape Meta Alt Control Shift c'est le bien

    Posté par . Évalué à 3.

    Bon je ne reviendrai pas sur le choix des commandes (C-a, c'est le début de ligne tout comme C-e la fin )

    Je reviens surtout sur la définition des macros (F3 pour commencer, et F4 pour terminer)

    Ce qu'il faut retenir avec ces macros c'est qu'on a accès à toute la puissance d'emacs, notamment :
    * la possibilité de faire des recherches,
    * de changer de buffer, d'ouvrir des fichier, les fermer, les sauver…,
    * on a accès au raccourcis de navigation (C-flècheDroite pour un mot), la recherche…
    * à la copie et le kill ring
    * la possibilité d'avoir un compteur qui s'incrémente à chaque exécution de la macro
    * le replace intelligent
    * et enfin la possibilité d'éditer la dernière macro, la sauvegarder, l'associer à un raccourcis clavier

    J'ai parlé de replace intelligent, c'est une bénédiction par exemple, il est capable de garder la majuscule c'est c'est en majuscule, et inversement, par exemple getSuri où on fait un replace de suri par plop va donner getPlop

    et il y a encore le gdb-many-window (en mode gdb) pour debugger qui est pas mal du tout. Le hs-mode est aussi très utile avec sa capacité à replier tout un niveau dans un fichier.

    Par contre je sais qu'il y a moyen de modifier la couleur de fond en fonction de l'arborescence (utile lorsqu'on travail sur plusieurs branches), mais j'ai encore la flemme de le faire ;)

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: Escape Meta Alt Control Shift c'est le bien

      Posté par . Évalué à 5.

      et enfin la possibilité d'éditer la dernière macro, la sauvegarder, l'associer à un raccourcis clavier

      La longueur d'un « raccourcis » clavier emacs, c'est la longueur complète des commandes de la macro en vim, non ? :)

      Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

      • [^] # Re: Escape Meta Alt Control Shift c'est le bien

        Posté par . Évalué à 3.

        généralement je les place sur alt-keypad (1 à 9); très utile pour faire des changements répétitifs dans du code; quant à la longueur de la macro, c'est rarement moins de 10 mouvements (généralement les regexp suffisent à ce niveau là…

        Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: Escape Meta Alt Control Shift c'est le bien

      Posté par (page perso) . Évalué à 3.

      Ce qu'il faut retenir avec ces macros c'est qu'on a accès à toute la puissance d'emacs, notamment :

      Dans ta liste il manque la possibilité d'utiliser des registres, notamment les registres de position. Cela permet des combos assez audacieux.

      À partir du bout de code

      align
      rowalign
      align
      rowalign
      columnalign
      groupalign
      alignmentscope
      columnwidth
      width
      rowspacing
      columnspacing
      rowlines
      columnlines
      frame
      framespacing
      equalrows
      equalcolumns
      displaystyle
      side
      minilabelspacing
      
      
        (* Read table style *)
        let partial_read_table f c =
            =
          read f c [
          ]
      

      définir une macro clavier qui produit le résultat suivant en l'appliquant successivement sur la liste d'attributs du début. (La macro produit des from__list, le mot du milieu est ajouté à la main.)

        (* Read table style *)
        let _align = from_mtablealign_list "align"
        let _rowalign = from_mtdrowalign_list "rowalign"
        let _columnalign = from_mtdcolumnalign_list "columnalign"
        let _groupalign = from_groupalignment_list_list "groupalign"
        let _alignmentscope = from_bool_list "alignmentscope"
        let _columnwidth = from_mtablecolumnwidth_list "columnwidth"
        let _width = from_mtablewidth "width"
        let _rowspacing = from_length_list "rowspacing"
        let _columnspacing = from_length_list "columnspacing"
        let _rowlines = from_mtablelines_list "rowlines"
        let _columnlines = from_mtablelines_list "columnlines"
        let _frame = from_mtablelines "frame"
        let _framespacing = from_length_length "framespacing"
        let _equalrows = from_bool "equalrows"
        let _equalcolumns = from_bool "equalcolumns"
        let _displaystyle = from_bool "displaystyle"
        let _side = from_mtableside "side"
        let _minilabelspacing = from_length "minilablespacing"
      
        let partial_read_table f c
            ?align
            ?rowalign
            ?columnalign
            ?groupalign
            ?alignmentscope
            ?columnwidth
            ?width
            ?rowspacing
            ?columnspacing
            ?rowlines
            ?columnlines
            ?frame
            ?framespacing
            ?equalrows
            ?equalcolumns
            ?displaystyle
            ?side
            ?minilabelspacing
            =
          read f c [
            _align align;
            _rowalign rowalign;
            _columnalign columnalign;
            _groupalign groupalign;
            _alignmentscope alignmentscope;
            _columnwidth columnwidth;
            _width width;
            _rowspacing rowspacing;
            _columnspacing columnspacing;
            _rowlines rowlines;
            _columnlines columnlines;
            _frame frame;
            _framespacing framespacing;
            _equalrows equalrows;
            _equalcolumns equalcolumns;
            _displaystyle displaystyle;
            _side side;
            _minilabelspacing minilabelspacing;
          ]
      

      Astuce: utiliser un registre de position pour mémoriser l'endroit où la lecture est faite et où les insertions sont faites, et utiliser un registre pour enregistrer l'attribut.

      Quand on est habitué à ce genre de techniques, on franchit un cran d'efficacité dans l'utilisation de Emacs.

      (Le joli code, c'est pour un générateur MathML en OCaml .)

  • # Starter kits

    Posté par (page perso) . Évalué à 1.

    Pour commencer plus facilement avec Emacs quand on y connait rien au lisp, il y a des config de base toutes faites (à customiser ensuite): http://ergoemacs.org/misc/list_of_emacs_starter_kits.html
    J'utilise emacs-starter-kit qui est plutôt minimal (et parce que j'avais déjà une config existante), sinon prelude peut être un bon choix.

    Les trucs indispensables amha:
    - un alias ec="emacsclient -n -c --alternate-editor=''" pour lancer le daemon si nécessaire
    - le mode dired pour naviguer dans des répertoires
    - (global-set-key (kbd "C-b") 'ido-switch-buffer) pour changer rapidement de buffer
    - smex pour ouvrir des fichiers (inclut dans emacs-starter-kit)
    - (global-set-key (kbd "\M-;") 'comment-dwim) pour commenter/décommenter
    - (add-hook 'before-save-hook 'delete-trailing-whitespace) pour virer les espaces inutiles
    - autopair, auto-complete, flycheck, ack, evil, powerline, rainbow-mode et plein d'autres trucs ici s'il y a des gens intéressés. Après pas mal de temps passé avec evil, je me suis décidé à faire un bout de chemin avec vim pour voir si l'herbe est verte :)

  • # Personnaliser

    Posté par . Évalué à 1.

    Ave,

    Je confesse être emacsiste depuis une petite dizaine d'année. Mais au fil des années, je fait de moins en moins de personnalisation. Faut dire qu'à l'époque d'Emacs 21, c'était quasiment le passage obligatoire. Emacs 24 réduit l'écart, je ressent moins le besoin de personnaliser.

    En fait, vrai avantage d'emacs, c'est d'avoir un seul éditeur pour des projets de toutes tailles, en texte comme en graphique. Néanmoins, je trouve que les sur-couche IDE sont encore immatures et surtout lourdes… très lourdes !

    Merci pour ce journal, il y a de bonnes astuces !!

    Cordialement,

    • [^] # Re: Personnaliser

      Posté par (page perso) . Évalué à 3.

      Je confesse être emacsiste depuis une petite dizaine d'année. Mais au fil des années, je fait de moins en moins de personnalisation.

      Pareil. En fait je fais surtout de l'extension, en chargeant des modes spéciaux pour éditer ceci-cela, mais je ne fais aucune modification de l'éditeur lui-même ce qui permet de passer facilement d'une station de travail à l'autre­-ceci dit bon dot.emacs va bientôt se faire hoster en gitbidulechose.

  • # Volume.el & Orgmode

    Posté par . Évalué à 1.

    Bravo pour cette article de grande qualité.
    Je me permets de vous faire part de 2 modes que j'utilise tout les jours.

    Org-mode qui est juste incroyable. Normalement c'est un outil qui s'utilise pour faire des todo-list.
    Mais certain en ont fait des moteurs de blog. d'autre s'en servent pour plein d'autres chose encore (moi je m'en sers pour prendre mes cours)
    Sincèrement, prenez vous 20 minutes pour faire les tutos, votre vie en sera changé !
    http://orgmode.org

    Le 2em mode que j'utilise est "volume-el" . C'est un plugin super con qui permet de monter ou de baisser le son de son pc directement depuis emacs.
    https://github.com/dbrock/volume-el

    Voilou

  • # Intelligence

    Posté par (page perso) . Évalué à 1.

    Wow, c'est la première fois que je vois autant de commentaires parler de Vim et d'Emacs sans troll puéril (pléonasme ?).

    Ça fait vraiment plaisir, car du coup j'ai appris pleins de choses sur Emacs, à vous lire tous (je suis un vimeur depuis… trop longtemps).

    Du coup ça me donne envie d'essayer emacs avec un vim-mode :)

    Merci !

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.