OVH Cloud OVH Cloud

Supprimer un sexp ?

4 réponses
Avatar
Xavier Maillard
Bonjour,

Je cherche à pouvoir supprimer une sexp lorsque je fais du lisp
(emacs lisp ou common lisp).

Par exemple dans le code suivant, j'aimerais pouvoir retirer la
sexp (let ...) sans avoir à jouer avec les marks et kill-region:

(defun foo ()
"says bar"
(let (mesg)
X(message "bar")))

L'exemple est nul mais c'est pas ça qui m'interesse. Si je mets
le point là où voit un X, je veux dégager le let et ses
"arguments".

Comment faire ?

Merci
--
Xavier MAILLARD (GnuPG: 1024D/1E028EA5)
EmacsOS user (http://emacsfr.org)
APRIL (http://www.april.org)

4 réponses

Avatar
lhabert
Xavier Maillard :

(defun foo ()
"says bar"
(let (mesg)
X(message "bar")))

L'exemple est nul mais c'est pas ça qui m'interesse. Si je mets
le point là où voit un X, je veux dégager le let et ses
"arguments".



Bah tu as C-M-k pour tuer la sexp qui suit et C-M-backspace (testique, le
pire, c'est j'ai pris l'habitude de m'en servir sur solaris où le serveur X
ne réagit pas au C-M-backspace, résultat, quand je me retrouve sur un PC, je
me fais souvent avoir) celle qui précède. Donc pour ton cas particulier, je
dirais C-M-u C-M-k.
Avatar
lhabert
Tiens, je connaissais pas « thing-at-point ». Ça a l'air bon à connaitre.
Avatar
Xavier Maillard
On 7 Aug 2005, Luc Habert wrote:

Xavier Maillard :

> (defun foo ()
> "says bar"
> (let (mesg)
> X(message "bar")))
>
> L'exemple est nul mais c'est pas ça qui m'interesse. Si je
> mets le point là où voit un X, je veux dégager le let et ses
> "arguments".

Bah tu as C-M-k pour tuer la sexp qui suit et C-M-backspace
(testique, le pire, c'est j'ai pris l'habitude de m'en servir
sur solaris où le serveur X ne réagit pas au C-M-backspace,
résultat, quand je me retrouve sur un PC, je me fais souvent
avoir) celle qui précède. Donc pour ton cas particulier, je
dirais C-M-u C-M-k.



En fait, j'ai trouvé la fonction qui fait exactement ce que je
veux: kill-backward-up-list

=>
(defun kill-backward-up-list (&optional arg)
"Kill the form containing the current sexp, leaving the sexp itself.
A prefix argument ARG causes the relevant number of surrounding
forms to be removed."
(interactive "*p")
(let ((current-sexp (thing-at-point 'sexp)))
(if current-sexp
(save-excursion
(backward-up-list arg)
(kill-sexp)
(insert current-sexp))
(error "Not at a sexp"))))

Particulièrement utile. Par contre je ne l'ai pas trouvé sur mon
Emacs21.3.

A+
--
Xavier Maillard,
Avatar
Xavier Maillard
On 7 aoû 2005, Luc Habert wrote:

Tiens, je connaissais pas « thing-at-point ». Ça a l'air bon à
connaitre.



Ah oui les thing-at-point sont excellentes. En plus on peut s'en
créer de nouvelles, ce qui est vraiment Excellent(tm) !

--
Xavier Maillard,