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

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

Re: How to PICK the CTRL-u argument from the file or some other method,


From: Greg Hill
Subject: Re: How to PICK the CTRL-u argument from the file or some other method, with EXAMPLE
Date: Fri, 24 Sep 2004 11:46:49 -0700

At 3:02 PM -0700 9/23/04, Jose Cuthberto wrote:
jose@Aumara.zzn.com (Jose Cuthberto) wrote in message news:<cf2523f3.0409221705.73716a7d@posting.google.com>...
> An example would clarify the problem:
>
> Suppose you want to paste a single killed line (in kill buffer using two C-k's)
> you can trivially do it like this:
>
> C-u 2 C-y
>

This does not do the same thing as typing "C-y" twice, which is what you imply it does.

> In this case you had to enter the numbers.
>
> I have a file like this:
>
> 5
> line1
> 6
> line2
>
> Now I must convert it to a file with 5 line1's and 6 line2's and so on.
> It is a long file.
>
> How do I pick 5 and put it into C-u so that it is done 5 times.
>

You can't.

> I can write macros. and I can also write single line lisp functions.
> Unfortunately there is no yank cammand that can take the argument 5.
> nor do i know the lisp function that can take the count and pass it to
> lisp function yank. I would want to avoid writing a loops, and vars etc.
>

Too bad.

> Thanks to the star who can help!!!
>
> jose
still waiting for a solution

You should seriously consider learning how to do a bit more than just write macros and "single line lisp functions."  You would get a lot more help if you at least made a good-faith effort to write your own function, presented the best you could come up with to the forum, and asked for tips on making it better.

Here's a fish.  Study it and try to learn something.  Execute it using M-x or bind it to a keystroke.

(defun expand-file (from-file to-file &optional replace)
  "Expand alternating count and text lines from FROM-FILE to TO-FILE.
Interactively prompts for file names.
If REPLACE (command prefix), replaces previous contents of TO-FILE,
otherwise appends to its end.
If FROM-FILE is already in a buffer when command is invoked, expansion
starts from the current position of point.  Otherwise it starts from
the top of the file.
When done, selects TO-FILE for the current window but does not
automatically save it."
  (interactive "fExpand from file: \nFto file: \nP")
  (let (from-buf to_buf count line)
    (setq from-buf (find-file-noselect from-file)
          to-buf (find-file-noselect to-file) )
    (set-buffer to-buf)
    (if replace
        (erase-buffer)
      (end-of-buffer) )
    (set-buffer from-buf)
    (while (looking-at "[0-9]+$")
      (setq count (read (current-buffer)))
      (forward-line 1)
      (setq line (buffer-substring-no-properties
                  (point) (1+ (line-end-position))))
      (forward-line 1)
      (set-buffer to-buf)
      (while (> count 0)
        (insert line)
        (setq count (1- count)) )
      (set-buffer from-buf) )
    (find-file to-file)
    (set-buffer from-buf)
    (save-excursion
      (skip-chars-forward " \t\n")
      (if (not (eobp))
          (progn
            (message "Warning: non-integer line count in %s. Expansion stops."
                     from-file)
            (switch-to-buffer-other-window from-buf) ) ) ) ))
 
--Greg

reply via email to

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