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: improving network utility calls in lisp/net/net-utils.el Date: Fri, 10 Apr 2009 16:18:21 +0300 Message-ID: <87ljq8lk9u.fsf@rabkins.net> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: ger.gmane.org 1239369332 29777 80.91.229.12 (10 Apr 2009 13:15:32 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 10 Apr 2009 13:15:32 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Apr 10 15:16:50 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 1LsGbA-0005FA-8H for ged-emacs-devel@m.gmane.org; Fri, 10 Apr 2009 15:16:48 +0200 Original-Received: from localhost ([127.0.0.1]:60373 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LsGZl-0008LM-Rs for ged-emacs-devel@m.gmane.org; Fri, 10 Apr 2009 09:15:21 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LsGZg-0008LH-PM for emacs-devel@gnu.org; Fri, 10 Apr 2009 09:15:16 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LsGZb-0008L5-Hw for emacs-devel@gnu.org; Fri, 10 Apr 2009 09:15:15 -0400 Original-Received: from [199.232.76.173] (port=36747 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LsGZb-0008L2-9J for emacs-devel@gnu.org; Fri, 10 Apr 2009 09:15:11 -0400 Original-Received: from mailgw.comm.net.il ([193.238.208.251]:50352) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LsGZa-0003qV-3f for emacs-devel@gnu.org; Fri, 10 Apr 2009 09:15:11 -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 n3AEfVuF017960 for ; Fri, 10 Apr 2009 17:41:31 +0300 Original-Received: from ardbeg.rabkins.net ([62.56.255.2]) by gondor.icomm.co.il with MailEnable ESMTP; Fri, 10 Apr 2009 16:16:14 +0200 X-Ethics: Use GNU 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:110183 Archived-At: --=-=-= Hello, I am using GNU Emacs 23.0.92.1 (i686-pc-linux-gnu, GTK+ Version 2.12.9) of 2009-04-10 lisp/net/net-utils.el currently provides the eponymously named functions: M-x ifconfig, M-x iwconfig, M-x route etc. These functions display the "diagnostic", that is, non-interactive outputs of the network utilities with the same name. But net-utils.el calls those processes asynchronously with `start-process' and displays the raw result in an editable buffer. The following patch makes calling the non-interactive diagnostic network utilities synchronous, and provides a read-only mode for viewing, font-locking and burying the buffers with `q'. 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. Attached is the patch made with: ~/src/emacs$ cvs diff > net-utils-improved-utility-calls.patch --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=net-utils-improved-utility-calls.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 -r1.37 net-utils.el 262a263,299 > ;; 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) > > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 325a363,391 > ;; 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 netstat netstat-program netstat-program-options) > (net-utils-defutil arp arp-program arp-program-options) > (net-utils-defutil route route-program route-program-options) > > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 360,413d425 < ;;;###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)) < --=-=-= -- "Cut your own wood and it will warm you twice" --=-=-=--