Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Raccourcis clavier avec action différente selon mode

32 réponses
Avatar
Astier
Bonjour,

Apr=E8s avoir utilis=E9 Emacs pour r=E9diger du code LaTeX avec AucTeX, je
viens de me mettre au HTML avec l'aide du html-helper-mode charg=E9
ainsi (si =E7a peut servir pour la suite) :

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;;HTML
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-
mode-alist))
(setq html-helper-do-write-file-hooks t)
(setq html-helper-build-new-buffer t)
; Utiliser le menu expert
(setq html-helper-use-expert-menu t)
; Indenter automatiquement lorsque l'on appuie sur entr=E9e
(defun my-html-helper-load-hook ()
(define-key html-mode-map (kbd "RET") 'newline-and-indent))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Dans mon .emacs, j'avais fait quelques modifications au niveau des
raccourcis clavier notamment en ce qui concerne l'automatisation des
guillemets fran=E7ais (\og \fg avec l'extension french de babel) :

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
(defun insert-french-quotes () "insert french quotes and go between
them" (interactive)
(insert "\\og \\fg{}")
(backward-char 5))
(global-set-key (kbd "M-\"") 'insert-french-quotes)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Pour le HTML, j'ai attribu=E9 un autre raccourci clavier pour les
guillemets fran=E7ais : « » avec espace ins=E9cable ainsi :

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
(defun insert-html-french-quotes () "insert french quotes in html and
go between" (interactive)
(insert "\« \ »")
(backward-char 13))
(global-set-key (kbd "C-\"") 'insert-html-french-quotes)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Je viens =E0 vous afin de savoir s'il =E9tait possible de faire en sorte
qu'un m=EAme raccourci clavier puisse produire une action diff=E9rente
selon le mode dans lequel on se trouve : ainsi, le raccourci clavier
C-" pourrait produire des guillemets fran=E7ais que l'on soit en latex
ou en html. Je suppose que pour ce faire il faut mettre en place une
sorte de "condition" mais mes recherches ne m'ont pas vraiment
renseign=E9 :/


Merci, =E0 bient=F4t.

10 réponses

1 2 3 4
Avatar
Jacques L'helgoualc'h
Le 15-09-2008, Paul Gaborit a écrit :
À (at) Mon, 15 Sep 2008 07:56:37 +0000 (UTC),
Jacques L'helgoualc'h <"lhh+news,no_spam"@free.fr.isnt.invalid> écrivait (wrote):


[...]
Et puis, au final, quand rien ne va plus, on peut toujours faire appel
à 'viper' ! ;-)



Pour moi, c'est plutôt là que rien ne va plus :)

À propos de préfixe, sur mon portable j'ai juste à droite de AltGr la
touche « Exposant 2 » qui serait bien placée pour devenir un préfixe ou
modifieur supplémentaire, mais je n'y arrive pas avec AUCTeX/Emacs ?



(Bizarre cette disposition de clavier...)



L'alphabet y a gardé sa taille normale, mais tout autour il a fallu y
aller au chausse-pied.

Si je me souviens bien, pour transformer une touche en préfixe, dans
la keymap courant il faut l'associer avec une nouvelle keymap. Je ne
me souviens plus des commandes exactes pour le faire...



Non, mon problème semble venir du fait que ce n'est pas un caractère
ascii... ça a eu marché (avec emacs 20, si je me souviens bien), et il
en reste quelques traces sur ce portable :

;; Auctex - math-abbrev-prefix = ² (kbd "²")
;; (setq LaTex-math-abbrev-prefix [2226])
;; ; LaTeX-math-abbrev-prefix [?262])

character: ² (04262, 2226, 0x8b2)
charset: latin-iso8859-1 (Right-Hand Part of Latin Alphabet 1 (ISO/IEC 8859-1): ISO-IR-100)
code point: 50
syntax: word
category: l:Latin
buffer code: 0x81 0xB2
file code: B2 (encoded by coding system iso-latin-1-unix)
font: -Misc-Fixed-Medium-R-Normal--15-140-75-75-C-90-ISO8859-1

Bon, il est peut-être plus simple d'en faire une touche Hyper sous X...
(j'aurais aimé garder le « ² » par C-q ou en redoublant la frappe).
--
Jacques L'helgoualc'h
Avatar
Brice Boucard
Jacques L'helgoualc'h a écrit :
Le 14-09-2008, Brice Boucard a écrit :
Bonjour,



bonsoir,

[...]
;;--------------------------------------------------------------------------------
;; raccourcis clavier
;;--------------------------------------------------------------------------------

;(global-set-key [f2] 'save-buffer)
;(global-set-key [f3] 'find-file)
;(global-set-key [f4] 'kill-this-buffer)
;(global-set-key [f9] 'compile)
;(global-set-key [(control z)] 'undo)
;(global-set-key [(meta g)] 'goto-line)



Remarque en passant : en principe, les raccourcis laissés libres pour
l'utilisateur sont (sauf erreur ou changement)

-- les touches F5 à F9 ;

-- les combinaisons C-c <lettre>.

Par exemple, si je tape C-u C-h c C-z, j'obtiens :

`C-z' (`iconify-or-deiconify-frame')

qui montre que Ctrl-z est déjà pris...




En même temps, c'est commenté. Et je pense même ne m'en être jamais servi.

[...]
Mais lorsque je lance Emacs, j'obtiens un message d'erreur :

An error has occurred while loading `/home/bbrice/.emacs':

Symbol's value as variable is void: LaTeX-mode-map


Et là, je comprends que je n'ai pas dû tout comprendre :-(



Ta ligne

(define-key LaTeX-mode-map (kbd "M-"") 'texfrguill)



est exécutée au chargement de ton ~/.emacs, avant celui d'AUCTeX qui
définit le LaTeX-mode : dans mon code, elle est dans le corps d'une
fonction (cf. l'indentation), qui n'est pas appelée tout de suite
(eval-*after*-load ...)




Alors justement, j'ai essayé de faire ça :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(require 'tex-site)

(defun my-LaTeX-init ()
"Définition pour le LaTeX-mode"
(setq-default
TeX-auto-save t
TeX-PDF-mode t
TeX-output-view-style (quote (("^pdf$" "." "kpdf %o")))
)
)

(defun texfrguill ()
(interactive)
(insert "og fg{}")
(backward-char 5)
)

(defun my-label ()
"Ouvre un label"
(interactive)
(forward-char)
(backward-word 1)
(insert "label{}")
(backward-char 1))

(defun my-latex-keys()
(define-key LaTeX-mode-map (kbd "M-"") 'texfrguill)
(define-key LaTeX-mode-map (kbd "C-c l") 'my-label)
)

(my-latex-keys)

(eval-after-load "latex" '(my-LaTeX-init))

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Et j'obtiens le même message d'erreur. J'ai reregardé votre emacs.el et
je ne vois pas ce qui différencie nos deux fichiers à ce niveau là --- à
moins que je ne sois vraiment aveugle.



[...]

Pourrais-tu à la rigueur poster tes fichiers de configuration, peut-être
y verrais-je plus clair ?



C'est un peu trop bordélique, je t'envoie mes ~/.elisp23/*.el en MP...




Encore merci :)

A+
Avatar
Jacques L'helgoualc'h
Le 16-09-2008, Brice Boucard a écrit :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(require 'tex-site)

(defun my-LaTeX-init ()
"Définition pour le LaTeX-mode"
(setq-default
TeX-auto-save t
TeX-PDF-mode t
TeX-output-view-style (quote (("^pdf$" "." "kpdf %o")))
)
)


; ^
; ferme le « (defun ... » ci-dessus.

[...]
(defun my-latex-keys()
(define-key LaTeX-mode-map (kbd "M-"") 'texfrguill)
(define-key LaTeX-mode-map (kbd "C-c l") 'my-label)
)

(my-latex-keys)

(eval-after-load "latex" '(my-LaTeX-init))

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Et j'obtiens le même message d'erreur. J'ai reregardé votre emacs.el et
je ne vois pas ce qui différencie nos deux fichiers à ce niveau là --- à
moins que je ne sois vraiment aveugle.



Ici, l'appel (my-latex-keys) n'est pas à l'intérieur de la définition de
fonction (defun my-LaTeX-init ...), et modifie donc la LaTeX-mode-map
encore inconnue.

Après avoir positionné le curseur avant une parenthèse ouvrante, C-M-n
saute à la fermante correspondante, et C-M-p revient à l'ouvrante ; on
peut aussi activer « paren » pour illuminer les paires sous le curseur,
et/ou utiliser l'indentation du code.
--
Jacques L'helgoualc'h
Avatar
Brice Boucard
Jacques L'helgoualc'h a écrit :
Le 16-09-2008, Brice Boucard a écrit :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(require 'tex-site)

(defun my-LaTeX-init ()
"Définition pour le LaTeX-mode"
(setq-default
TeX-auto-save t
TeX-PDF-mode t
TeX-output-view-style (quote (("^pdf$" "." "kpdf %o")))
)
)


; ^
; ferme le « (defun ... » ci-dessus.




La parenthèse fermante était bien présente (celle en début de ligne isolée).

[...]
(defun my-latex-keys()
(define-key LaTeX-mode-map (kbd "M-"") 'texfrguill)
(define-key LaTeX-mode-map (kbd "C-c l") 'my-label)
)

(my-latex-keys)

(eval-after-load "latex" '(my-LaTeX-init))

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Et j'obtiens le même message d'erreur. J'ai reregardé votre emacs.el et
je ne vois pas ce qui différencie nos deux fichiers à ce niveau là --- à
moins que je ne sois vraiment aveugle.



Ici, l'appel (my-latex-keys) n'est pas à l'intérieur de la définition de
fonction (defun my-LaTeX-init ...), et modifie donc la LaTeX-mode-map
encore inconnue.



Ok... Voilà qui est réglé : (my-latex-keys) est appelée dans la fonction
LaTeX-init et je n'ai plus de message d'erreur. Merci d'ailleurs pour
le raccourci pour le label :-)

Du coup, je me suis repenché sur le mode html et en essayant de
m'inspirer de ce que l'on a pour LaTeX :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist (cons '(".html?$" . html-helper-mode)
auto-mode-alist))

(defun htmlfrguill ()
(interactive)
(insert "&laquo;&nbsp;&nbsp;&raquo;")
(backward-char 13))


(defun my-html-init ()
"Définition pour le LaTeX-mode"
(setq-default
html-helper-do-write-file-hooks t
html-helper-build-new-buffer t
html-helper-use-expert-menu t)
(my-html-keys))

(defun my-html-keys()
(define-key html-helper-mode-map (kbd "M-"") 'htmlfrguill)
(define-key html-helper-mode-map (kbd "RET") 'newline-and-indent))

(eval-after-load "html" '(my-html-init))

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Mais j'obtiens un M-" undefined lorsque j'essaye de l'utiliser dans un
fichier HTML. Suite à quelques recherches on the oueb, j'ai essayé de
faire ainsi :

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist (cons '(".html?$" . html-helper-mode)
auto-mode-alist))


(add-hook 'html-helper-mode-hook 'my-html-init)

(defun htmlfrguill ()
(interactive)
(insert "&laquo;&nbsp;&nbsp;&raquo;")
(backward-char 13))

(defun my-html-init ()
(interactive)
"Définition pour le html-helper-mode"
(setq-default
html-helper-do-write-file-hooks t
html-helper-build-new-buffer t
html-helper-use-expert-menu t
(define-key html-helper-mode-map (kbd "M-"") 'htmlfrguill)
(define-key html-helper-mode-map (kbd "RET") 'newline-and-indent)))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mais je me heurte au même message du sieur Emacs :-( Voyez-vous pourquoi ?


Après avoir positionné le curseur avant une parenthèse ouvrante, C-M-n
saute à la fermante correspondante, et C-M-p revient à l'ouvrante ; on
peut aussi activer « paren » pour illuminer les paires sous le curseur,
et/ou utiliser l'indentation du code.



paren était bien activé et ne me montrait guère d'erreur. Cependant, je
ne connaissais pas ces raccourcis, merci.

Merci, à bientôt.
Avatar
Jacques L'helgoualc'h
Le 16-09-2008, Brice Boucard a écrit :
Jacques L'helgoualc'h a écrit :


[...]
Du coup, je me suis repenché sur le mode html et en essayant de
m'inspirer de ce que l'on a pour LaTeX :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist (cons '(".html?$" . html-helper-mode)
auto-mode-alist))



Un

(add-to-list 'auto-mode-alist '(".html?$" . html-helper-mode))

éviterait d'ajouter plusieurs fois la même chose dans la liste.


(defun htmlfrguill ()
(interactive)
(insert "&laquo;&nbsp;&nbsp;&raquo;")
(backward-char 13))


(defun my-html-init ()
"Définition pour le LaTeX-mode"
(setq-default
html-helper-do-write-file-hooks t
html-helper-build-new-buffer t
html-helper-use-expert-menu t)
(my-html-keys))

(defun my-html-keys()
(define-key html-helper-mode-map (kbd "M-"") 'htmlfrguill)
(define-key html-helper-mode-map (kbd "RET") 'newline-and-indent))

(eval-after-load "html" '(my-html-init))

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Mais j'obtiens un M-" undefined lorsque j'essaye de l'utiliser dans un
fichier HTML.



Est-ce que ton buffer est bien en « html-helper-mode » ? (cf. la modeline).
Si non, c'est que les fonctions my-html-init et my-html-keys n'ont pas
été exécutées...

Le fichier html-helper-mode.el est bien dans ton load-path ? (sinon, tu
devrais avoir un message d'erreur à l'ouverture d'un fichier.html).

As-tu aussi un fichier html.el, aussi chargé quand tu passes en
html-helper-mode ?

(eval-after-load "html-helper-mode" '(my-html-init))

change-t-il quelque chose ?

Suite à quelques recherches on the oueb, j'ai essayé de
faire ainsi :

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist (cons '(".html?$" . html-helper-mode)
auto-mode-alist))


(add-hook 'html-helper-mode-hook 'my-html-init)

(defun htmlfrguill ()
(interactive)
(insert "&laquo;&nbsp;&nbsp;&raquo;")
(backward-char 13))

(defun my-html-init ()
(interactive)
"Définition pour le html-helper-mode"
(setq-default
html-helper-do-write-file-hooks t
html-helper-build-new-buffer t
html-helper-use-expert-menu t
(define-key html-helper-mode-map (kbd "M-"") 'htmlfrguill)
(define-key html-helper-mode-map (kbd "RET") 'newline-and-indent)))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mais je me heurte au même message du sieur Emacs :-( Voyez-vous pourquoi ?



Bon, à première vue tu as substitué le code de la fonction my-html-keys
à son appel --- ce qui ne change rien ---, et remplacé par un hook le
eval-after-load...

... Mais tu as inséré les deux lignes (define-key ...) /dans/ le
(setq-default ...) !


Après avoir positionné le curseur avant une parenthèse ouvrante, C-M-n
saute à la fermante correspondante, et C-M-p revient à l'ouvrante ; on
peut aussi activer « paren » pour illuminer les paires sous le curseur,
et/ou utiliser l'indentation du code.



paren était bien activé et ne me montrait guère d'erreur.



Ce n'était pas une erreur de syntaxe, mais de sémantique...
--
Jacques L'helgoualc'h
Avatar
Brice Boucard
Jacques L'helgoualc'h a écrit :
Le 16-09-2008, Brice Boucard a écrit :
Jacques L'helgoualc'h a écrit :


[...]
Du coup, je me suis repenché sur le mode html et en essayant de
m'inspirer de ce que l'on a pour LaTeX :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist (cons '(".html?$" . html-helper-mode)
auto-mode-alist))



Un

(add-to-list 'auto-mode-alist '(".html?$" . html-helper-mode))

éviterait d'ajouter plusieurs fois la même chose dans la liste.



Alors c'est ce que j'avais fait à la base, mais j'ai repris ce qui
apparaît dans la documentation de html-helper-mode
(http://www.santafe.edu/~nelson/tools/)



(defun htmlfrguill ()
(interactive)
(insert "&laquo;&nbsp;&nbsp;&raquo;")
(backward-char 13))


(defun my-html-init ()
"Définition pour le LaTeX-mode"
(setq-default
html-helper-do-write-file-hooks t
html-helper-build-new-buffer t
html-helper-use-expert-menu t)
(my-html-keys))

(defun my-html-keys()
(define-key html-helper-mode-map (kbd "M-"") 'htmlfrguill)
(define-key html-helper-mode-map (kbd "RET") 'newline-and-indent))

(eval-after-load "html" '(my-html-init))

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Mais j'obtiens un M-" undefined lorsque j'essaye de l'utiliser dans un
fichier HTML.



Est-ce que ton buffer est bien en « html-helper-mode » ? (cf. la modeline).
Si non, c'est que les fonctions my-html-init et my-html-keys n'ont pas
été exécutées...



Alors, lorsque j'ouvre un fichier HTML, le html-helper-mode se lance
bien comme l'indique le buffer *Messages* (Loading
html-helper-mode...done). De plus, la touche RET fait bien ce qui est
demandé : retour chariot + indentation automatique. Cependant, le
raccourci M-" ne fonctionne pas :/

Le fichier html-helper-mode.el est bien dans ton load-path ? (sinon, tu
devrais avoir un message d'erreur à l'ouverture d'un fichier.html).



Sous debian, on trouve le html-helper-mode dans les dépôts, donc je
pense qu'il y ait de problème de ce côté-là.

As-tu aussi un fichier html.el, aussi chargé quand tu passes en
html-helper-mode ?



Je ne pense pas, en tout cas cela n'apparaît pas --- à moins que je ne
le vois pas :/

(eval-after-load "html-helper-mode" '(my-html-init))

change-t-il quelque chose ?



En effet, ainsi cela semble marcher parfaitement :-)

Suite à quelques recherches on the oueb, j'ai essayé de
faire ainsi :

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist (cons '(".html?$" . html-helper-mode)
auto-mode-alist))


(add-hook 'html-helper-mode-hook 'my-html-init)

(defun htmlfrguill ()
(interactive)
(insert "&laquo;&nbsp;&nbsp;&raquo;")
(backward-char 13))

(defun my-html-init ()
(interactive)
"Définition pour le html-helper-mode"
(setq-default
html-helper-do-write-file-hooks t
html-helper-build-new-buffer t
html-helper-use-expert-menu t
(define-key html-helper-mode-map (kbd "M-"") 'htmlfrguill)
(define-key html-helper-mode-map (kbd "RET") 'newline-and-indent)))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mais je me heurte au même message du sieur Emacs :-( Voyez-vous pourquoi ?



Bon, à première vue tu as substitué le code de la fonction my-html-keys
à son appel --- ce qui ne change rien ---, et remplacé par un hook le
eval-after-load...

... Mais tu as inséré les deux lignes (define-key ...) /dans/ le
(setq-default ...) !




Oups....

Bon doc cela marche parfaitement dorénavant. Petit dernier souci, j'ai
essayé d'attribuer au raccourci M-espace la fonction htmlespaceins comme
ceci :

(define-key html-helper-mode-map (kbd "M- ") 'htmlespaceins)

à l'intérieur de la fonction my-html-keys qui renvoie donc à

(defun htmlespaceins ()
(interactive)
(insert "&nbsp;"))

mais le raccourci est sans effet --- j'ai désactivé le raccourci
Metacity qui ouvre le menu de la fenêtre. J'ai essayé de remplacer
l'espace par SPACE ou ESPC mais là emacs me hurle que ce qui suit M-
doit être un caractère unique. J'ai essayé "M- ", "M-"ESPC"",
"M-ESPC"... sans succès --- je m'y attendais un peu :-/ Je suppose donc
que je m'y prends très mal. J'ai fouillé un peu sur le web mais n'ai pas
trouvé des exemples d'assignation de raccourci comprenant la touche
espace. Une idée ?

Merci, à bientôt.
Avatar
Jacques L'helgoualc'h
Le 17-09-2008, Brice Boucard a écrit :
Jacques L'helgoualc'h a écrit :
Le 16-09-2008, Brice Boucard a écrit :
[...]
Du coup, je me suis repenché sur le mode html et en essayant de
m'inspirer de ce que l'on a pour LaTeX :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist (cons '(".html?$" . html-helper-mode)
auto-mode-alist))



Un

(add-to-list 'auto-mode-alist '(".html?$" . html-helper-mode))

éviterait d'ajouter plusieurs fois la même chose dans la liste.



Alors c'est ce que j'avais fait à la base, mais j'ai repris ce qui
apparaît dans la documentation de html-helper-mode
(http://www.santafe.edu/~nelson/tools/)



Le « (setq list (cons ... list)) » est assez ancien --- cela fait déjà
longtemps que j'avais vu recommander add-to-list sur gnu.emacs.help.

[...]

Petit dernier souci, j'ai essayé d'attribuer au raccourci M-espace la
fonction htmlespaceins comme ceci :

(define-key html-helper-mode-map (kbd "M- ") 'htmlespaceins)

à l'intérieur de la fonction my-html-keys qui renvoie donc à

(defun htmlespaceins ()
(interactive)
(insert "&nbsp;"))

mais le raccourci est sans effet --- j'ai désactivé le raccourci
Metacity qui ouvre le menu de la fenêtre. J'ai essayé de remplacer
l'espace par SPACE ou ESPC mais là emacs me hurle que ce qui suit M-
doit être un caractère unique. J'ai essayé "M- ", "M-"ESPC"",
"M-ESPC"... sans succès --- je m'y attendais un peu :-/ Je suppose donc
que je m'y prends très mal. J'ai fouillé un peu sur le web mais n'ai pas
trouvé des exemples d'assignation de raccourci comprenant la touche
espace. Une idée ?



(kbd "M-SPC")


Pour le trouver,

1/ C-h c <ton_raccourci>

te dit quelle est sa valeur actuelle ;

2/ C-h l

« view-lossage » te donne les dernières frappes vues par Emacs ;

3/ Tu copies en argument de (kbd "???") ce qui apparaît entre les derniers
"C-h c " et " C-h l"...

4/ Je teste avec C-x C-e M-SPC sous la ligne

(local-set-key (kbd "M-SPC") 'insert-long-date)
date '+mercredi 17 septembre 2008, à 15:23'

Merci,



de rien,
--
Jacques L'helgoualc'h
Avatar
Brice Boucard
Jacques L'helgoualc'h a écrit :
Le 17-09-2008, Brice Boucard a écrit :
Jacques L'helgoualc'h a écrit :
Le 16-09-2008, Brice Boucard a écrit :
[...]
Du coup, je me suis repenché sur le mode html et en essayant de
m'inspirer de ce que l'on a pour LaTeX :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist (cons '(".html?$" . html-helper-mode)
auto-mode-alist))


Un

(add-to-list 'auto-mode-alist '(".html?$" . html-helper-mode))

éviterait d'ajouter plusieurs fois la même chose dans la liste.


Alors c'est ce que j'avais fait à la base, mais j'ai repris ce qui
apparaît dans la documentation de html-helper-mode
(http://www.santafe.edu/~nelson/tools/)



Le « (setq list (cons ... list)) » est assez ancien --- cela fait déjà
longtemps que j'avais vu recommander add-to-list sur gnu.emacs.help.



Je vais donc modifier cette partie en conséquence, en prenant en compte
également les extensions .htm.

[...]

Petit dernier souci, j'ai essayé d'attribuer au raccourci M-espace la
fonction htmlespaceins comme ceci :

(define-key html-helper-mode-map (kbd "M- ") 'htmlespaceins)

à l'intérieur de la fonction my-html-keys qui renvoie donc à

(defun htmlespaceins ()
(interactive)
(insert "&nbsp;"))

mais le raccourci est sans effet --- j'ai désactivé le raccourci
Metacity qui ouvre le menu de la fenêtre. J'ai essayé de remplacer
l'espace par SPACE ou ESPC mais là emacs me hurle que ce qui suit M-
doit être un caractère unique. J'ai essayé "M- ", "M-"ESPC"",
"M-ESPC"... sans succès --- je m'y attendais un peu :-/ Je suppose donc
que je m'y prends très mal. J'ai fouillé un peu sur le web mais n'ai pas
trouvé des exemples d'assignation de raccourci comprenant la touche
espace. Une idée ?



(kbd "M-SPC")



En effet, maintenant ça marche farpaitement. Reste à faire de même pour
LaTeX, en ajoutant l'espace fine.

Pour le trouver,

1/ C-h c <ton_raccourci>

te dit quelle est sa valeur actuelle ;

2/ C-h l

« view-lossage » te donne les dernières frappes vues par Emacs ;

3/ Tu copies en argument de (kbd "???") ce qui apparaît entre les derniers
"C-h c " et " C-h l"...

4/ Je teste avec C-x C-e M-SPC sous la ligne

(local-set-key (kbd "M-SPC") 'insert-long-date)
date '+mercredi 17 septembre 2008, à 15:23'



J'ai bien compris les trois premières étapes, mais cette dernière me
reste parfaitement obscure, C-x C-e m'envoyant dans le debugger.

Merci,



de rien,



si, si j'insiste :-)
Avatar
Jacques L'helgoualc'h
Le 17-09-2008, Brice Boucard a écrit :
Jacques L'helgoualc'h a écrit :


[...]
Le « (setq list (cons ... list)) » est assez ancien --- cela fait déjà
longtemps que j'avais vu recommander add-to-list sur gnu.emacs.help.



Je vais donc modifier cette partie en conséquence, en prenant en compte
également les extensions .htm.



C'est déjà le cas :) --- la chaîne ".html?$" est une regexp, où le
« l » final est facultatif...

On peut écrire ".(html?|php)$" pour réunir plusieurs extensions,
mais ce sera peut-être plus lisible avec des éléments séparés ---
d'autant que la chasse aux doublons ne fonctionnera sans doute pas si on
permute deux extensions dans la regexp.


[...]
4/ Je teste avec C-x C-e M-SPC sous la ligne

(local-set-key (kbd "M-SPC") 'insert-long-date)
date '+mercredi 17 septembre 2008, à 15:23'



J'ai bien compris les trois premières étapes, mais cette dernière me
reste parfaitement obscure, C-x C-e m'envoyant dans le debugger.



`C-x C-e' (`eval-last-sexp')

Le raccourci C-x C-e interprète la dernière expression Elisp avant le
curseur : il faut le positionner juste après la parenthèse finale(*), ou
au début de la ligne d'en dessous ; des espaces ne gênent pas non plus,
mais les chevrons de citation, si.

(* : là où paren illumine la paire de parenthèses).
--
Jacques L'helgoualc'h
Avatar
Brice Boucard
Jacques L'helgoualc'h a écrit :
Le 17-09-2008, Brice Boucard a écrit :
Jacques L'helgoualc'h a écrit :


[...]
Le « (setq list (cons ... list)) » est assez ancien --- cela fait déjà
longtemps que j'avais vu recommander add-to-list sur gnu.emacs.help.



Je vais donc modifier cette partie en conséquence, en prenant en compte
également les extensions .htm.



C'est déjà le cas :) --- la chaîne ".html?$" est une regexp, où le
« l » final est facultatif...




Très bien. D'où le caractère ?
On peut écrire ".(html?|php)$" pour réunir plusieurs extensions,
mais ce sera peut-être plus lisible avec des éléments séparés ---
d'autant que la chasse aux doublons ne fonctionnera sans doute pas si on
permute deux extensions dans la regexp.



Oui, une ligne par extension est bien plus lisible.

[...]
4/ Je teste avec C-x C-e M-SPC sous la ligne

(local-set-key (kbd "M-SPC") 'insert-long-date)
date '+mercredi 17 septembre 2008, à 15:23'


J'ai bien compris les trois premières étapes, mais cette dernière me
reste parfaitement obscure, C-x C-e m'envoyant dans le debugger.



`C-x C-e' (`eval-last-sexp')

Le raccourci C-x C-e interprète la dernière expression Elisp avant le
curseur : il faut le positionner juste après la parenthèse finale(*), ou
au début de la ligne d'en dessous ; des espaces ne gênent pas non plus,
mais les chevrons de citation, si.

(* : là où paren illumine la paire de parenthèses).



Merci pour ces éclaircissements.


Je colle ci-dessous, ce que contient mon ~/.emacs pour ce qui est de
(La)TeX et ispell avec quelques spécifités pour le LaTeX-mode --- que je
n'ai pas encore eu l'occasion de tester --- si cela peut vous intéresser

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;;################################################################################
;; (La)TeX
;;################################################################################

(require 'tex-site)

(defun my-LaTeX-init ()
"Définition pour le LaTeX-mode"
(setq-default
TeX-auto-save t
TeX-PDF-mode t
TeX-output-view-style (quote (("^pdf$" "." "kpdf %o"))))
(my-latex-keys))

(defun texfrguill ()
(interactive)
(insert "og fg{}")
(backward-char 5)
)

(defun my-label ()
"Ouvre un label"
(interactive)
(forward-char)
(backward-word 1)
(insert "label{}")
(backward-char 1))

(defun my-latex-keys()
(define-key LaTeX-mode-map "M-"" 'texfrguill)
(define-key LaTeX-mode-map (kbd "C-c l") 'my-label)
)

(eval-after-load "latex" '(my-LaTeX-init))

;;################################################################################
;; ISPELL / FLYSPELL
;;################################################################################

(setq-default ispell-dictionnary "francais")


;;(set-default 'ispell-local-dictionary "francais")
(require 'flyspell)
(add-hook 'text-mode-hook (lambda () (flyspell-mode 1)))
(setq ispell-skip-sgml t)
(global-set-key [f4] 'flyspell-mode)

;; Empèche Ispell de vérifier le contenu de certaines commandes
(setq ispell-tex-skip-alists
(list
(append (car ispell-tex-skip-alists)
'(("\cite" ispell-tex-arg-end)
("\nocite" ispell-tex-arg-end)
("\includegraphics" ispell-tex-arg-end)
("\figScale" ispell-tex-arg-end)
("\author" ispell-tex-arg-end)
("\ref" ispell-tex-arg-end)
("\eqref" ispell-tex-arg-end)
("\label" ispell-tex-arg-end)
))
(cadr ispell-tex-skip-alists)))

;; Empèche Ispell de vérifier le contenu des citation natbib
(eval-after-load "ispell"
'(let ((list (car ispell-tex-skip-alists)))
(add-to-list 'list '("\cite[tp]" ispell-tex-arg-end))
(setcar ispell-tex-skip-alists list)))

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Encore merci pour votre aide. Me reste maintenant à me pencher sur le
emacsserveur.

A bientôt.
1 2 3 4