From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Yoni Rabkin Newsgroups: gmane.emacs.devel Subject: Re: improving network utility calls in lisp/net/net-utils.el Date: Fri, 10 Apr 2009 17:09:47 +0300 Message-ID: <87y6u8k3bo.fsf@rabkins.net> References: <87ljq8lk9u.fsf@rabkins.net> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1239372420 6252 80.91.229.12 (10 Apr 2009 14:07:00 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 10 Apr 2009 14:07:00 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Apr 10 16:08:17 2009 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1LsHOt-0008Go-S7 for ged-emacs-devel@m.gmane.org; Fri, 10 Apr 2009 16:08:12 +0200 Original-Received: from localhost ([127.0.0.1]:49410 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LsHNV-0007bM-3f for ged-emacs-devel@m.gmane.org; Fri, 10 Apr 2009 10:06:45 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LsHNP-0007b7-9b for emacs-devel@gnu.org; Fri, 10 Apr 2009 10:06:39 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LsHNK-0007Xk-Da for emacs-devel@gnu.org; Fri, 10 Apr 2009 10:06:38 -0400 Original-Received: from [199.232.76.173] (port=50385 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LsHNK-0007Xd-9z for emacs-devel@gnu.org; Fri, 10 Apr 2009 10:06:34 -0400 Original-Received: from mailgw.comm.net.il ([193.238.208.251]:44121) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LsHNJ-0004M8-6h for emacs-devel@gnu.org; Fri, 10 Apr 2009 10:06:34 -0400 Original-Received: from comm.net.il ([193.238.208.2]) by mailgw.comm.net.il (8.14.1/8.14.1) with ESMTP id n3AFWuum018918 for ; Fri, 10 Apr 2009 18:32:56 +0300 Original-Received: from ardbeg.rabkins.net ([62.56.255.2]) by gondor.icomm.co.il with MailEnable ESMTP; Fri, 10 Apr 2009 17:07:39 +0200 X-Ethics: Use GNU In-Reply-To: (Stefan Monnier's message of "Fri, 10 Apr 2009 09:25:49 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.92 (gnu/linux) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 2) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:110185 Archived-At: --=-=-= Stefan Monnier writes: >> Caveats: Because the call is now synchronous "netstat" will hold up >> Emacs until it competes. Also, font-locking could be better. If this >> patch is accepted I'll work on that as well. > > [ Please make (unified) context diffs rather than plain diffs. I.e. pass > the "-u" arg to `cvs diff'. ] Fixed. Sorry about that. > I think using async processes is preferable, and was done specifically > to avoid holding up Emacs until the process completes. The attached patch runs netstat asynchronously and all of the essentially instantaneous processes synchronously (ifconfig, iwconfig, arp and route). --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=net-utils-improved-utility-calls-2.patch ? net-utils-improved-utility-calls-2.patch ? net-utils-improved-utility-calls.patch ? net-utils.patch ? lisp/mail/subdirs.el ? lisp/nxml/char-name/subdirs.el Index: lisp/net/net-utils.el =================================================================== RCS file: /sources/emacs/emacs/lisp/net/net-utils.el,v retrieving revision 1.37 diff -u -r1.37 net-utils.el --- lisp/net/net-utils.el 5 Jan 2009 03:22:45 -0000 1.37 +++ lisp/net/net-utils.el 10 Apr 2009 14:01:50 -0000 @@ -260,6 +260,43 @@ "Expressions to font-lock for nslookup.") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; General network utilities mode +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defconst net-utils-font-lock-keywords + (list + (list "^[A-Za-z0-9 _]+:" 0 'font-lock-type-face) + ;; Dotted quads + (list + (mapconcat 'identity (make-list 4 "[0-9]+") "\\.") + 0 'font-lock-variable-name-face) + ;; Host names + (list + (let ((host-expression "[-A-Za-z0-9]+")) + (concat + (mapconcat 'identity (make-list 2 host-expression) "\\.") + "\\(\\." host-expression "\\)*")) + 0 'font-lock-variable-name-face)) + "Expressions to font-lock for general network utilities.") + +(define-derived-mode net-utils-mode text-mode "NetworkUtil" + "Major mode for interacting with an external network utility." + (set + (make-local-variable 'font-lock-defaults) + '((net-utils-font-lock-keywords))) + (use-local-map net-utils-mode-map) + (setq buffer-read-only t)) + +(defun net-utils-mode-bury-buffer () + "Wrapper around `bury-buffer' for pop-ups." + (interactive) + (if (one-window-p) + (bury-buffer) + (delete-window))) + +(define-key net-utils-mode-map "q" 'net-utils-mode-bury-buffer) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Utility functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -323,6 +360,34 @@ buf)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; General network utilities (diagnostic) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defun net-utils-run-simple (buffer-name program-name args) + (interactive) + (when (get-buffer buffer-name) + (kill-buffer buffer-name)) + (get-buffer-create buffer-name) + (with-current-buffer buffer-name + (apply 'call-process program-name nil t nil args) + (net-utils-mode) + (goto-char (point-min))) + (display-buffer buffer-name)) + +(defmacro net-utils-defutil (fname program-name args) + `(defun ,fname () + (interactive) + (net-utils-run-simple + (format "*%s*" ,program-name) + ,program-name + ,args))) + +(net-utils-defutil ifconfig ifconfig-program ifconfig-program-options) +(net-utils-defutil iwconfig iwconfig-program iwconfig-program-options) +(net-utils-defutil arp arp-program arp-program-options) +(net-utils-defutil route route-program route-program-options) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Wrappers for external network programs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -341,6 +406,16 @@ options))) ;;;###autoload +(defun netstat () + "Run netstat program." + (interactive) + (net-utils-run-program + "Netstat" + (concat "** Netstat ** " netstat-program " ** ") + netstat-program + netstat-program-options)) + +;;;###autoload (defun ping (host) "Ping HOST. If your system's ping continues until interrupted, you can try setting @@ -357,60 +432,6 @@ ping-program options))) -;;;###autoload -(defun ifconfig () - "Run ifconfig program." - (interactive) - (net-utils-run-program - "Ifconfig" - (concat "** Ifconfig ** " ifconfig-program " ** ") - ifconfig-program - ifconfig-program-options)) - -;; Windows uses this name. -;;;###autoload -(defalias 'ipconfig 'ifconfig) - -;;;###autoload -(defun iwconfig () - "Run iwconfig program." - (interactive) - (net-utils-run-program - "Iwconfig" - (concat "** Iwconfig ** " iwconfig-program " ** ") - iwconfig-program - iwconfig-program-options)) - -;;;###autoload -(defun netstat () - "Run netstat program." - (interactive) - (net-utils-run-program - "Netstat" - (concat "** Netstat ** " netstat-program " ** ") - netstat-program - netstat-program-options)) - -;;;###autoload -(defun arp () - "Run arp program." - (interactive) - (net-utils-run-program - "Arp" - (concat "** Arp ** " arp-program " ** ") - arp-program - arp-program-options)) - -;;;###autoload -(defun route () - "Run route program." - (interactive) - (net-utils-run-program - "Route" - (concat "** Route ** " route-program " ** ") - route-program - route-program-options)) - ;; FIXME -- Needs to be a process filter ;; (defun netstat-with-filter (filter) ;; "Run netstat program." --=-=-= -- "Cut your own wood and it will warm you twice" --=-=-=--