all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Xah Lee <xahlee@gmail.com>
To: help-gnu-emacs@gnu.org
Subject: Re: Redefine "(" and ")" keys in every mode
Date: Sun, 4 Jan 2009 18:26:29 -0800 (PST)	[thread overview]
Message-ID: <32cb9ef9-85ed-4a63-9317-5f4c09bd893a@n33g2000pri.googlegroups.com> (raw)
In-Reply-To: mailman.3849.1231013327.26697.help-gnu-emacs@gnu.org

On Jan 3, 7:31 am, TheLonelyStar <nabb...@lonely-star.org> wrote:
> Hi,
>
> I use the following functions (bellow) for redifine the insertions if ( and
> ).
> The Idea is: When I type (, I want () inserted. When I type ) and the next
> character is ), I want to just jump over it.
>
> The Problem is: This works, as long as the mode I am in does not overwrite
> the "(" or ")" key.
> And, at the same time, when the mode overwrites this keys, it normaly has a
> reason for it.
>
> Has somebody an Idea how this can be done, so that it works in every mode?
> Thanks!
> Nathan
>
> The functions:
> -----------------------------------
> (defun bracket (arg)
>   (interactive "*P")
>   (insert "()")
>   (backward-char))
> (define-key global-map (kbd "(") 'bracket)
>
> ;;Jump after character on insertion
> (defun end-insertion (arg)
>   (interactive "*p")
>   (if (looking-at (concat "[\n \t]*" (this-command-keys))) (goto-char
> (match-end 0)) (insert (this-command-keys)) (indent-according-to-mode))
> )
>
> (define-key global-map (kbd ")") 'end-insertion)
> (define-key c-mode-base-map (kbd ")") 'end-insertion)

to answer your question, you need to use hook on modes that use keys
that you defined in global-map. See here:

• How To Reclaim Keybindings In Emacs
  http://xahlee.org/emacs/ergonomic_emacs_keybinding_minibuffer.html

-----------------
I also have all matching pairs inserted together.

The way i do it is to use the Hyper key together with homerow keys
under my right hand.

The hyper is set to the Start key on Microsoft keyboard. The {}()[]
are qwerty's J, K, L.

The above is my setup. For detail, i'm using Mac OS X, and Microsoft's
ergonomic keyboard, and Dvorak layout (set in OS)... so the following
elisp code may seem complicated.

(setq mac-option-modifier 'hyper)

(global-set-key (kbd "H-h") (lambda () (interactive) (insert "{}")
(backward-char 1)))
(global-set-key (kbd "H-t") (lambda () (interactive) (insert "()")
(backward-char 1)))
(global-set-key (kbd "H-n") (lambda () (interactive) (insert "[]")
(backward-char 1)))

You can see my other matching pairs setup for “”‘’«»‹›"", as well as
easier to press keys for += and bunch of other unicode keys at:

  http://xahlee.org/emacs/xah_emacs_init.html

  Xah
∑ http://xahlee.org/

       reply	other threads:[~2009-01-05  2:26 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <mailman.3849.1231013327.26697.help-gnu-emacs@gnu.org>
2009-01-05  2:26 ` Xah Lee [this message]
2009-01-03 15:31 Redefine "(" and ")" keys in every mode TheLonelyStar
2009-01-03 21:57 ` Drew Adams
2009-01-04  0:01 ` Andy Stewart
2009-01-04  0:19   ` Drew Adams

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

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

  git send-email \
    --in-reply-to=32cb9ef9-85ed-4a63-9317-5f4c09bd893a@n33g2000pri.googlegroups.com \
    --to=xahlee@gmail.com \
    --cc=help-gnu-emacs@gnu.org \
    /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.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.