From: Thierry Volpiatto <thierry.volpiatto@gmail.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: 13831@debbugs.gnu.org
Subject: bug#13831: 24.3.50; [PATCH] net-utils-mode have no revert-buffer function
Date: Fri, 01 Mar 2013 08:02:34 +0100 [thread overview]
Message-ID: <87zjyny54l.fsf@gmail.com> (raw)
In-Reply-To: <jwv1ubzj03d.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Thu, 28 Feb 2013 22:05:06 -0500")
Hi Stefan,
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Indeed yes, tried this very early this morning.
>> Just tried now and it is working,
>
> Thanks.
>
>> but point move at eof, it should stay on top of buffer.
>
> I think the difference between the initial run and the revert is that
> for the initial run, the traceroute buffer is not in the
> selected-window, whereas in the revert case, it is the selected-window.
>
> Apparently the behavior is partly on purpose, since
> net-utils-remove-ctrl-m-filter (which, BTW, should use
> with-current-buffer rather than unwind-protect) explicitly moves point.
Here your patch modified, I have simplified
`net-utils-remove-ctrl-m-filter'.
diff --git a/lisp/net/net-utils.el b/lisp/net/net-utils.el
index 28fd5c6..5fe8d35 100644
--- a/lisp/net/net-utils.el
+++ b/lisp/net/net-utils.el
@@ -285,7 +285,8 @@ This variable is only used if the variable
(define-derived-mode net-utils-mode special-mode "NetworkUtil"
"Major mode for interacting with an external network utility."
(set (make-local-variable 'font-lock-defaults)
- '((net-utils-font-lock-keywords))))
+ '((net-utils-font-lock-keywords)))
+ (setq-local revert-buffer-function #'net-utils--revert-function))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Utility functions
@@ -318,25 +319,18 @@ This variable is only used if the variable
(defun net-utils-remove-ctrl-m-filter (process output-string)
"Remove trailing control Ms."
- (let ((old-buffer (current-buffer))
- (filtered-string output-string))
- (unwind-protect
- (let ((moving))
- (set-buffer (process-buffer process))
- (let ((inhibit-read-only t))
- (setq moving (= (point) (process-mark process)))
-
- (while (string-match "\r" filtered-string)
- (setq filtered-string
- (replace-match "" nil nil filtered-string)))
-
- (save-excursion
- ;; Insert the text, moving the process-marker.
- (goto-char (process-mark process))
- (insert filtered-string)
- (set-marker (process-mark process) (point))))
- (if moving (goto-char (process-mark process))))
- (set-buffer old-buffer))))
+ (save-selected-window
+ (set-buffer (process-buffer process))
+ (save-excursion
+ (let ((inhibit-read-only t)
+ (filtered-string output-string))
+ (while (string-match "\r" filtered-string)
+ (setq filtered-string
+ (replace-match "" nil nil filtered-string)))
+ ;; Insert the text, moving the process-marker.
+ (goto-char (process-mark process))
+ (insert filtered-string)
+ (set-marker (process-mark process) (point))))))
(defun net-utils-run-program (name header program args)
"Run a network information program."
@@ -354,20 +348,38 @@ This variable is only used if the variable
;; General network utilities (diagnostic)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun net-utils-run-simple (buffer-name program-name args)
+;; Todo: This data could be saved in a bookmark.
+(defvar net-utils--revert-cmd nil)
+
+(defun net-utils-run-simple (buffer program-name args)
"Run a network utility for diagnostic output only."
- (interactive)
- (when (get-buffer buffer-name)
- (kill-buffer buffer-name))
- (get-buffer-create buffer-name)
- (with-current-buffer buffer-name
+ (with-current-buffer (if (stringp buffer) (get-buffer-create buffer) buffer)
+ (let ((proc (get-buffer-process (current-buffer))))
+ (when proc
+ (set-process-filter proc nil)
+ (delete-process proc)))
+ (let ((inhibit-read-only t))
+ (erase-buffer))
(net-utils-mode)
+ (setq-local net-utils--revert-cmd
+ `(net-utils-run-simple ,(current-buffer) ,program-name ,args))
(set-process-filter
- (apply 'start-process (format "%s" program-name)
- buffer-name program-name args)
+ (apply 'start-process program-name
+ (current-buffer) program-name args)
'net-utils-remove-ctrl-m-filter)
- (goto-char (point-min)))
- (display-buffer buffer-name))
+ (goto-char (point-min))
+ (display-buffer (current-buffer))))
+
+(defun net-utils--revert-function (&optional ignore-auto noconfirm)
+ (message "Reverting `%s'..." (buffer-name))
+ (apply (car net-utils--revert-cmd) (cdr net-utils--revert-cmd))
+ (let ((proc (get-buffer-process (current-buffer))))
+ (when proc
+ (set-process-sentinel
+ proc
+ (lambda (process event)
+ (when (string= event "finished\n")
+ (message "Reverting `%s' done" (process-buffer process))))))))
;;;###autoload
(defun ifconfig ()
@@ -428,9 +440,8 @@ This variable is only used if the variable
(if traceroute-program-options
(append traceroute-program-options (list target))
(list target))))
- (net-utils-run-program
+ (net-utils-run-simple
(concat "Traceroute" " " target)
- (concat "** Traceroute ** " traceroute-program " ** " target)
traceroute-program
options)))
--
Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997
next prev parent reply other threads:[~2013-03-01 7:02 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-27 9:30 bug#13831: 24.3.50; [PATCH] net-utils-mode have no revert-buffer function Thierry Volpiatto
2013-02-27 9:48 ` Thierry Volpiatto
2013-02-27 10:11 ` Andreas Schwab
2013-02-27 10:50 ` Thierry Volpiatto
2013-02-27 11:57 ` Andreas Schwab
2013-02-27 12:03 ` Thierry Volpiatto
2013-02-27 14:08 ` Stefan Monnier
2013-02-27 14:35 ` Thierry Volpiatto
2013-02-27 15:25 ` Stefan Monnier
2013-02-27 16:36 ` Thierry Volpiatto
2013-02-28 4:51 ` Stefan Monnier
2013-02-28 6:18 ` Thierry Volpiatto
2013-02-28 14:04 ` Stefan Monnier
2013-02-28 19:45 ` Thierry Volpiatto
2013-03-01 3:05 ` Stefan Monnier
2013-03-01 7:02 ` Thierry Volpiatto [this message]
2013-03-01 14:29 ` Stefan Monnier
2013-03-01 15:22 ` Thierry Volpiatto
2013-03-01 17:28 ` Stefan Monnier
2013-03-01 19:07 ` Thierry Volpiatto
2013-03-11 18:31 ` Stefan Monnier
2013-03-13 14:43 ` Thierry Volpiatto
2013-03-13 17:52 ` Stefan Monnier
2013-03-13 20:12 ` Thierry Volpiatto
2013-03-03 6:16 ` Thierry Volpiatto
2013-03-01 14:30 ` Thierry Volpiatto
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87zjyny54l.fsf@gmail.com \
--to=thierry.volpiatto@gmail.com \
--cc=13831@debbugs.gnu.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).