[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Problem with simple script to clean out an ERC buffer
From: |
Joost Kremers |
Subject: |
Re: Problem with simple script to clean out an ERC buffer |
Date: |
Wed, 06 Jun 2018 14:45:24 +0200 |
User-agent: |
mu4e 1.1.0; emacs 26.1.50 |
On Wed, Jun 06 2018, J. David Boyd wrote:
Yes there is, but it doesn't do anything: erc-cmd-CLEAR
Supposed to "Clear the window content", but the code reads:
(defun erc-cmd-CLEAR ()
"Clear the window content."
(recenter 0)
t)
(put 'erc-cmd-CLEAR 'process-not-needed t)
So not only does it not clear the window, but it seems to be
disabled.
No, the erc source mentions that the `process-not-needed' property
just indicates that the command can be run when the erc process is
not alive. So it's not disabled.
Since erc.el is part of Emacs, you might ask on the emacs-devel
list why this command doesn't seem to do what it advertises and
whether it should be changed to actually "clear the window
content".
Anyway, I like to clear out the buffer so I can reduce my memory
footprint.
If there is anything important in it, I usually grab it and put
it into an org
file.
As for your original question, your function has a bug:
```
(defun clearERCbuffer()
(interactive)
(previous-line)
(end-of-line)
(set-mark(point))
(beginning-of-buffer)
(exchange-point-and-mark)
;; (set-text-properties (point-min) (point-max) nil nil )
(delete-region (point-min) (point-max)))
```
The final function call is `(delete-region (point-min)
(point-max))`, which means that all the point, mark and region
magic you did before that is moot, because you're trying to delete
the entire buffer.
Which is probably why your getting an error: in the part that you
are deleting there's most likely (I don't use erc, so I can't
check) something (a prompt perhaps) that is indeed read-only. What
you probably want is simply `(delete-region)`, except that START
and END aren't optional.
So, I would do something like (untested):
```
(defun clearERCbuffer()
(interactive)
(save-mark-and-excursion
(forward-line -1)
(end-of-line)
(delete-region (point-min) (point))))
```
Some remarks:
- `save-mark-and-excursion` saves point and mark and restores them
after executing its body. This means that point should be back
to where it was before you called the function. Note that if
you're on Emacs 25, you should replace `save-mark-and-excursion`
with `save-excursion`.
- The doc string of `previous-line` suggests it shouldn't be used
in Lisp programs, so I used `(forward-line -1)` instead.
- With `delete-region`, there's no need to create an active region
first. By (temporarily, due to `save-mark-and-excursion`)
positioning the cursor at the end of the previous line, it's
possible to simply use (point) as the END argument to
`delete-region`.
HTH
--
Joost Kremers
Life has its moments
- Problem with simple script to clean out an ERC buffer, J. David Boyd, 2018/06/05
- Re: Problem with simple script to clean out an ERC buffer, Emanuel Berg, 2018/06/06
- Message not available
- Re: Problem with simple script to clean out an ERC buffer, Emanuel Berg, 2018/06/06
- Re: Problem with simple script to clean out an ERC buffer, J. David Boyd, 2018/06/06
- Message not available
- Re: Problem with simple script to clean out an ERC buffer, Emanuel Berg, 2018/06/07
- Re: Problem with simple script to clean out an ERC buffer, J. David Boyd, 2018/06/07
- Re: Problem with simple script to clean out an ERC buffer, Van L, 2018/06/07
- Message not available
- Re: Problem with simple script to clean out an ERC buffer, Emanuel Berg, 2018/06/07
- Re: Problem with simple script to clean out an ERC buffer, Van L, 2018/06/07
- Message not available
- Re: Problem with simple script to clean out an ERC buffer, Emanuel Berg, 2018/06/07
- Re: Problem with simple script to clean out an ERC buffer, Bob Proulx, 2018/06/08