[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 8f08bcb 58/76: Cleaned up network display.
From: |
Ian Dunn |
Subject: |
[elpa] master 8f08bcb 58/76: Cleaned up network display. |
Date: |
Thu, 23 Feb 2017 19:42:53 -0500 (EST) |
branch: master
commit 8f08bcb148267da954b0e3421b0da2c74fdd22f7
Author: Ian Dunn <address@hidden>
Commit: Ian Dunn <address@hidden>
Cleaned up network display.
* enwc.el (enwc-details-list): Cleaned up.
(enwc-column-spec): Implemented sorters for channel and strength.
(enwc--update-scan-results, enwc-redisplay-wireless-networks): New
functions.
(enwc-process-scan): Use `enwc--update-scan-results'.
Pop to ENWC buffer if running an interactive scan.
(enwc-display-wireless-networks): Use new sorters.
(enwc-mode): Use `enwc-redisplay-wireless-networks' for revert instead of
scan.
---
lisp/enwc.el | 88 +++++++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 64 insertions(+), 24 deletions(-)
diff --git a/lisp/enwc.el b/lisp/enwc.el
index 8a5e89a..ddd420e 100644
--- a/lisp/enwc.el
+++ b/lisp/enwc.el
@@ -5,6 +5,7 @@
;; Author: Ian Dunn <address@hidden>
;; Keywords: external, network, wicd, manager, nm
;; Version: 2.0
+;; Package-Requires: ((emacs "25.1"))
;; Homepage: https://savannah.nongnu.org/p/enwc
;; This file is part of GNU Emacs.
@@ -34,14 +35,17 @@
;;
;; In order to use this package, add
;;
-;; (require 'enwc-setup)
-;; (enwc-setup)
+;; (require 'enwc)
+;; (enwc-load-default-backend)
;;
;; to your .emacs file (or other init file).
;;; TODO:
;;
;; - Add hooks for scan completion, and possibly upon network connection.
+;; - Wired uses profiles, not networks; Refer to them as such
+;; - Is an association list the best idea for scan results? Perhaps a
structure
+;; would work better?
;;; Code:
@@ -118,18 +122,47 @@ in `enwc-update-mode-line'.")
"Convert signal strength S to a string to dispay."
(format "%s%%" s))
+(defmacro enwc--make-number-sorter (n)
+ `(lambda (a b)
+ (let ((act-a (aref (nth 1 a) ,n))
+ (act-b (aref (nth 1 b) ,n)))
+ (< act-a act-b))))
+
+(defalias 'enwc--str-sorter (enwc--make-number-sorter 0))
+(defalias 'enwc--chnl-sorter (enwc--make-number-sorter 4))
+
(cl-defstruct enwc-column-spec ()
- detail display width conv)
+ detail display sorter width conv)
-(defvar enwc-details-list
+(defconst enwc-details-list
(list
- (make-enwc-column-spec :detail 'strength :display "Str" :conv
#'enwc--print-strength)
- (make-enwc-column-spec :detail 'essid :display "Essid" :conv
#'identity)
- (make-enwc-column-spec :detail 'encrypt :display "Encrypt" :conv
#'identity)
- (make-enwc-column-spec :detail 'bssid :display "Bssid" :conv
#'identity)
- (make-enwc-column-spec :detail 'channel :display "Channel" :conv
#'identity)))
-
-(defvar enwc-last-scan nil
+ (make-enwc-column-spec
+ :detail 'strength
+ :display "Str"
+ :sorter #'enwc--str-sorter
+ :conv #'enwc--print-strength)
+ (make-enwc-column-spec
+ :detail 'essid
+ :display "Essid"
+ :sorter t
+ :conv #'identity)
+ (make-enwc-column-spec
+ :detail 'encrypt
+ :display "Encrypt"
+ :sorter t
+ :conv #'identity)
+ (make-enwc-column-spec
+ :detail 'bssid
+ :display "Bssid"
+ :sorter t
+ :conv #'identity)
+ (make-enwc-column-spec
+ :detail 'channel
+ :display "Channel"
+ :sorter #'enwc--chnl-sorter
+ :conv #'number-to-string)))
+
+(defvar enwc-last-scan (make-hash-table :test #'equal)
"The most recent scan results.
This will be an association list of the form:
@@ -404,23 +437,29 @@ This checks whether or not wired is being used, and runs
the appropriate
(enwc-scan-internal-wired)
(enwc-scan-internal-wireless)))
+(defun enwc--update-scan-results ()
+ (setq enwc-last-scan (make-hash-table :test #'equal))
+ (dolist (ap (enwc-get-networks))
+ (puthash ap (enwc-get-wireless-nw-props ap) enwc-last-scan)))
+
+(defun enwc-redisplay-wireless-networks ()
+ (interactive)
+ (enwc--update-scan-results)
+ (enwc-display-wireless-networks enwc-last-scan))
+
(defun enwc-process-scan (&rest args)
"The scanning callback.
After a scan has been performed, this processes and displays the scan results.
ARGS is only for compatibility with the calling function."
(unless (or enwc-using-wired (not enwc-scan-requested))
- (setq enwc-scan-requested nil
- enwc-access-points (enwc-get-networks))
+ (setq enwc-scan-requested nil)
(when enwc-scan-interactive
(message "Scanning... Done"))
- (setq enwc-last-scan (map-into
- (mapcar
- (lambda (ap)
- `(,ap . ,(enwc-get-wireless-nw-props ap)))
- enwc-access-points)
- 'hash-table))
+ (enwc--update-scan-results)
(enwc-display-wireless-networks enwc-last-scan)
+ (when enwc-scan-interactive
+ (pop-to-buffer "*ENWC*"))
(setq enwc-scan-interactive nil)))
;;;;;;;;;;;;;;;;;;;;;;
@@ -434,6 +473,9 @@ ARGS is only for compatibility with the calling function."
(lambda (detail)
(let ((new-max (seq-max
(map-apply
+ ;; TODO: prin1-to-string isn't the formatter. Use
+ ;; the actual formatter function as specified by
the
+ ;; conv.
(lambda (id nw)
(length (prin1-to-string (alist-get
(enwc-column-spec-detail detail) nw))))
networks)))
@@ -488,10 +530,8 @@ NETWORKS must be in the form returned from
(setq tabulated-list-format
(vconcat
(mapcar
- (lambda (detail)
- (list (enwc-column-spec-display detail)
- (enwc-column-spec-width detail)
- (lambda (a b) (string-lessp (prin1-to-string a)
(prin1-to-string b)))))
+ (pcase-lambda ((cl-struct enwc-column-spec display width sorter))
+ (list display width sorter))
enwc-details-list)))
(setq tabulated-list-entries #'enwc--tabulated-list-entries)
(setq tabulated-list-printer #'enwc--tabulated-list-printer)
@@ -610,7 +650,7 @@ a scan."
(define-derived-mode enwc-mode tabulated-list-mode "enwc"
"Mode for working with network connections.
\\{enwc-mode-map}"
- (add-hook 'tabulated-list-revert-hook 'enwc-scan nil t))
+ (add-hook 'tabulated-list-revert-hook 'enwc-redisplay-wireless-networks nil
t))
(defun enwc-setup-buffer (&optional nomove)
"Sets up the ENWC buffer.
- [elpa] master 6ed7137 43/76: Fix adding to global-mode-string., (continued)
- [elpa] master 6ed7137 43/76: Fix adding to global-mode-string., Ian Dunn, 2017/02/23
- [elpa] master 968e6f0 46/76: Added tag 2.0 for changeset cc2f7aa4ed36, Ian Dunn, 2017/02/23
- [elpa] master 2d5def6 36/76: (*-function): Removed., Ian Dunn, 2017/02/23
- [elpa] master d9cbdb9 39/76: Added some section headers., Ian Dunn, 2017/02/23
- [elpa] master 03a5464 57/76: Changed channel to an integer., Ian Dunn, 2017/02/23
- [elpa] master a6b2b03 61/76: Removed tag 2.0, Ian Dunn, 2017/02/23
- [elpa] master 3491895 14/76: Cleaned up code and consolidated front-end functions., Ian Dunn, 2017/02/23
- [elpa] master 14bcaf4 67/76: Fixed bug with NetworkManager loading, Ian Dunn, 2017/02/23
- [elpa] master 4e43aaf 53/76: Moved editing commands to separate file., Ian Dunn, 2017/02/23
- [elpa] master 141ad1b 65/76: Fixed NetworkManager connection bug., Ian Dunn, 2017/02/23
- [elpa] master 8f08bcb 58/76: Cleaned up network display.,
Ian Dunn <=
- [elpa] master c30c0d7 38/76: Fixed up a lot of security handling problems., Ian Dunn, 2017/02/23
- [elpa] master 710001f 75/76: Removed packages/enwc in preparation for subtree pull., Ian Dunn, 2017/02/23
- [elpa] master da7e3c6 76/76: Add 'packages/enwc/' from commit 'a3c59cce3482babc7c0518e7ff9da246158b9420', Ian Dunn, 2017/02/23