From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: dboyd2@mmm.com (J. David Boyd) Newsgroups: gmane.emacs.help Subject: Re: Problem with simple script to clean out an ERC buffer Date: Wed, 06 Jun 2018 16:34:20 -0400 Message-ID: References: <86lgbs2tav.fsf@zoho.com> <87a7s8qe1n.fsf@fastmail.fm> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: blaine.gmane.org 1528317179 8557 195.159.176.226 (6 Jun 2018 20:32:59 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 6 Jun 2018 20:32:59 +0000 (UTC) User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (cygwin) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Wed Jun 06 22:32:55 2018 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fQf6x-000237-94 for geh-help-gnu-emacs@m.gmane.org; Wed, 06 Jun 2018 22:32:51 +0200 Original-Received: from localhost ([::1]:54570 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fQf94-0005Im-9e for geh-help-gnu-emacs@m.gmane.org; Wed, 06 Jun 2018 16:35:02 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:57706) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fQf8c-00057y-Ni for help-gnu-emacs@gnu.org; Wed, 06 Jun 2018 16:34:37 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fQf8X-00077L-LT for help-gnu-emacs@gnu.org; Wed, 06 Jun 2018 16:34:34 -0400 Original-Received: from [195.159.176.226] (port=50831 helo=blaine.gmane.org) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fQf8X-00076a-C1 for help-gnu-emacs@gnu.org; Wed, 06 Jun 2018 16:34:29 -0400 Original-Received: from list by blaine.gmane.org with local (Exim 4.84_2) (envelope-from ) id 1fQf6N-0001Ov-KL for help-gnu-emacs@gnu.org; Wed, 06 Jun 2018 22:32:15 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 89 Original-X-Complaints-To: usenet@blaine.gmane.org Cancel-Lock: sha1:ovs1XXF+snG24S2sLc3BMLZZXWU= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 195.159.176.226 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.org gmane.emacs.help:117002 Archived-At: Joost Kremers writes: > 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 Thanks. So that's why I kept getting told that I had read-only text. The prompt is indeed read only, so that makes sense. All your ideas make sense, thanks very much!