unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Nicolas Richard <youngfrog@members.fsf.org>
To: Marcin Borkowski <mbork@mbork.pl>
Cc: Help Gnu Emacs mailing list <help-gnu-emacs@gnu.org>
Subject: Re: How to delete the parens around a sexp?
Date: Tue, 22 Sep 2015 12:11:41 +0200	[thread overview]
Message-ID: <87lhby7ogy.fsf@members.fsf.org> (raw)
In-Reply-To: <87vbb23nrn.fsf@mbork.pl> (Marcin Borkowski's message of "Tue, 22 Sep 2015 09:40:28 +0200")

Marcin Borkowski <mbork@mbork.pl> writes:

> Hi list,
>
> I'd like to transform this:
>
> -!-(some gibberish)
>
> into this:
>
> -!-some gibberish

I use the following code, which allows me to delete the brackets (M-D
RET) or replace them by another pair, e.g. square brackets (M-D [).

M-D runs the command yf/replace-or-delete-pair defined as follows:

(defun yf/replace-or-delete-pair (open)
  "Replace pair at point by OPEN and its corresponding closing character.
The closing character is lookup in the syntax table or asked to
the user if not found."
  (interactive
   (list
    (read-char
     (format "Replacing pair %c%c by (or hit RET to delete pair):"
             (char-after)
             (save-excursion
               (forward-sexp 1)
               (char-before))))))
  (if (memq open '(?\n ?\r))
      (delete-pair)
    (let ((close (cdr (aref (syntax-table) open))))
      (when (not close)
        (setq close
              (read-char
               (format "Don't know how to close character %s (#%d) ; please provide a closing character: "
                       (single-key-description open 'no-angles)
                       open))))
      (yf/replace-pair open close))))

(defun yf/replace-pair (open close)
  "Replace pair at point by respective chars OPEN and CLOSE.
If CLOSE is nil, lookup the syntax table. If that fails, signal
an error."
  (let ((close (or close
                   (cdr-safe (aref (syntax-table) open))
                   (error "No matching closing char for character %s (#%d)"
                          (single-key-description open t)
                          open)))
        (parens-require-spaces))
    (insert-pair 1 open close))
  (delete-pair)
  (backward-char 1))

-- 
Nicolas Richard



  reply	other threads:[~2015-09-22 10:11 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-22  7:40 How to delete the parens around a sexp? Marcin Borkowski
2015-09-22 10:11 ` Nicolas Richard [this message]
2015-09-22 11:30   ` Edward Knyshov
2015-09-22 11:45 ` Rasmus
2015-09-22 11:54 ` Andreas Röhler
2015-09-23  0:49 ` Emanuel Berg
2015-09-23  0:58   ` Emanuel Berg
2015-09-23  2:15 ` John Mastro
2015-09-23  3:06   ` Emanuel Berg
2015-10-19  6:04   ` Marcin Borkowski
2015-10-21 11:23     ` Oleh Krehel
2015-10-18 22:12 ` Thien-Thi Nguyen
2015-10-19  5:59   ` Marcin Borkowski
     [not found] ` <mailman.588.1445207663.7904.help-gnu-emacs@gnu.org>
2015-10-19  0:49   ` Pascal J. Bourguignon
2015-10-19  5:59     ` Marcin Borkowski
     [not found] <mailman.1573.1442907653.19560.help-gnu-emacs@gnu.org>
2015-09-22  8:28 ` Joost Kremers
2015-09-22  8:38 ` Marco Wahl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87lhby7ogy.fsf@members.fsf.org \
    --to=youngfrog@members.fsf.org \
    --cc=help-gnu-emacs@gnu.org \
    --cc=mbork@mbork.pl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).