Le 12-09-2008, Astie a écrit :
Astier a écrit :
Bonjour,
bonjour,
Désolé de "déterrer" ce topic, mais j'ai pris le temps de me mettre les
mains dans le cambouis.
Pour AucTeX, j'ai un raccourci conditionnel :
(define-key LaTeX-mode-map (kbd "C-c f") 'my-frac-or-foot)
[...]
(defun my-frac-or-foot ()
"Insère une fraction ou une footnote selon le contexte"
(interactive)
(if (texmathp)
(my-fraction)
(my-footnote)))
Donc, si je comprends bien, il faudrait que je fasse un truc dans le genre :
#####
(define-key LaTeX-mode-map (kbd "M-\"") 'franguill')
(define-key html-mode-map (kbd "M-\"") 'franguill')
(defun franguill ()
"Insère des guillemets français"
(interactive)
(insert "\\og \\fg{}")
(backward-char 5))
#####
à moins qu'il faille passer par une condition ?
Heu, la fonction « franguill » est spécifique à (La)TeX, en html il en
faudrait une autre... mon exemple conditionnel concerne deux parties
d'un /même/ buffet en mode LaTeX.
[...] j'utilise un Emacs serveur lancé une fois pour toutes, et
l'appelle par gnuclient : j'ai donc dans mon ~/.xsession une ligne
ok, donc, gnuclient appartient au paquet gnuserv que je viens d'installer.
je suppose que le fichier ~/.xsession est chargé lors du lancement d'une
session graphique ?
Oui.
Si c'est bien le cas, comment cela se passe lorsque
l'on travaille dans les tty ?
ça ne marche pas (avec emacs 21). Il me semble que ça pourrait le faire
avec une version plus récente ?
emacs -iconic -l ~/.elisp21/server.el &
donc on lance un serveur Emacs. Pour lancer emacs par la suite, il
suffit d'appeler emacs ou d'utiliser les lanceurs traditionnels ---
celui de mon tableau de bord correspond à /usr/bin/emacs22 ?
Voilà : un Emacs indépendant ne charge pas le bout de code serveur.
qui charge, après ~/.emacs, le supplément suivant :
,----[ server.el ]
| ;;; serveur de gnuclient
| (when window-system
| (when (fboundp 'gnuserv-start)
| (gnuserv-start)
| (defun adieu ()
| (unless (y-or-n-p "Ça va pas, la tête... ?! ")
| (keyboard-quit)))
| (add-hook 'server-switch-hook
| (lambda ()
| (set-frame-position (make-frame) 0 0)))
| (add-hook 'server-done-hook 'delete-frame)))
`----
et dans mon ~/.emacs, la définition générale d'adieu
(defun adieu ()
(unless (y-or-n-p "Fermer cette instance d'Emacs ?")
(keyboard-quit)))
(add-hook 'kill-emacs-hook
'adieu)
euh... c'est bien un fichier "externe", qui se trouve ici :
~/.elisp21/server.el --- dans mon cas ~/.elisp22/server.el puisque j'ai
emacs22 (ou ça ne change rien) ?
Ça dépend de ce que l'on met dans son ~/.emacs...
J'ai préféré séparer ces répertoires suivant les versions, d'autant que
les *.el doivent être byte-compilés avec la version utilisée.
Mon ~/.emacs, lui, est tout petit, et n'a pas besoin de l'être :
;;; -*-emacs-lisp-*-
(setq debug-on-error t)
(setq message-log-max 300)
(cond
((= emacs-major-version 21) (add-to-list 'load-path (expand-file-name "~/.elisp21")))
((= emacs-major-version 22) (add-to-list 'load-path (expand-file-name "~/.elisp22")))
( t (add-to-list 'load-path (expand-file-name "~/.elisp"))))
(setq custom-file "~/.custom") ;; il faudra sans doute distinguer selon
;; la version aussi...
(if (> emacs-major-version 20)
(load custom-file))
(load-library "emacs") ;; charge un de mes ~/.elisp2?/emacs.el
Tout à la fin de ce(s) dernier(s), j'ai un
(require 'trucs)
qui charge trucs.el, pour éviter de byte-compiler à chaque essai le
fichier principal
De plus, si je me crée plusieurs ~/.emacs --- par exemple ~/.emacstex et
~/.emacshtml, comment faire pour les appeler au juste ? J'ai regardé
dans le man d'emacs et il ne m'a pas semblé voir d'option permettant de
choisir l'init file.
Ben, tu peux utiliser les options
--no-init-file, -q load neither ~/.emacs nor default.el
et
--load, -l FILE load FILE of Emacs Lisp code using the load function
pour charger ~/.montrucenplumes.el, mais pour un mode particulier, le
plus simple est d'avoir des fichiers dédiés, chargés en cas de besoin :
;;; blank-mode
(autoload 'blank-mode "blank-mode"
"Toggle blank visualization." t)
(autoload 'blank-mode-customize "blank-mode"
"Customize blank visualization." t)
(global-set-key [f6] 'blank-mode)
À l'appel d'une des fonctions « 'blank-mode... », le fichier
"blank-mode" (.el, voire .elc) sera chargé (si besoin (et s'il
est trouvé dans le load-path)).
Le « local-set-key » est encore plus spécialisé, il me semble que la
méthode du *-mode-map est mieux adaptée aux raccourcis qui sont définis
une fois pour toutes au premier chargement du mode :
(eval-after-load "latex" '(my-LaTeX-init))
avec mes ajouts de LaTeX-mode-map dans la fonction appelée.
Là j'ai du mal à saisir...
J'ai rassemblé dans la fonction my-LaTeX-init mes nombreuses
définitions, initialisations, etc. ne concernant qu'AUCTeX...
Le « eval-after-load » ne l'exécutera qu'une fois.
Merci pour vos éclaircissements,
De rien, ça me permet de faire améliorer/remplacer mes bouts de code
(souvent pêchés ailleurs...) par les autres contributeurs.
A bientôt.
Au plaisir,
--
Jacques L'helgoualc'h