Meilleur darkroom-mode


Dans l'optique d'utiliser Emacs avec seulement Elpa ou nonGnu Elpa comme source de packages, je me suis dit que faire en sorte que Darkroom soit aussi simple à utiliser que Writeroom-mode pourrait être bien et cela me permettrait d'écrire mes premières lignes en emacs-lisp.

Contexte

J'utilise Emacs en mode graphique avec la barre de menu. Parfois, j'ai besoin de me concentrer sur un texte. Pour passer en mode sans distraction, j'utilise le package darkroom-mode.

Pour avoir un environnement d'écriture sans distraction pour un texte donné, je fais les action suivante :

Emacs-lisp

Le code est assez simple. Il se compose de deux fonctions complémentaires darkroom-focus-in et darkroom-focus-out.

(interactive) signifie que la fonction peut être appelé via M-x.


      (defun darkroom-focus-in ()
        "Free distraction writing"
        (interactive)
        (delete-other-windows)
        (toggle-frame-fullscreen)
        (darkroom-mode)
        (menu-bar-mode -1))
      

Pour l'opération inverse :


        (defun darkroom-focus-out ()
          "Quit free distraction writing"
          (interactive)
          (toggle-frame-fullscreen)
          (darkroom-mode -1)
          (menu-bar-mode))
      

Je sélectionne les lignes et je fais un evaluate-region. Cela permet d'utiliser les fonctions directement dans Emacs. Quand la session sera fermée, alors la fonction ne sera plus utilisable au prochain lancement. Pour la rendre permanente, il faut la copier dans le fichier init.

Les fonctions darkroom-mode et menu-bar-mode activent ou désactivent le mode. Pour désactiver il faut un nombre négatif. Pour activer il faut un nombre positif ou rien. La fonction toggle-frame-fullscreen regarde l'état de la fenêtre et applique l'inverse.

Tip : pour avoir ce genre d'info, inutile de parcourir internet. Il suffit de sélectionner le nom de la fonction et appuyer sur les touches f1 f ( ou C-h f ) pour voir l'aide.

Attention ! Il faut bien utiliser darkroom-mode et pas darkroom-tentative-mode qui est une fonction autour de darkroom-mode pour vérifier s'il n'y a qu'une fenêtre affichée pour lancer le mode. Là, on contrôle tout le processus donc on peut utiliser directement darkroom-mode.

Mise en production

Coller le code des deux fonctions dans le fichier init. Evaluer le buffer. C'est prêt !

Keybinding

Les deux fonctions sont liées à la touche F8 qui est libre d'utilisation par défaut.

Ajout dans le fichier init.


        (global-set-key (kbd "<f8>") 'darkroom-focus-in)
        (global-set-key (kbd "<S-f8>") 'darkroom-focus-out)
      

Futur

Le futur est simple : arriver à fusionner les deux fonctions en une seule : darkroom-focus-toggle. Je sais que je pourrais faire cela après quelques recherches en parcourant la toile. Mais je préfère aller à mon rythme et m'améliorer en emacs-lisp en utilisant la doc contenue dans Emacs.

D'ailleurs, j'aimerai d'abord améliorer mon utilisation d'Emacs Web Wowser comme outil html preview.