* Deleting a word using keybinding @ 2020-10-15 10:26 Christopher Dimech 2020-10-15 11:10 ` Jeremie Juste ` (3 more replies) 0 siblings, 4 replies; 15+ messages in thread From: Christopher Dimech @ 2020-10-15 10:26 UTC (permalink / raw) To: Help Gnu Emacs I am trying to delete a word using keybinding string "C-<tab>" but the Chord is still showing as undefined. I would like to delete a word even if I happen to be in the middle of it., so I move backward. Here is the function ( global-set-key (kbd "C-<tab>" ) ( lambda () (interactive) ( (backward-word) (kill-word 1) ) ) ) ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Deleting a word using keybinding 2020-10-15 10:26 Deleting a word using keybinding Christopher Dimech @ 2020-10-15 11:10 ` Jeremie Juste 2020-10-15 11:20 ` Harald Jörg ` (2 subsequent siblings) 3 siblings, 0 replies; 15+ messages in thread From: Jeremie Juste @ 2020-10-15 11:10 UTC (permalink / raw) To: Christopher Dimech; +Cc: Help Gnu Emacs Hello, To investigate I usually separate the problem into two parts Frist the key binding and second the function. The function test work as you expect when calling M-x test (defun test () (interactive) (progn (backward-word) (kill-word 1)) ) (global-set-key (kbd "C-<tab>") 'test) For the keybinding I guess it will depend on the mode you are in. As tab is intensively used so a minor mode might take control of it if I understand correctly. A way to test it would be to test the binding in fundamental-mode. HTH, Jeremie ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Deleting a word using keybinding 2020-10-15 10:26 Deleting a word using keybinding Christopher Dimech 2020-10-15 11:10 ` Jeremie Juste @ 2020-10-15 11:20 ` Harald Jörg 2020-10-15 16:44 ` Christopher Dimech 2020-10-15 18:44 ` Christopher Dimech 2020-10-15 11:34 ` Stephen Berman 2020-10-15 13:48 ` Stefan Monnier 3 siblings, 2 replies; 15+ messages in thread From: Harald Jörg @ 2020-10-15 11:20 UTC (permalink / raw) To: Christopher Dimech, Help Gnu Emacs On 10/15/20 12:26 PM, Christopher Dimech wrote: > > I am trying to delete a word using keybinding string "C-<tab>" but the > Chord is still showing as undefined. > > I would like to delete a word even if I happen to be in the middle of > it., so I move backward. > > Here is the function > > ( global-set-key (kbd "C-<tab>" ) > ( lambda () (interactive) > ( (backward-word) > (kill-word 1) > ) > ) > ) If I get rid of one pair of parens, it works for me. ( global-set-key (kbd "C-<tab>" ) ( lambda () (interactive) (backward-word) (kill-word 1) ) ) With the extra parens in your code, I get 'Invalid function: (backward-word)'. Maybe this is why you don't see any effect? Also note that if your point happens to be on the first character of a word, this function deletes the _previous_ word. -- Cheers, haj ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Deleting a word using keybinding 2020-10-15 11:20 ` Harald Jörg @ 2020-10-15 16:44 ` Christopher Dimech 2020-10-15 18:44 ` Christopher Dimech 1 sibling, 0 replies; 15+ messages in thread From: Christopher Dimech @ 2020-10-15 16:44 UTC (permalink / raw) To: Harald Jörg; +Cc: Help Gnu Emacs Dear Haj, correct, if I happen toi be at the beginning of a word, it deletes the previous word. I would like to have it kill forward, so I modified as follows ( global-set-key (kbd "H-<delete>" ) ( lambda () (interactive) (forward-word) (kill-word 1) (message "**** Killing a word") ) ) A small remaining part to to kill the whole word even if I am in the middle of a word, because my code only deletes from the current point onwards. Sent: Thursday, October 15, 2020 at 1:20 PM From: "Harald Jörg" <haj@posteo.de> To: "Christopher Dimech" <dimech@gmx.com>, "Help Gnu Emacs" <help-gnu-emacs@gnu.org> Subject: Re: Deleting a word using keybinding On 10/15/20 12:26 PM, Christopher Dimech wrote: > > I am trying to delete a word using keybinding string "C-<tab>" but the > Chord is still showing as undefined. > > I would like to delete a word even if I happen to be in the middle of > it., so I move backward. > > Here is the function > > ( global-set-key (kbd "C-<tab>" ) > ( lambda () (interactive) > ( (backward-word) > (kill-word 1) > ) > ) > ) If I get rid of one pair of parens, it works for me. ( global-set-key (kbd "C-<tab>" ) ( lambda () (interactive) (backward-word) (kill-word 1) ) ) With the extra parens in your code, I get 'Invalid function: (backward-word)'. Maybe this is why you don't see any effect? Also note that if your point happens to be on the first character of a word, this function deletes the _previous_ word. -- Cheers, haj ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Deleting a word using keybinding 2020-10-15 11:20 ` Harald Jörg 2020-10-15 16:44 ` Christopher Dimech @ 2020-10-15 18:44 ` Christopher Dimech 2020-10-15 20:25 ` Harald Jörg 1 sibling, 1 reply; 15+ messages in thread From: Christopher Dimech @ 2020-10-15 18:44 UTC (permalink / raw) To: Harald Jörg; +Cc: Help Gnu Emacs I have updated my function to kill words forward so that even if I am in the middle of a word that word will be killed. I also consider that if there are multiple spaces, I delete just the spaces spaces but not next word. I am finding a problem however when deleting part of a sentence by contiuing to press C--<delete> because when the point happens to be between two words, I end up with the two words stuck together (the previous and thn forward), which deletes the two words when I hit C-<delete> again. (defun kill-spacword () (interactive) (if (looking-at "[ \t\n]") (let ((p (point))) ( re-search-forward "[^ \t\n]" nil :no-error ) ( backward-char ) ( kill-region p (point) ) ) ( progn (backward-char) (if (looking-at "[ \t\n]") (kill-word 1) ( progn (backward-word) (kill-word 1) ) ) ) ) ) Sent: Thursday, October 15, 2020 at 1:20 PM From: "Harald Jörg" <haj@posteo.de> To: "Christopher Dimech" <dimech@gmx.com>, "Help Gnu Emacs" <help-gnu-emacs@gnu.org> Subject: Re: Deleting a word using keybinding On 10/15/20 12:26 PM, Christopher Dimech wrote: > > I am trying to delete a word using keybinding string "C-<tab>" but the > Chord is still showing as undefined. > > I would like to delete a word even if I happen to be in the middle of > it., so I move backward. > > Here is the function > > ( global-set-key (kbd "C-<tab>" ) > ( lambda () (interactive) > ( (backward-word) > (kill-word 1) > ) > ) > ) If I get rid of one pair of parens, it works for me. ( global-set-key (kbd "C-<tab>" ) ( lambda () (interactive) (backward-word) (kill-word 1) ) ) With the extra parens in your code, I get 'Invalid function: (backward-word)'. Maybe this is why you don't see any effect? Also note that if your point happens to be on the first character of a word, this function deletes the _previous_ word. -- Cheers, haj ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Deleting a word using keybinding 2020-10-15 18:44 ` Christopher Dimech @ 2020-10-15 20:25 ` Harald Jörg 2020-10-15 20:59 ` Christopher Dimech 0 siblings, 1 reply; 15+ messages in thread From: Harald Jörg @ 2020-10-15 20:25 UTC (permalink / raw) To: Christopher Dimech; +Cc: Help Gnu Emacs On 10/15/20 8:44 PM, Christopher Dimech wrote: > I have updated my function to kill words forward so that even if I am > in the middle of a word that word will be killed. I also consider that > if there are multiple spaces, I delete just the spaces spaces but not > next word. This isn't exactly what the function does: If there are two or more spaces between words, then only spaces to the right of point are deleted. Also, when you delete _all_ spaces, you merge two words into one. This is the cause for your observation: > I am finding a problem however when deleting part of a sentence by > contiuing to press C--<delete> because when the point happens to be > between two words, I end up with the two words stuck together (the > previous and thn forward), which deletes the two words when I hit > C-<delete> again. It really pays off when you spend the effort to write down how you want the function to behave in all relevant situations. It is good practice to have a docstring for your command anyway, and you might detect contradictory requirements before you start writing the function. If point is before a whitespace character, you could either do nothing, or delete the previous, or delete the following word, all of them make some sense. Deleting whitespace seems somewhat unrelated. There still are cases where your function does not what you seem to expect: If the text in the buffer is "foo bar", and point is before the "a" in "bar", then executing M-x kill-spacword kills "foo". -- Cheers, haj ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Deleting a word using keybinding 2020-10-15 20:25 ` Harald Jörg @ 2020-10-15 20:59 ` Christopher Dimech 2020-10-15 21:06 ` Thien-Thi Nguyen 0 siblings, 1 reply; 15+ messages in thread From: Christopher Dimech @ 2020-10-15 20:59 UTC (permalink / raw) To: Harald Jörg; +Cc: Help Gnu Emacs I want it to behave as C-<delete>, except that I want to delete the current word if the cursor happens to be within a word. For instance, consider the following sentence. I want that if the cursor point in on the character w of the word Brown, the word Brown is also deleted, rather than deleting the word fromw onwards. The Brown Fox Jumped a Fence I also would like that when there are multiple space, I first delete the spaces and leave just one space rather than deleting the next word. Sent: Thursday, October 15, 2020 at 10:25 PM From: "Harald Jörg" <haj@posteo.de> To: "Christopher Dimech" <dimech@gmx.com> Cc: "Help Gnu Emacs" <help-gnu-emacs@gnu.org> Subject: Re: Deleting a word using keybinding On 10/15/20 8:44 PM, Christopher Dimech wrote: > I have updated my function to kill words forward so that even if I am > in the middle of a word that word will be killed. I also consider that > if there are multiple spaces, I delete just the spaces spaces but not > next word. This isn't exactly what the function does: If there are two or more spaces between words, then only spaces to the right of point are deleted. Also, when you delete _all_ spaces, you merge two words into one. This is the cause for your observation: > I am finding a problem however when deleting part of a sentence by > contiuing to press C--<delete> because when the point happens to be > between two words, I end up with the two words stuck together (the > previous and thn forward), which deletes the two words when I hit > C-<delete> again. It really pays off when you spend the effort to write down how you want the function to behave in all relevant situations. It is good practice to have a docstring for your command anyway, and you might detect contradictory requirements before you start writing the function. If point is before a whitespace character, you could either do nothing, or delete the previous, or delete the following word, all of them make some sense. Deleting whitespace seems somewhat unrelated. There still are cases where your function does not what you seem to expect: If the text in the buffer is "foo bar", and point is before the "a" in "bar", then executing M-x kill-spacword kills "foo". -- Cheers, haj ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Deleting a word using keybinding 2020-10-15 20:59 ` Christopher Dimech @ 2020-10-15 21:06 ` Thien-Thi Nguyen 2020-10-15 21:14 ` Christopher Dimech 0 siblings, 1 reply; 15+ messages in thread From: Thien-Thi Nguyen @ 2020-10-15 21:06 UTC (permalink / raw) To: Christopher Dimech; +Cc: Help Gnu Emacs [-- Attachment #1: Type: text/plain, Size: 565 bytes --] () Christopher Dimech <dimech@gmx.com> () Thu, 15 Oct 2020 22:59:29 +0200 and leave just one space rather than [...] There's a command for that -- can you guess its name? :-D -- Thien-Thi Nguyen ----------------------------------------------- (defun responsep (query) ; (2020) Software Libero (pcase (context query) ; = Dissenso Etico (`(technical ,ml) (correctp ml)) ...)) 748E A0E8 1CB8 A748 9BFA --------------------------------------- 6CE4 6703 2224 4C80 7502 [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 219 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Deleting a word using keybinding 2020-10-15 21:06 ` Thien-Thi Nguyen @ 2020-10-15 21:14 ` Christopher Dimech 2020-10-15 21:22 ` Christopher Dimech 2020-10-15 21:24 ` Stephen Berman 0 siblings, 2 replies; 15+ messages in thread From: Christopher Dimech @ 2020-10-15 21:14 UTC (permalink / raw) To: Thien-Thi Nguyen; +Cc: Help Gnu Emacs Got it (just-one-space) Sent: Thursday, October 15, 2020 at 11:06 PM From: "Thien-Thi Nguyen" <ttn@gnuvola.org> To: "Christopher Dimech" <dimech@gmx.com> Cc: "Help Gnu Emacs" <help-gnu-emacs@gnu.org> Subject: Re: Deleting a word using keybinding () Christopher Dimech <dimech@gmx.com> () Thu, 15 Oct 2020 22:59:29 +0200 and leave just one space rather than [...] There's a command for that -- can you guess its name? :-D -- Thien-Thi Nguyen ----------------------------------------------- (defun responsep (query) ; (2020) Software Libero (pcase (context query) ; = Dissenso Etico (`(technical ,ml) (correctp ml)) ...)) 748E A0E8 1CB8 A748 9BFA --------------------------------------- 6CE4 6703 2224 4C80 7502 ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Deleting a word using keybinding 2020-10-15 21:14 ` Christopher Dimech @ 2020-10-15 21:22 ` Christopher Dimech 2020-10-15 21:27 ` Drew Adams 2020-10-15 21:24 ` Stephen Berman 1 sibling, 1 reply; 15+ messages in thread From: Christopher Dimech @ 2020-10-15 21:22 UTC (permalink / raw) To: Christopher Dimech; +Cc: Help Gnu Emacs, Thien-Thi Nguyen Is there a way to detect end of buffer? Sent: Thursday, October 15, 2020 at 11:14 PM From: "Christopher Dimech" <dimech@gmx.com> To: "Thien-Thi Nguyen" <ttn@gnuvola.org> Cc: "Help Gnu Emacs" <help-gnu-emacs@gnu.org> Subject: Re: Deleting a word using keybinding Got it (just-one-space) Sent: Thursday, October 15, 2020 at 11:06 PM From: "Thien-Thi Nguyen" <ttn@gnuvola.org> To: "Christopher Dimech" <dimech@gmx.com> Cc: "Help Gnu Emacs" <help-gnu-emacs@gnu.org> Subject: Re: Deleting a word using keybinding () Christopher Dimech <dimech@gmx.com> () Thu, 15 Oct 2020 22:59:29 +0200 and leave just one space rather than [...] There's a command for that -- can you guess its name? :-D -- Thien-Thi Nguyen ----------------------------------------------- (defun responsep (query) ; (2020) Software Libero (pcase (context query) ; = Dissenso Etico (`(technical ,ml) (correctp ml)) ...)) 748E A0E8 1CB8 A748 9BFA --------------------------------------- 6CE4 6703 2224 4C80 7502 ^ permalink raw reply [flat|nested] 15+ messages in thread
* RE: Deleting a word using keybinding 2020-10-15 21:22 ` Christopher Dimech @ 2020-10-15 21:27 ` Drew Adams 2020-10-15 21:48 ` Christopher Dimech 0 siblings, 1 reply; 15+ messages in thread From: Drew Adams @ 2020-10-15 21:27 UTC (permalink / raw) To: Christopher Dimech; +Cc: Help Gnu Emacs, Thien-Thi Nguyen > Is there a way to detect end of buffer? Function `eobp' ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: RE: Deleting a word using keybinding 2020-10-15 21:27 ` Drew Adams @ 2020-10-15 21:48 ` Christopher Dimech 0 siblings, 0 replies; 15+ messages in thread From: Christopher Dimech @ 2020-10-15 21:48 UTC (permalink / raw) To: Drew Adams; +Cc: Help Gnu Emacs, Thien-Thi Nguyen I have made some imporvement. Been using the following text for testing, and when I am getting a comma, dash, or period, the function is deleting backwards. When this happens I just want it to behave as (kill-word) ;; This buffer is for text that is not saved, and for Lisp evaluation. ;; To create a file, visit it with C-x C-f and enter text in its buffer. (defun kill-spacword () "Kills Word forward including Current Word. Multiple Spaces are reduced to one space, but without deleting next word." (interactive) (if (looking-at "[ \t\n]") ;; Space detected. (progn (forward-char) (if (looking-at "[ \t\n]") (just-one-space) (progn (backward-char) (kill-word 1) ) ) ) ;; Current Point found on a word ( progn (if (eobp) nil ;;(progn (backward-word) (kill-word 1)) (progn (backward-char) (if (looking-at "[ \t\n]") (kill-word 1) (progn (backward-word) (kill-word 1)) ) ) ) ) ) ) Sent: Thursday, October 15, 2020 at 11:27 PM From: "Drew Adams" <drew.adams@oracle.com> To: "Christopher Dimech" <dimech@gmx.com> Cc: "Help Gnu Emacs" <help-gnu-emacs@gnu.org>, "Thien-Thi Nguyen" <ttn@gnuvola.org> Subject: RE: Deleting a word using keybinding > Is there a way to detect end of buffer? Function `eobp' ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Deleting a word using keybinding 2020-10-15 21:14 ` Christopher Dimech 2020-10-15 21:22 ` Christopher Dimech @ 2020-10-15 21:24 ` Stephen Berman 1 sibling, 0 replies; 15+ messages in thread From: Stephen Berman @ 2020-10-15 21:24 UTC (permalink / raw) To: Christopher Dimech; +Cc: Help Gnu Emacs, Thien-Thi Nguyen On Thu, 15 Oct 2020 23:14:05 +0200 Christopher Dimech <dimech@gmx.com> wrote: > Got it (just-one-space) > > Sent: Thursday, October 15, 2020 at 11:06 PM > From: "Thien-Thi Nguyen" <ttn@gnuvola.org> > To: "Christopher Dimech" <dimech@gmx.com> > Cc: "Help Gnu Emacs" <help-gnu-emacs@gnu.org> > Subject: Re: Deleting a word using keybinding > () Christopher Dimech <dimech@gmx.com> > () Thu, 15 Oct 2020 22:59:29 +0200 > and leave just one space rather than [...] > There's a command for that -- can you guess its name? :-D You also might find bounds-of-thing-at-point useful for your function. Steve Berman ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Deleting a word using keybinding 2020-10-15 10:26 Deleting a word using keybinding Christopher Dimech 2020-10-15 11:10 ` Jeremie Juste 2020-10-15 11:20 ` Harald Jörg @ 2020-10-15 11:34 ` Stephen Berman 2020-10-15 13:48 ` Stefan Monnier 3 siblings, 0 replies; 15+ messages in thread From: Stephen Berman @ 2020-10-15 11:34 UTC (permalink / raw) To: Christopher Dimech; +Cc: Help Gnu Emacs On Thu, 15 Oct 2020 12:26:59 +0200 Christopher Dimech <dimech@gmx.com> wrote: > I am trying to delete a word using keybinding string "C-<tab>" but the > Chord is still showing as undefined. > > I would like to delete a word even if I happen to be in the middle of > it., so I move backward. > > Here is the function > > ( global-set-key (kbd "C-<tab>" ) > ( lambda () (interactive) > ( (backward-word) > (kill-word 1) > ) > ) > ) Other have already shown how to correct your code, but here's some advice with which you can maybe help yourself in future: When I evaluate this code and then type `C-<tab>', I see this message: "Invalid function: (backward-word)". That tells you what the problem is. If you don't understand it, try reading the node "Run a Program" in the Info manual "An Introduction to Programming in Emacs Lisp", which you can access by putting the cursor after the closing parenthesis of the following expression and typing `C-x C-e': (info "(eintr) Run a Program") In particular, this part of the node should help you see the problem with your code: The single apostrophe, ‘'’, that I put in front of some of the example lists in preceding sections is called a “quote”; when it precedes a list, it tells Lisp to do nothing with the list, other than take it as it is written. But if there is no quote preceding a list, the first item of the list is special: it is a command for the computer to obey. (In Lisp, these commands are called _functions_.) The list ‘(+ 2 2)’ shown above did not have a quote in front of it, so Lisp understands that the ‘+’ is an instruction to do something with the rest of the list: add the numbers that follow. Steve Berman ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Deleting a word using keybinding 2020-10-15 10:26 Deleting a word using keybinding Christopher Dimech ` (2 preceding siblings ...) 2020-10-15 11:34 ` Stephen Berman @ 2020-10-15 13:48 ` Stefan Monnier 3 siblings, 0 replies; 15+ messages in thread From: Stefan Monnier @ 2020-10-15 13:48 UTC (permalink / raw) To: help-gnu-emacs > I am trying to delete a word using keybinding string "C-<tab>" but the > Chord is still showing as undefined. Try `C-h k C-TAB` and show us what it says. Stefan ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2020-10-15 21:48 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-10-15 10:26 Deleting a word using keybinding Christopher Dimech 2020-10-15 11:10 ` Jeremie Juste 2020-10-15 11:20 ` Harald Jörg 2020-10-15 16:44 ` Christopher Dimech 2020-10-15 18:44 ` Christopher Dimech 2020-10-15 20:25 ` Harald Jörg 2020-10-15 20:59 ` Christopher Dimech 2020-10-15 21:06 ` Thien-Thi Nguyen 2020-10-15 21:14 ` Christopher Dimech 2020-10-15 21:22 ` Christopher Dimech 2020-10-15 21:27 ` Drew Adams 2020-10-15 21:48 ` Christopher Dimech 2020-10-15 21:24 ` Stephen Berman 2020-10-15 11:34 ` Stephen Berman 2020-10-15 13:48 ` Stefan Monnier
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).