Kib's Memo

Emacs my love

Article numéro 6 écrit le samedi 06 octobre 2007 à 18 h 29 min dans les catégories : IDE Emacs

Dans cette section, je vais essayer de vous faire partager mes découvertes sur Emacs.

En guise d'introduction à Emacs, voici un petit texte parlant du language fonctionnel qu'utilise celui-ci : le Elisp.

Malheureusement, alors que les langages de programmation gagnent en
sophistication, ils sont de plus en plus le reflet de la complexité
de la société humaine et du monde immense des applications logicielles.
Ainsi, ils deviennent d'énormes boîtes à outils, comme des garages
et des greniers chargés de plus de trente ans d'histoire ! A contrario,
LISP est un langage de programmation d'une grande beauté mathématique ;
il ressemble plus à un scalpel de chirurgien ou à un diamant affûté
qu'à un garage à deux places encombrés de bricolages, où il ne reste
plus de place pour une voiture.

LISP a un petit nombre de concepts élémentaires puissants, et tout le reste
est construit au-dessus de ça, ce qui correspond à la façon de travailler
des mathématiciens ; c'est à ça que ressemblent les théories mathématiques.
Ces théories, les bonnes théories, consistent à définir quelques nouveaux
concepts clefs, et à partir de là le feu d'artifice commence : elles
révèlent de nouvelles allées, elles ouvrent la porte à des mondes
radicalement nouveaux. LISP est comme ça aussi ; il est plus proche des
maths que la plupart des langages de programmation. Du moins si vous
éliminez les parties utiles qui ont été ajoutées, les ajouts qui ont
fait de LISP un outil pratique. Ce qui reste si vous faites cela, c'est
le LISP original, le cœur conceptuel de LISP, un cœur qui est un joyau
de beauté mathématique et de beauté intellectuelle austère.

Obtenir un calendrier au format paysage

Vous le saviez peut-être déjà, Emacs permet de générer des calendriers, sur lesquels vous inscrivez vos rendez-vous. Il génère aussi ceux-ci au format LaTeX, mais la sortie n'est pas adaptée à notre format 21x29,7. De même, la sortie LaTeX ne gêre pas l'UTF-8.

J'ai donc sorti un petit hook perso pour cela, dans la routine nommée beau-calendrier. Le reste n'a que peu d'importance si ce n'est de changer le comportement du calendrier d'Emacs par défaut pour qu'il s'adapte au Français.

Il reste cependant un problème de taille : celui-ci modifie aussi la sortie des autres calendriers !

;; === DATES-HEURES-CALENDRIER hhh ===
;; ===================================
;; Heure-Dates
;; La semaine commence le lundi
(setq calendar-week-start-day 1)
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(display-time)
;; vacances
(setq mark-holidays-in-calendar t
      general-holidays nil
      hebrew-holidays nil
      islamic-holidays nil
      bahai-holidays nil
      oriental-holidays nil)
(setq local-holidays
      '((holiday-fixed 5 1 "Fête du travail")
        (holiday-fixed 5 8 "Victoire 1945")
        (holiday-fixed 7 14 "Fête nationale")
        (holiday-fixed 8 15 "Assomption")
        (holiday-fixed 11 1 "Toussaint")
        (holiday-fixed 11 11 "Armistice 1918")
        (holiday-float 5 0 2 "Fête des mères")
        (holiday-float 6 0 3 "Fête des pères")))

;; voir les entrees de diary dans LaTeX calendar
(setq cal-tex-diary t)

;; calendrier Français
(setq european-calendar-style 't)
(setq calendar-week-start-day 1)
(setq calendar-day-name-array
["Dimanche" "Lundi" "Mardi" "Mercredi" "Jeudi" "Vendredi" "Samedi"])
(setq calendar-month-name-array
["Janvier" "Février" "Mars" "Avril" "Mai" "Juin" "Juillet"
"Août" "Septembre" "Octobre" "Novembre" "Décembre"])

;; fancy diary display
(add-hook 'diary-display-hook 'fancy-diary-display)

;; LaTeX calendar hook
 (add-hook 'cal-tex-hook 'beau-calendrier)

 (defun beau-calendrier ()
   "Se charge d'ajouter des options après avoir trouvé la ligne \\documentclass."
   (goto-char (point-min))
   (search-forward-regexp "^\\\\documentclass" 500)
   (beginning-of-line 2)
   (insert "\\usepackage{ucs}\n")
   (insert "\\usepackage[utf8]{inputenc}\n")
   (insert "\\usepackage[dvips,a4paper,landscape,margin=8mm]{geometry}\n")
   )
;; === FIN DATES-HEURES-CALENDRIER ===

Obtenir un calendrier au format HTML

C'est sur le wiki d'Emacs que j'ai fait cette découverte. On peut aussi générer un calendrier au format HTML grâce à un paquet nommé cal_html .

Il suffit de placer celui-ci dans votre path Emacs, et enfin d'ajouter ces quelques lignes à votre .emacs :

;; ==== HTML Calendar ====
(autoload 'cal-html-cursor-month "cal-html.el" "cal-html loaded" 't)
(autoload 'cal-html-cursor-year  "cal-html.el" "cal-html loaded" 't)
(require 'calendar)
(define-key calendar-mode-map "Hm" 'cal-html-cursor-month)
(define-key calendar-mode-map "Hy" 'cal-html-cursor-year)

Placez-vous alors sur une date, suivi d'une combinaison de touches "Hm" pour obtenir une sortie mensuelle ou "Hy" pour une annuelle, Emacs vous demandera alors où vous désirez l'enregister.

Sachez enfin que l'on peut modifier le style de la sortie en ajoutant sa propre feuille de style css à partir du moment ou celle-ci se nomme 'cal.css'

Les numéros de lignes

On est en droit de se demander ou Emacs les a placés. Normal : il n'y en a pas par défaut. Si comme moi cela vous chagrine, vous pouvez toujours afficher le numéro de ligne/colonne en cours, mais il y a mieux : le paquet linum ! Il suffit d'ajouter ceci à votre .emacs :

;; ===== NUMEROS DE LIGNES =====
(require 'linum)
(global-linum-mode 1) ;; lignes visibles ds tous les modes

Retirez la troisième ligne si vous ne désirez pas les faire apparaître tout le temps. Dans ce cas, pour les rendre à nouveau visibles, tapez "M-x global-linum-mode" et le tour est joué !

A l'intérieur d'Emacs

Saviez-vous qu'une thèse à été produite et avait pour thème principal l'implémentation d'Emacs ? Autant vous prévenir de suite, la lecture n'est pas des plus simples, mais elle vaut le détour. Elle est disponible aux formats HTML, PostScript ou LaTeX.

Commentaires (Voir)