help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Emacs Lisp Programming Questions


From: Kevin Rodgers
Subject: Re: Emacs Lisp Programming Questions
Date: Tue, 03 Nov 2009 23:43:56 -0700
User-agent: Thunderbird 2.0.0.23 (Macintosh/20090812)

David Combs wrote:
In article <address@hidden>,
Kevin Rodgers  <address@hidden> wrote:
clint.laskowski wrote:
Hello, gnu.emacs.help. I have a few questions about programming in
Emacs Lisp. I hope you can help. Here they are:

1. Is this a good place to ask questions about programming in Emacs
Lisp, especially with regards to text processing? If there's a better
place, I'd appreciate knowing.

2. I want to write an interactive Elisp program to remove sequential
duplicate lines from a buffer. This buffer is not sorted, and it
should not be sorted. The program should simply look for two
sequential lines that are identical, delete one, and then move on to
the next line and do it over until it reaches the end of the buffer.

BUT, I do not want the answer to this problem (i.e., I don't want an
Elisp answer) ... I want hints on how to program it. I want to learn
the answer myself, if possible.

Any ideas or pointers?
Start by writing a keyboard macro that does what you want.  Then you
can translate the commands invoked interactively into function calls.

I guess "edit-kbd-macro" and grabbing what it types out
would be the way to start that translation?

Yes, and use `C-h f' to find the precise calling convention for each function.

Note that you can search for sequential duplicate lines using a
regular expression.

Please show an example -- I myself will learn something
from it.

It'd be cool to be able to get a regexp to extend past the
end of the line, yes?

BUT WAIT!  THIS IS *EMACS* -- doesn't work by lines --
whole buffer is just one huge long string, with newlines
interspersed here and there.  So, how to refer to a newline
as a plain old ordinary character, not "end of line" via "$"?

LFD aka control-J

Yes, PLEASE, I'd REALLY like to see an example of such a regexp!

^\(.*\) LFD \1 LFD

(the spaces are just for readability)

And if indeed that *can* be done, can you use that within
a query-replace somehow?

Not query-replace (M-%), but query-replace-regexp (C-M-%):

C-M-%
^\(.*\) C-q C-j \1 C-q C-j RET
\1 C-q C-j RET

(Or will that miss every other one or something, because
if it sees two identical lines and replaces the 2nd
by "", then what if there is a third one also identical --
can't get the qr to back up to make a match?)

Yes, that could be a problem.  This might work:

C-M-%
^\(.*\) C-q C-j \(\1 C-q C-j \)+ RET
\1 C-q C-j RET

Anyway, an example would sure be nice, however you do it,
just so long as you do it via a regexp.  THANKS!

Hope that helps!

--
Kevin Rodgers
Denver, Colorado, USA





reply via email to

[Prev in Thread] Current Thread [Next in Thread]