[vox-tech] emacs delete key-binding

Jonathan Stickel vox-tech@lists.lugod.org
Mon, 14 Jul 2003 16:58:24 -0700


Micah J. Cowan wrote:
> On Mon, Jul 14, 2003 at 12:34:46PM -0700, Jonathan Stickel wrote:
> 
>>The default setup of emacs for Red Hat causes the "backspace" key to 
>>delete backward 1 character, the "delete" key to delete forward 1 
>>character, and "C-w" to kill a high-lighted region.
>>
>>I would like to have the "delete" key assigned to kill a highlighted 
>>region in addition to deleting 1 character forward.  This is common 
>>behavior of most gui text editors and word processors.
 >>
 >>...
 >>
 >>
>> Is there a correct way to 
>>do this?  I am new to elisp (obviously).
> 
> 
> (global-set-key [delete] (lambda () (interactive) (if mark-active
> (kill-region (point) (mark)) (delete-char))))
> 
> might work: but I don't think that the region is always hilited:  this
> might call kill-region sometimes when you don't want it to. I
> frequently use emacs in console-mode, where I don't see any hiliting
> during a marked region, so I wouldn't prefer such a binding.
> 
> HTH,
> Micah

Thanks for your suggestion, although it didn't quite work.  It killed 
the region fine, but I got this error with no region selected:

wrong number of arguments:  #<subr delete-char>, 0

After a little research I tried:

(global-set-key [delete] (lambda () (interactive) (if mark-active 
(kill-region (point) (mark)) (delete-char (point-min)))))

This seems to do exactly what I want.:-)  BTW, I also have my .emacs:

;; Visual feedback on selections
(setq-default transient-mark-mode t)

I think this prevents the mark from being set unless there is a 
selection visually high-lighted.

Jonathan