insérer des parenthèses autour d'un mot

Le
Yves Pointin
Bonjour,

J'avais récupéré (merci au rédacteur dont je n'avais pas noté le nom)
sur ce forum des fonctions pour insérer des parenthèses :

;; On ouvre {([, emacs ferme tout seul.
(defun insert-braces () "insert parentheses and go between them"
(interactive)
(insert "{}")
(backward-char 1))

(global-set-key "{" 'insert-braces)

Cela fonctionne, mais ce que je voudrais c'est :

- si je tape un { juste devant un mot, il me mette } à la fin du mot et
pas juste après {. Il peut rester positionner devant ou derrière le }
ajouté.

- si je tape un { à la fin d'une ligne, ou devant une espace, alors, il
se comporte comme ci-dessus.

Je ne connais pas Lisp et suis incapable de programmer ce langage.

Cordialement,
--
Dr. POINTIN Yves B.
perl -e "$_='.frontermpclv-bunigc.@optinoinY.P';1 while
s/(.{3})(.{3})?/$_{$2}=$1,$2/e; ; print while $_=$_{$_};"
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Lucas Levrel
Le #21769521
Le 20 juillet 2009, Yves Pointin a écrit :
Cela fonctionne, mais ce que je voudrais c'est :

- si je tape un { juste devant un mot, il me mette } à la fin du mot et pas
juste après {. Il peut rester positionner devant ou derrière le } ajouté.

- si je tape un { à la fin d'une ligne, ou devant une espace, alors, il se
comporte comme ci-dessus.

Je ne connais pas Lisp et suis incapable de programmer ce langage.



Bonjour,

Je n'en sais pas beaucoup plus que toi, mais :
- tu devrais aussi préciser le comportement que tu attends si le curseur
est au milieu d'un mot ;
- si tu n'as pas de réponse (mais j'en doute) je pourrai poster mon
réglage qui place automatiquement les parenthèses autour de la sélection
quand il y en a une (ça serait mieux que rien).

--
LL
Yves Pointin
Le #21769511
Lucas Levrel a écrit :
Le 20 juillet 2009, Yves Pointin a écrit :
Cela fonctionne, mais ce que je voudrais c'est :

- si je tape un { juste devant un mot, il me mette } à la fin du mot et pas
juste après {. Il peut rester positionner devant ou derrière le } ajouté.

- si je tape un { à la fin d'une ligne, ou devant une espace, alors, il se
comporte comme ci-dessus.

Je ne connais pas Lisp et suis incapable de programmer ce langage.



Bonjour,

Je n'en sais pas beaucoup plus que toi, mais :
- tu devrais aussi préciser le comportement que tu attends si le curseur
est au milieu d'un mot ;
- si tu n'as pas de réponse (mais j'en doute) je pourrai poster mon
réglage qui place automatiquement les parenthèses autour de la sélection
quand il y en a une (ça serait mieux que rien).



Bonjour,

Non, je n'ai pas de tel besoin, mais effectivement placer
automatiquement des parenthèses autour de la sélection m'intéresse. Que
se passe-t-il si rien n'est sélectionné ?

--
Dr. POINTIN Yves B.
perl -e "$_='';1 while
s/(.{3})(.{3})?/$_{$2}=$1,$2/e; ; print while $_=$_{$_};"
Lucas Levrel
Le #21769501
Le 20 juillet 2009, Yves Pointin a écrit :
Non, je n'ai pas de tel besoin,



Même si tu n'en as pas besoin, si quelqu'un code la fonction qu'il te faut
il lui faudra sûrement savoir quoi faire dans ce cas...

mais effectivement placer automatiquement des parenthèses autour de la
sélection m'intéresse. Que se passe-t-il si rien n'est sélectionné ?



Ça insère une paire avec le curseur au milieu. J'utilise ça en LaTeX-mode,
je te laisse adapter :

(defun my-latex-hook ()
(setq skeleton-pair-alist '((?( _ ?)) (?)); Le ? est la façon Lisp d'entrer
(?[ _ ?]) (?]); un caractère. Le est optionnel.
(?{ _ ?}) (?})
(?$ _ ?$)
(?«?~ _ ?~?») (?»)
(?" -1 ?«?~ _ ?~?»)))
(define-key LaTeX-mode-map (kbd "«") 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map """ 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map "$" 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map "(" 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map "[" 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map "{" 'skeleton-pair-insert-maybe)
)

et

(custom-set-variables
'(skeleton-pair (quote non-nil) t)
'(skeleton-pair-on-word (quote non-nil) t)
)

En fait c'est très configurable et si ça se trouve ça peut faire
exactement ce que tu veux, mais comme je n'en ai pas besoin je ne me suis
jamais posé la question. Regarde dans skeleton.el.


--
LL
Gilles COSTA
Le #21769491
Lucas Levrel a écrit le 20/07/2009 17:30 :
Le 20 juillet 2009, Yves Pointin a écrit :
Non, je n'ai pas de tel besoin,



Même si tu n'en as pas besoin, si quelqu'un code la fonction qu'il te faut
il lui faudra sûrement savoir quoi faire dans ce cas...

mais effectivement placer automatiquement des parenthèses autour de la
sélection m'intéresse. Que se passe-t-il si rien n'est sélectionné ?



Ça insère une paire avec le curseur au milieu. J'utilise ça en LaTeX-mode,
je te laisse adapter :

(defun my-latex-hook ()
(setq skeleton-pair-alist '((?( _ ?)) (?)); Le ? est la façon Lisp d'entrer
(?[ _ ?]) (?]); un caractère. Le est optionnel.
(?{ _ ?}) (?})
(?$ _ ?$)
(?«?~ _ ?~?») (?»)
(?" -1 ?«?~ _ ?~?»)))
(define-key LaTeX-mode-map (kbd "«") 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map """ 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map "$" 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map "(" 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map "[" 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map "{" 'skeleton-pair-insert-maybe)
)

et

(custom-set-variables
'(skeleton-pair (quote non-nil) t)
'(skeleton-pair-on-word (quote non-nil) t)
)

En fait c'est très configurable et si ça se trouve ça peut faire
exactement ce que tu veux, mais comme je n'en ai pas besoin je ne me suis
jamais posé la question. Regarde dans skeleton.el.





Un exemple tiré d'un mode pour XEmacs, développé avec de l'aide d'ici...

(defun ascodes-parentheses ()
"inserre une paire de parentheses"
(interactive)
(if ascodes-mode-electrique
(progn (if (ascodes-region-active) ;on a affaire a une region
(progn (save-excursion
(if (> (point) (mark)) (exchange-point-and-mark))
(insert "(")
(exchange-point-and-mark)
(insert ")")))
(progn (insert "()") (backward-char))
)
)
(insert "(")
)
)


ascodes-mode-electrique est une variable qui permet de configurer le
comportement du mode et ascodes-region-active une fonction qui détermine
si une portion du texte est sélectionnée ou non :

(defvar ascodes-run-xemacs (string-match "XEmacs" emacs-version)
"Vaut t si l'on utilise xemacs nil sinon" )

(defun ascodes-region-active () "Indique s'il y a une region active ou non."
(interactive)
(if ascodes-run-xemacs
(region-active-p)
(eval mark-active)
)
)


En espérant que ça puisse aider.
--
Gilles COSTA, Géomètre-expert
Arkane-foncier, Géomètres-experts associés
17, grande rue, BP 20023 91311 Montlhéry cedex
T : 01.64.49.00.52 - F : 01.64.49.06.64
Yves Pointin
Le #21769481
Lucas Levrel a écrit :

mais effectivement placer automatiquement des parenthèses autour de la
sélection m'intéresse. Que se passe-t-il si rien n'est sélectionné ?



Ça insère une paire avec le curseur au milieu. J'utilise ça en LaTeX-mode,
je te laisse adapter :

(defun my-latex-hook ()
(setq skeleton-pair-alist '((?( _ ?)) (?)); Le ? est la façon Lisp d'entrer
(?[ _ ?]) (?]); un caractère. Le est optionnel.
(?{ _ ?}) (?})
(?$ _ ?$)
(?«?~ _ ?~?») (?»)
(?" -1 ?«?~ _ ?~?»)))
(define-key LaTeX-mode-map (kbd "«") 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map """ 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map "$" 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map "(" 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map "[" 'skeleton-pair-insert-maybe)
(define-key LaTeX-mode-map "{" 'skeleton-pair-insert-maybe)
)

et

(custom-set-variables
'(skeleton-pair (quote non-nil) t)
'(skeleton-pair-on-word (quote non-nil) t)
)

En fait c'est très configurable et si ça se trouve ça peut faire
exactement ce que tu veux, mais comme je n'en ai pas besoin je ne me suis
jamais posé la question. Regarde dans skeleton.el.




Bonjour,

Merci. J'ai retenu cela :

(setq skeleton-pair-alist '((?( _ ?)) (?)); Le ? est la façon Lisp d'entrer
(?[ _ ?]) (?]); un caractère. Le est
optionnel.
(?{ _ ?}) (?}))
)

(global-set-key "(" 'skeleton-pair-insert-maybe)
(global-set-key "[" 'skeleton-pair-insert-maybe)
(global-set-key "{" 'skeleton-pair-insert-maybe)
(global-set-key """ 'skeleton-pair-insert-maybe)

(custom-set-variables
'(skeleton-pair (quote non-nil) t)
'(skeleton-pair-on-word (quote non-nil) t)
);;

Bizarrement, avec une définition similaire pour « j'obtiens ++ .
Pour LaTeX, j'utilise :
(load "auctex.el" nil t t)
(setq TeX-auto-save t)
(setq TeX-parse-self t)

et il ne connait pas LaTeX-mode-map

Cordialement,
--
Dr. POINTIN Yves B.
perl -e "$_='';1 while
s/(.{3})(.{3})?/$_{$2}=$1,$2/e; ; print while $_=$_{$_};"
Lucas Levrel
Le #21769471
Le 21 juillet 2009, Yves Pointin a écrit :

Bizarrement, avec une définition similaire pour « j'obtiens ++ .



Problème d'encodage peut-être ? (mon .emacs est en latin-9)

Pour LaTeX, j'utilise :
(load "auctex.el" nil t t)
(setq TeX-auto-save t)
(setq TeX-parse-self t)

et il ne connait pas LaTeX-mode-map



Moi je ne fais rien de spécial, et tex-site.el est chargé au démarrage
d'emacs. LaTeX-mode-map est défini chez moi dans auctex/latex.el .

--
LL
Vincent Belaïche
Le #21769461

et il ne connait pas LaTeX-mode-map

Cordialement,



Il suffit peut-être d'encapsuler ton code dans un

(eval-after-load "latex"
'(progn
...
))


et effectivement il vaut mieux faire des define-key que des global-set-key,
parce que comme ça tu ne définis les raccourcis clavier que pour une table de
raccourcis.

Vincent.
Publicité
Poster une réponse
Anonyme