Journal Des prompteurs pour Emacs

Posté par (page perso) . Licence CC by-sa
Tags :
11
24
juil.
2014

Et si 12 prompteurs multipliés par 12 touches équivalaient à 144 raccourcis claviers en moins à mémoriser?
(et encore, on aurait ajouté un niveau, c'eut été digne de Inception cette histoire)

Voilà voilà "emacs-nu" est une idée toute simple : s'il y a des raccourcis qui valent bien la peine d'être appris ce sont les touches les plus courantes, pas les autres. Pour les autres, il faut rester sur les raccourcis claviers standard. CONTROL+S doit sauver c'est tout!

Bon certes, mais pourquoi écrire un mode (global mineur) pour cela? eh bien, parce que si Control+f ne fait "que" chercher, l'utilisateur va devoir apprendre Control+shift+f pour chercher autrement, et control+alt+f, et puis.. et puis… bref. Le mieux est donc d'afficher un "prompt" : lorsque control f est utilisé : tout plein de fonctions liées à la recherche - voire la navigation - vont être proposées. Tout simple. Déclinons cette idée à d'autre touche et nous obtenons enfin du repos bien mérité.

Rien de technique, tout cela relève de code de singe - en attendant, le code est là, me soulage bien la vie, et y'a même de la doc.

https://github.com/pyluyten/emacs-nu/
https://github.com/pyluyten/emacs-nu/blob/master/doc/nu.pdf

  • # Histoire

    Posté par (page perso) . Évalué à 5. Dernière modification le 24/07/14 à 21:44.

    C'est toujours le même problème avec les logiciels qui ont une base d'utilisateurs vaste : combien coûte le changement ?

    Gnu/Emacs a été créé durant une période où chaque logiciel avait ses propres raccourcis clavier, et chacun était différent. Vi en fait parti (Vi et Emacs ont environ 38 ans).

    Avec le temps, les Common User Access (CUA) ont été adoptés par les nouveaux logiciels.

    Mais alors, quid de Vi et d'Emacs ?
    D'un côté, il faudrait revoir l'ensemble des raccourcis claviers, et donc forcer la base d'utilisateurs à changer (et à s'entendre sur un nouveau standard), et d'un autre, les nouveaux utilisateurs qui gueulent car c'est casse-pieds.

    Je pense qu'il faudrait peut-être présenter un double jeu de raccourcis : l'un ancien, et l'autre nouveau, activable par l'utilisateur selon son bon vouloir.
    Le seul souci, c'est que chaque raccourci est codé en dur dans toutes les extensions, alors ça risque de prendre quelques années.

    Si tu en as l'envie, pourquoi ne pas proposer ton aide sur la liste de diffusion pour lancer ce projet ?

    • [^] # Re: Histoire

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

      ErgoEmacs est intéressant sur ce point car il a introduit des "thèmes" (de raccourcis claviers) comportant des "composants". On peut choisir ou développer facilement son thème, & les composants (ex: control+c control+v) définis sont réutilisables pour d'autres.

      https://github.com/ergoemacs/ergoemacs-mode/blob/master/ergoemacs-themes.el

      PS beaucoup d'utilisateur d'emacs doivent penser comme moi que les raccourcis vi ont moins mal vieilli. Certes les hjkl de nos claviers n'ont pas les flêches affichées, mais cela reste tellement logique. Quand au standard, le fait que ce soit modal barre de toutes façons la route au standard.

    • [^] # Re: Histoire

      Posté par . Évalué à 4.

      Avec le temps, les Common User Access (CUA) ont été adoptés par les nouveaux logiciels.

      Mais alors, quid de Vi et d'Emacs ?

      Je ne sais pas pour vim mais pour emacs il y a une case a cocher dans le menu option pour utiliser CUA! Elle s'appelle meme "Use CUA keys" mais bon c'est ultra basique par rapport a tout les raccourcis clavier que propose emacs.

      • [^] # Re: Histoire

        Posté par (page perso) . Évalué à 7. Dernière modification le 25/07/14 à 13:07.

        Toujours rappeler aux nouveaux venus que C-INS pour copier, S-DEL pour couper et S-INS pour coller marchent partout, et encore heureux, tiens.

    • [^] # Re: Histoire

      Posté par . Évalué à 1.

      Tu prends les choses à l'envers. Pourquoi changer vi pour correspondre aux autres logiciels quand on peut changer les autres logiciels pour qu'ils fonctionnent comme vi ?

      Tout les logiciels que j'utilise ont des raccourcis clavier vi-like et j'en suis pleinement satisfait. Meme quand en stage j'ai du utiliser visual studio, j'ai trouvé un mode vi pour ce logiciel.

      • [^] # Re: Histoire

        Posté par (page perso) . Évalué à 2. Dernière modification le 28/07/14 à 18:54.

        Tu prends les choses à l'envers. Pourquoi changer Emacs pour correspondre aux autres logiciels quand ces logiciels fonctionnent déjà comme Emacs ?

        Tout les logiciels que j'utilise ont des raccourcis clavier Emacs-like et j'en suis pleinement satisfait. Quand je fais C-backspace ou C-k pour effacer des trucs dans mon shell (ZSH, mais ça marche dans le tien aussi) je peux C-y pour les coller, mais aussi et surtout M(alt)-y pour naviguer dans le kill-ring, ou encore C-r pour reverse-chercher…

        • [^] # Re: Histoire

          Posté par . Évalué à 0.

          Tu parles de quel navigateur ? ça marche pas chez moi ces raccourcis dans firefox, à moins que ça soit vimperator qui les désactives, je sais pas, mais je pense pas.

          • [^] # Re: Histoire

            Posté par (page perso) . Évalué à 2. Dernière modification le 28/07/14 à 20:14.

            Tu parles de quel navigateur ?

            Firefox. Et si si si bien vu chez toi, c'est sans doute vimperator qui empèche its-all-text de bien marcher ;)

            Au fait, j'ai copié-collé ta phrase (avec les fautes) mais c'est clair que pas "tous les logiciels que j'utilise ont des raccourcis Emacs-like" et dans certains cas, je suis pas sur que ce soit une mauvaise chose…

          • [^] # Re: Histoire

            Posté par (page perso) . Évalué à 5. Dernière modification le 28/07/14 à 20:42.

            …Et avoue que ça t'as épaté, le coup du kill-ring dans ton shell de tous les jours. Ça épate tout le monde.

            Démonstration:

            Logge-toi dans ton shell. Tape la suite de commandes suivante:

            $ élu par cette crapule

            puis C-backspace, comme tu as l'habitude de faire, genre dans Emacs, pour effacer "crapule".

            $ élu par cette

            Maintenant déplace-toi juste après "par" (C-left) et kille-le aussi.

            $ élu cette

            Retourne à la fin de la ligne (end, ou C-e, tiens, encore une commande Emacs) C-y, poum :

            $ élu cette crapule

            Un (deux) autre coup de C-left, maintenant C-y pour yanker l'bazar :

            $ élu crapule cette crapule

            Et maintenant un coup de M-y pour remonter dans le ring (comme un vrai bonhomme) et là, attention ça va très vite en bas à gauche de votre écran :

            $ élu par cette crapule

            Oui, je sais, ça te déphosphate un peu. Va dans la lumière, tu es maintenant un des nôtres.

            (while true
               (message "Un des nôtres\n"))
            • [^] # Re: Histoire

              Posté par . Évalué à -2.

              Je ne veux pas briser tes rêves, mais j'utilise le mode vi dans mon shell.

              • [^] # Re: Histoire

                Posté par (page perso) . Évalué à 4. Dernière modification le 28/07/14 à 21:04.

                Et donc ça fait ça, copier/couper-coller des bouts de texte comme qui rigole en gardant l'historique des kills (ne me sors pas les registers de vi, dans ton shell, on va se fâcher ce serait dommage) ? Si oui, surtout change rien.

                PS - J'utilise vi, et d'ailleurs j'adore vi, nan mais je déconne pas, j'aime chaque minute que je passe dedans, je trouve ça super pour éditer vite-fait un fichier sur une machine quelconque, c'est mon réflexe de base, comme tout le monde en fait.

                Ha! En fait c'est ça la vraie différence : Les vi-users n'utilisent pas Emacs, alors que les Emacs-users utilisent tous vi.

                Nananananè-reuh :)

          • [^] # Re: Histoire

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

            Ne pas oublier que tout ce que tu vas yanker, c'est tout ce que tu as killé tant que tu avais le doigt sur C (ctrl).

            Bien sur, ce paradigme fonctionne non seulement avec des mots (comme on vient de le voir) mais aussi avec des lignes (C-k pour couper - kill! - la ligne à droite) avec des blocs (ctrl-w pour couper - kill! - une sélection) avec tout, ce qui est aussi confusant que c'est puissant, et perso je trouve que c'est un des trucs les plus durs à piger quand tu arrives dans Emacs. En général c'est un mardi, et il pleut.

            Insiste. Emacs est l'outil ultime de manipulation de texte, il est à ta portée, mais pour atteindre cet état de conscience tu vas devoir partir dans la montagne et abandonner tout espoir. Et quand tu redescendras, tel Zarathoustra avec son aigle et son serpent, tu pourras contempler l'étendue de ta puissance.

            J'exagère à peine, sans déconner.

  • # Commentaire du jour

    Posté par . Évalué à 10.

    J'ai comme l'impression que tu essaies de rendre Emacs plus accessible et plus utilisable.

    En quoi ton projet est-il tellement différent de tous les autres qui vont dans ce sens. Je veux dire, en prenant un exemple complètement au hasard, qu'est-ce que ça fera de plus que celui-ci?

    • [^] # Re: Commentaire du jour

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

      pouah

    • [^] # Re: Commentaire du jour

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

      héhé , troll à part:

      nous savons tous que evil-mode rend disponible dans emacs les touches / le comportement de vim. L'intérêt bien sûr étant de continuer de profiter de Lisp, et donc de pouvoir étendre son "vim dans emacs" très très facilement (par un exemple un shell ou ce qui nous chante).

      Ce qui est peut être moins connu, est que evil-mode propose très facilement de "switcher" depuis l'"état" vim (ce qui inclut donc ) vers l'état emacs (comportement standard de emacs). Et nous pouvons bien sûr repasser de l'état emacs à l'état vim.

      Il est donc parfaitement possible d'utiliser nu-emacs ou ergoemacs ou ce que l'on veut et, d'un raccourci clavier, de passer en éditeur modal. L'intérêt?
      - si vous travaillez dans un contexte ou les deux mains sur le clavier sont pénibles / ou avec pleins de logiciels "imposant" des raccourcis standard, utilisez l'éditeur dans l'état emacs
      - si vous avez les mains fatiguées par les Alt+Control & plein de texte à éditer, passez en éditeur modal pour vous reposer les mains

      • [^] # Re: Commentaire du jour

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

        +1

        Surtout qu'il est très facile dans evilmode de surcharger Ctrl+s, Ctrl+x, …. Pour remapper ces combinaisons de touches sur les classiques "save", "cut", … si le besoin s'en fait vraiment sentir.

        • [^] # Re: Commentaire du jour

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

          On peut aussi dire à Emacs de se comporter un peu comme vi, par exemple après ces deux advices

          (defadvice kill-ring-save (before slick-copy activate compile)
            "When called interactively with no active region, COPY a single line instead."
            (interactive
             (if mark-active (list (region-beginning) (region-end))
               (message "Copied line")
               (list (line-beginning-position)
                     (line-beginning-position 2)))))
          
          (defadvice kill-region (before slick-cut activate compile)
            "When called interactively with no active region, KILL a single line instead."
            (interactive
             (if mark-active (list (region-beginning) (region-end))
               (message "Killed line")
               (list (line-beginning-position)
                     (line-beginning-position 2)))))

          Tu copies ou coupes la ligne courante quand rien n'est sélectionné, exactement comme le yy et le dd de vi.

          • [^] # Re: Commentaire du jour

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

            Je ne connaissais pas les advices dans emacs, ça à l'air bien ce truc !

            Dans le contexte « Evil » je ne vois pas trop ce que ça apporte, mais c'est puissant comme fonctionnalité :)

            • [^] # Re: Commentaire du jour

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

              Je ne connaissais pas les advices dans emacs, ça à l'air bien ce truc !

              C'est super. Ça permet de modifier le comportement d'une fonction sans même (hypothétiquement) regarder son code. Tu peux advice before, after, et around.
              Around, ça donne ça :

              ((avant) fonction (après))

              Je m'en suis pas mal servi pour mail-bug.

            • [^] # Re: Commentaire du jour

              Posté par . Évalué à 1.

              C'est une fonctionnalité très puissante mais il est déconseillé de l'utiliser car si tu "advices" une fonction, ça peut perturber le fonctionnement d'autres parties du système qui appellent cette fonction. Et puis il y aussi le fait qu'il n'est pas facile de savoir l'ordre des "advices".

              Donc il vaut mieux chercher une autre solution quand on pense avoir besoin de cette fonctionnalité. Pour l'exemple donné par xaccrocheur, il est préférable de définir 2 fonctions "my-kill-ring-save" et "my-kill-region" et de remapper les raccourcis claviers qui vont bien.

            • [^] # Re: Commentaire du jour

              Posté par . Évalué à 3.

              On appel ça de la programmation orientée aspect, c'est puissant, mais assez dangereux en effet (et peu utilisé au final mis à part dans quelques situations classiques).

              tout ça pour dire que c'est probablement très bien fait emacs-lisp, mais que ça existe dans pas mal de langages.

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

      • [^] # Re: Commentaire du jour

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

        Pour en revenir à l'intérêt d'un truc comme evil-mode, l'autre jour j'ai fais quelques jours de pair programming via VNC avec un collègue à l'autre bout du pays, je suis emacsien et lui utilise vim, et nous étions sur mon bureau et donc mon emacs, lorsque c'était à son tour de taper (bon, je dois avouer que les lags de VNC ont vite calmé nos ardeurs), j'aurais bien voulu me souvenir de ce mode là….

  • # Ergonomics

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

    Je sauve depuis toujours avec M-s perso, et je copie avec M-w (mais ça c'est par défaut) car je veux utiliser mon pouce et mon index, comme les utilisateurs de machines Mac avec leur touche "pomme" à la position largement plus ergonomique que notre lointain Controlistan.

    • [^] # Re: Ergonomics

      Posté par (page perso) . Évalué à 1. Dernière modification le 25/07/14 à 13:58.

      Je sauve depuis toujours avec M-s perso, et je copie avec M-w (mais ça c'est par défaut) car je veux utiliser mon pouce et mon index

      Le pouce OK ! pour le M-, mais pourquoi l'index? ils sont où le « s » et le « w » sur ton clavier ?

      • [^] # Re: Ergonomics

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

        Le pouce OK ! pour le M-, mais pourquoi l'index? ils sont où le « s » et le « w » sur ton clavier ?

        Au moins un de nous deux ne comprend pas ta question :)

        Sur mon clavier (PC 105 touches standard) le s est (en gros) aligné avec le M (alt) sur un axe vertical. Le w est légèrement décalé vers la gauche, ce qui est encore plus naturel. Si tu utilises un PC, sur ton clavier à toi, il y a de très fortes chances pour que ce soit pareil.

  • # Affichage des raccourcis

    Posté par . Évalué à 3.

    Je trouve que c'est une bonne idée.

    Honnêtement, je n'utilise pas emacs ni vim non plus. Je suis sous Geany.

    Dans un éditeur "idéal" (tel que je l'imagine), je pense qu'il faudrait afficher tous les raccourcis contextuellement. Comme tu le propose mais étendu partout.

    Par exemple, si on est au début d'un mot on peut faire des choses en plus comme "Ctrl+flêche droite" pour aller à la fin du mot.

    L'écran serait divisé en deux. A gauche la zone d'édition "classique", à droite la liste de tous les raccourcis utilisables dans le contexte. Il y a quasiment toujours de la place à droite de l'écran (du "blanc") car le code est structuré en bloc.

    En fait, j'ai déjà vu ça plusieurs fois notamment dans TempleOS (http://www.youtube.com/watch?v=EViG0Q4lTeA). Ce gars fait des choses très intéressantes.

    Je me souviens des anciennes interfaces en mode texte. Il y avait des menus hiérarchiques numérotés et/ou avec touches de fonction.

    Les utilisateurs finissaient par les connaitre par coeur. Ils n'avaient plus besoin de lire l'écran.

    Dans les interfaces fenêtrées, tout est caché dans les menus de la fenêtre ou les menus contextuels. Au final, ce n'est pas très ergonomique.

    • [^] # Re: Affichage des raccourcis

      Posté par . Évalué à 5.

      Je me souviens des anciennes interfaces en mode texte. Il y avait des menus hiérarchiques numérotés et/ou avec touches de fonction.

      C'est ce que fait l'éditeur nano. Une fois qu'on connaît les raccourcis on peut désactiver l'affichage de cette aide.

      • [^] # Re: Affichage des raccourcis

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

        Nano est assez limité je trouve. Un autre éditeur dans cet esprit est ee, et il a l'air plus puissant.

        Opera le fait depuis 10 ans.

        • [^] # Re: Affichage des raccourcis

          Posté par . Évalué à 2.

          Nano est assez limité je trouve.

          Mouais, après ça dépend de ce qu'on attend d'un éditeur… Vi et emacs font le café c'est génial, moi je préfère un éditeur basique. Si j'ai besoin de fonctionnalités d'édition poussées j'utilise awk.

          • [^] # Re: Affichage des raccourcis

            Posté par (page perso) . Évalué à 2. Dernière modification le 02/08/14 à 18:54.

            C'est une approche tout à fait raisonnable, et c'est scriptable donc portable. C'est rare, mais il m'arrive de me dire que telle super fonction en elisp à moi que j'ai serait super en batch dans un shell et donc je peux lancer Emacs en mode interpreteur (emacs --help) et donc il se lance et compile le fichier où ya la fonction et…

            C'est une approche tout à fait raisonnable.

  • # discover.el

    Posté par . Évalué à 3.

    Salut,
    Je ne trouve pas ta doc très explicite.
    2 remarques:
    - ton projet n'est-il pas similaire à discover.el ? http://www.masteringemacs.org/articles/2013/12/21/discoverel-discover-emacs-context-menus/
    - des plans pour une recette MELPA ?

    cheers

    • [^] # Re: discover.el

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

      Hello,

      je ne découvre le commentaire que là

      Discover.el fait visiblement dans l'orfèvrerie. Mais du coup les prompteurs sont forcément définis à la main : pour un nombre limités de fonctions, & sans possibilité de customiser (tant mieux si je me trompe!).

      De plus il s'agit visiblement de documenter du raccourcis standard, là où nu-mode veut passer.. tout en key sequence. Avec des raccourcis en séquence, tout en respectant les raccourcis standards, on peut couvrir toutes les fonctionnalités emacs, même en intégrant celles de modes majeurs (je commence à travailler sur org-mode). C'est la grosse différence. Il faut aussi noter que mes prompts ont destinée à être conditionnels : par exemple, selon que l'on soit en mode overwrite / read-only / ou "normal", le prompt pour control+r "replace" ne doit pas produire la même chose.

      Magit est justement un mode que je trouve mauvais du point de vue ergonomique. A demander where-is pour git push, on ne trouve rien. A passer par le menu, on n'en apprends pas plus.

      Effectivement ma doc n'est pas encore au point. je suis preneur de remarques pour y remédier. Pour MELPA, j'attendais un peu de stabilité, je peux à présent regarder

Suivre le flux des commentaires

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