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

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

7 réponses
Avatar
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 \$_=\$_{\$_};"

7 réponses

Avatar
Lucas Levrel
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
Avatar
Yves Pointin
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 $_=$_{$_};"
Avatar
Lucas Levrel
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
Avatar
Gilles COSTA
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
Avatar
Yves Pointin
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 $_=$_{$_};"
Avatar
Lucas Levrel
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
Avatar
Vincent Belaïche

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.