Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Move selection up, down

1,380 views
Skip to first unread message

jiri.p...@gmail.com

unread,
Aug 19, 2008, 10:21:38 AM8/19/08
to
Hi,

in Netbeans when you press M-S-up/M-S-down you move the selected text
up/down. When nothing is selected it moves the current line.

With C-S-up/C-S-down you copy the selection up/down. When nothings is
selected it copies the current line up/down.

Is such functionality available in emacs?

Jiri Pejchal

harven

unread,
Aug 19, 2008, 5:27:11 PM8/19/08
to
On Aug 19, 4:21 pm, "jiri.pejc...@gmail.com" <jiri.pejc...@gmail.com>
wrote:

There are similar functionalities in emacs,
although the bindings are different. For example, the command that
transposes two
consecutive lines is called transpose-lines and is bound to C-x C-t by
default. Other transpose commands include transpose-region, transpose-
char, transpose-paragraphs, transpose-words, transpose-sentences.

You can also redefine such functionalities
by hand using a bit of lisp code. For example,
if I want to exchange two consecutive lines, I can define the
following command:

(defun line-down ()
(interactive)
(save-excursion
(beginning-of-line)
(kill-line 1)
(next-line)
(yank))
(next-line))

and bind it to C-S-down:

(global-set-key (kbd "C-S-<down>") 'line-down)

This may convince you that new functionalities
are easily added to emacs.

Chat

unread,
Aug 19, 2008, 6:43:48 PM8/19/08
to
harven <har...@free.fr> writes:

For simple things like this, reading the secion "emacs" -> "keyboard macros" in
M-x info also helps.

Andreas Politz

unread,
Aug 19, 2008, 8:45:02 PM8/19/08
to


Heres some elisp. It binds M-S-up/down to commands
which move the active region (with respect to columns)
or the current line prefix arg lines up or down.
Have fun.
-ap

(defun move-text-internal (arg)
(cond
((and mark-active transient-mark-mode)
(if (> (point) (mark))
(exchange-point-and-mark))
(let ((column (current-column))
(text (delete-and-extract-region (point) (mark))))
(forward-line arg)
(move-to-column column t)
(set-mark (point))
(insert text)
(exchange-point-and-mark)
(setq deactivate-mark nil)))
(t
(beginning-of-line)
(when (or (> arg 0) (not (bobp)))
(forward-line)
(when (or (< arg 0) (not (eobp)))
(transpose-lines arg))
(forward-line -1)))))

(defun move-text-down (arg)
"Move region (transient-mark-mode active) or current line
arg lines down."
(interactive "*p")
(move-text-internal arg))

(defun move-text-up (arg)
"Move region (transient-mark-mode active) or current line
arg lines up."
(interactive "*p")
(move-text-internal (- arg)))

(global-set-key [\M-\S-up] 'move-text-up)
(global-set-key [\M-\S-down] 'move-text-down)

Oleksandr Gavenko

unread,
Sep 11, 2008, 1:04:32 PM9/11/08
to

After that code people decide stay in NetBeans than move to Emacs :).

Humor about ability of emacs (butterfly-mode):

http://www.digitalsanctuary.com/tech-blog/general/why-use-emacs-instead-of-vi.html

teemu....@gmail.com

unread,
Jul 4, 2013, 8:15:43 AM7/4/13
to
On Wednesday, 20 August 2008 03:45:02 UTC+3, Andreas Politz wrote:

> Heres some elisp. It binds M-S-up/down to commands
> which move the active region (with respect to columns)
> or the current line prefix arg lines up or down.

Brilliant! Thanks for this.

-- Teemu Leisti

jsgl...@gmail.com

unread,
Dec 12, 2014, 2:14:30 PM12/12/14
to
Fantastic, thank you!
0 new messages