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

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

Re: use Elisp to improve your Elisp - some code issues


From: Pascal J. Bourguignon
Subject: Re: use Elisp to improve your Elisp - some code issues
Date: Fri, 31 Jul 2015 04:39:37 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux)

Emanuel Berg <embe8573@student.uu.se> writes:

> I just wrote some Elisp which can be used on a set of
> files to identify for example the construct
>
>     (if a a b)
>
> if you want to replace those for
>
>     (or a b)
>
> See the comments for the issues!
>
> Issue one is how to best create a temporary buffer to
> display the results.

It's not so much a temporary buffer than a buffer that is not backed by
a file, that you want.

A temporary buffer, created by with-temporary-buffer would be deleted
right away, and not visible to the user.

You want your buffer to be visible by the user.
The convention for this type of buffer is to name it with stars around
"*Results*".

If you want such a buffer but not visible to the user, add a prefix
space:

" *PrivateResults*"

You can see the current "invisible" buffer with C-x b SPC TAB
or all the buffers with (buffer-list)


> Issue two is to not kill buffers that were already
> open at invocation - I can solve that by checking if
> there is such a buffer, but I suspect there is
> a better way to do these kind of things all in the
> background, rather than the `find-file' and then
> conditionally `kill-buffer' combo.

I don't think there's another way.  

In my opinion, it's not too important a feature; in my own with-file
macro (used by with-files), I didn't check for pre-existing buffers.


> Third (minor) issue is the annoying message that
> `downcase' does. Isn't there a (shut-up (do-stuff))?

I never noted any message from downcase; what do you get?


Perhaps you'd want to use:

(defun what-line-message ()
  "Return a formated string containing the current buffer line number and 
narrowed line number of point."
  (let ((start (point-min))
        (n (line-number-at-pos)))
    (if (= start 1)
        (format "Line %d" n)
        (save-excursion
         (save-restriction
          (widen)
          (format "line %d (narrowed line %d)"
                  (+ n (line-number-at-pos start) -1) n))))))

(what-line-message)
--> "line 79 (narrowed line 72)"

instead of what-line?

You could send a patch to emacs to replace what-line with:

(defun what-line ()
  (interactive)
  (message "%s" (what-line-message)))

and the what-line-message function.  In anycase, it is a basic precept
to never mix I/O with computing in a single function.


-- 
__Pascal Bourguignon__                 http://www.informatimago.com/
“The factory of the future will have only two employees, a man and a
dog. The man will be there to feed the dog. The dog will be there to
keep the man from touching the equipment.” -- Carl Bass CEO Autodesk


reply via email to

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