unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: tyler <tyler.smith@mail.mcgill.ca>
To: help-gnu-emacs@gnu.org
Subject: Re: Why save-excursion doesn't restore cursor position after 3 kill-line calls?
Date: Fri, 28 Nov 2008 16:18:15 -0400	[thread overview]
Message-ID: <87fxlbk3js.fsf@blackbart.sedgenet> (raw)
In-Reply-To: 9700303c-f0d1-42b6-b1d0-a74e3fe2ab33@t26g2000prh.googlegroups.com

Xah Lee <xahlee@gmail.com> writes:

> On Nov 28, 7:59 am, tyler <tyler.sm...@mail.mcgill.ca> wrote:
>> Barry Margolin <bar...@alum.mit.edu> writes:
>> > In article
>> > <429c5cab-0015-4eb6-a794-ce990c625...@q26g2000prq.googlegroups.com>,
>> >  "seber...@spawar.navy.mil" <seber...@spawar.navy.mil> wrote:
>>
>> >> I'm trying to map C-d to a function that deletes an entire line and
>> >> stops on the *SAME* column number of the following line....
>>
>> >> (global-set-key "\^d" (lambda () (interactive) (save-excursion (kill-
>> >> line)
>> >> (kill-line 0)
>> >> (kill-line))))
>>
>> >> Why doesn't save-excursion preserve the column number after these kill-
>> >> line invocations?
>
>> I tried Chris' code, first calling (point), then running the command,
>> then running (point) again, and the value has definitely not been
>> restored. It is possible, for example:
>>
>> (defun mykill ()
>>   (interactive)
>>   (let ((p (point)))
>>     (kill-line)
>>     (kill-line 0)
>>     (kill-line)
>>     (goto-char p)))
>>
>> I've been confused by save-excursion in other contexts though, so I'm
>> still unclear on why the original version of this function doesn't work.
>
> Like Barry Margolin has said, save-excursion restore the cursor
> position but not when the text the cursor is on is deleted in your
> code. In other words, it is theoretically senseless to preserve
> something that's not there anymore.

Cursor-position is point in emacs jargon, no? The documentation clearly
states that point is saved and restored during save-excursion. Point
itself is just an integer, and does not disappear when text is deleted.

> in your code, your several kill-line code deleted the line the cursor
> is on.
>
> what exactly do you want to do?

I'm not sure what the OP wanted, but I want to understand why
save-excursion does not do the same thing as my function `mykill' does.

>
> if you want to return your cursor to the same column it was on, you
> can get the column position then move your cursor to that afterwards.
> However, that presumes that you are on a line that has enough chars to
> cover the column. Overall, i think you need to clarify the behavior
> you wanted.

The function provided above does exactly what I wanted (granted for only
simple cases). Try it with point on the u in 'presumes' in the paragraph
above. That line is killed, with point ending up at the same numeric
position where it started - i.e., the same column on the following line.
(This will only be the case when the following line is long enough, of
course). 

The real question is why save-excursion *doesn't* do this. The
documentation states that point is restored. Either 'restoring' point
means something other than setting point to equal the previously saved
value, or there is something missing in the documentation.

Tyler


-- 
Philosophy of science is about as useful to scientists as ornithology is to
birds.                                 --Richard Feynman





  reply	other threads:[~2008-11-28 20:18 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-28  4:40 Why save-excursion doesn't restore cursor position after 3 kill-line calls? seberino
2008-11-28 10:00 ` Barry Margolin
2008-11-28 15:59   ` tyler
2008-11-28 22:49     ` Stephen Berman
     [not found]   ` <mailman.1440.1227888009.26697.help-gnu-emacs@gnu.org>
2008-11-28 16:43     ` Xah Lee
2008-11-28 20:18       ` tyler [this message]
     [not found]       ` <mailman.1449.1227903504.26697.help-gnu-emacs@gnu.org>
2008-11-28 22:35         ` Andreas Politz
2008-11-28 23:18           ` tyler
     [not found]           ` <mailman.1463.1227914342.26697.help-gnu-emacs@gnu.org>
2008-11-29  8:21             ` Barry Margolin
2008-11-29 17:28               ` tyler

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=87fxlbk3js.fsf@blackbart.sedgenet \
    --to=tyler.smith@mail.mcgill.ca \
    --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.
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).