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

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

Re: Adding `#' at each new line with text until the end of the file


From: Pascal J. Bourguignon
Subject: Re: Adding `#' at each new line with text until the end of the file
Date: Wed, 08 Dec 2010 15:08:52 -0000
User-agent: Gnus/5.101 (Gnus v5.10.10) Emacs/23.1 (gnu/linux)

Merciadri Luca <Luca.Merciadri@student.ulg.ac.be> writes:

> pjb@informatimago.com (Pascal J. Bourguignon) writes:
>
>>> Sure, but, as I explained in my previous message, it does not even
>>> modify the Sayings file. Why?
>>
>> Because you didn't instruct the program to modify the file.
>> Read the documentation of insert, for example.  Does it mention files?
>> What does insert modify?
> Insert modifies the current buffer, according to the manual. Or
> find-file loads its arg into a buffer. So, if find-file loads its arg
> into the *current* buffer, insert should modify the current buffer,
> that is, `Sayings'.

(list
    (progn (find-file "/tmp/Sayings")
           (buffer-name (current-buffer)))
    (progn (find-file "/mnt/Sayings")
           (buffer-name (current-buffer))))
--> ("Sayings" "Sayings<2>")

Here you have two files, named "/tmp/Sayings" and "/mnt/Sayings", and
when opening them at the same time,  we get "Sayings" and "Sayings<2>"
as buffer names.

Clearly, the buffer names are not entirely independant from the file
names, but it should be obvious from the example, that there's two
name spaces and two different kind of entities.  A buffer named "X" is
not a file name "X".

So to repeat what you wrote above:

- find-file (or find-file-noselect) loads the contents of a  _file_
  into a _buffer_.

- insert modifies the contents of a _buffer_.

When  you do only these to action what happens to the _file_?


>> Here is a macro that could be useful:

Here with find-file-noselect as it has been advised (not tested):

(require 'cl)
(defmacro* with-file (file-and-options &body body)
  "Processes BODY with a buffer on the given file.
DO:              find-file or find-file-literally, process body, and
                 optionally save the buffer and kill it.
                 save is not done if body exits exceptionnaly.
                 kill is always done as specified.
FILE-AND-OPTION: either an atom evaluated to a path,
                 or (path &key (save t) (kill t) (literal nil))
"
  (if (atom file-and-options)
      `(with-file (,file-and-options) ,@body)
      ;; destructuring-bind is broken, we cannot give anything else than nil
      ;; as default values:
      (destructuring-bind (path &key (save nil savep) (kill nil killp)
                                (literal nil literalp))
          file-and-options
        (unless savep (setf save t))
        (unless killp (setf kill t))
        `(unwind-protect
              (progn
                (find-file-noselect ,path t ,literal)
                (prog1 (save-excursion ,@body)
                  ,(when save `(save-buffer 1))))
           ,(when kill
                  `(kill-buffer (current-buffer)))))))

> Thanks. I'll keep it.

-- 
__Pascal Bourguignon__                     http://www.informatimago.com/


reply via email to

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