branch: elpa/nix-mode
commit 37f641a9132269bf4c9b36ff312bc8952e2550bc
Author: Matthew Bauer <[email protected]>
Commit: Matthew Bauer <[email protected]>
Add menu to nix search mode
---
nix-search.el | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 80 insertions(+), 12 deletions(-)
diff --git a/nix-search.el b/nix-search.el
index 435e17d45a..38116bf678 100644
--- a/nix-search.el
+++ b/nix-search.el
@@ -27,23 +27,91 @@
(goto-char (point-min))
(json-read)))
+(defface nix-search-pname
+ '((t :height 1.5
+ :weight bold))
+ "Face used for package names."
+ :group 'nix-mode)
+
+(defface nix-search-version
+ '((((class color) (background dark))
+ :foreground "light blue")
+ (((class color) (background light))
+ :foreground "blue"))
+ "Face used for package version."
+ :group 'nix-mode)
+
+(defface nix-search-description
+ '((t))
+ "Face used for package description."
+ :group 'nix-mode)
+
+(defvar nix-search-mode-menu (make-sparse-keymap "Nix")
+ "Menu for Nix Search mode.")
+
+(defvar nix-search-mode-map (make-sparse-keymap)
+ "Local keymap used for Nix Search mode.")
+
+(defvar-local nix-search--filter nil
+ "Search filter used for current buffer")
+(defvar-local nix-search---file nil
+ "File/flake used for current buffer")
+
+(defun nix-search--refresh ()
+ "Refresh Nix Search buffer"
+ (interactive)
+ (let ((results (nix-search--search nix-search--filter nix-search--file nil
use-flakes)))
+ (nix-search--display results (current-buffer) use-flakes
nix-search--filter nix-search--file)))
+
+(defun nix-search-create-keymap ()
+ "Create the keymap associated with the Nix Search mode.")
+
+(defun nix-search-create-menu ()
+ "Create the Nix Search menu as shown in the menu bar."
+ (let ((m '("Nix Search"
+ ["Refresh" nix-search--refresh t])))
+ (easy-menu-define nix-search-mode-menu nix-search-mode-map "Menu keymap
for Nix mode" m)))
+
+(nix-search-create-keymap)
+(nix-search-create-menu)
+
+(define-derived-mode nix-search-mode view-mode "Nix Search"
+ "Major mode for showing Nix search results.
+
+\\{nix-search-mode-map}"
+ :group 'nix-mode
+
+ (easy-menu-add nix-search-mode-menu)
+
+ (read-only-mode 1))
+
;;;###autoload
-(defun nix-search--display (results &optional display-buffer use-flakes)
+(defun nix-search--display (results &optional display-buffer use-flakes search
file)
(unless display-buffer (setq display-buffer (generate-new-buffer "*nix
search*")))
(with-current-buffer display-buffer
- (dolist (entry results)
- (widget-insert
- (format "attr: %s\nname: %s\nversion: %s\ndescription: %s\n\n"
- (car entry)
- (if use-flakes
- (alist-get 'pname (cdr entry))
- (alist-get 'pkgName (cdr entry)))
- (alist-get 'version (cdr entry))
- (alist-get 'description (cdr entry))))))
+ (setq-local nix-search--filter search)
+ (setq-local nix-search--file file)
+ (unless (derived-mode-p 'nix-search-mode)
+ (nix-search-mode))
+ (let ((inhibit-read-only t))
+ (erase-buffer)
+ (insert
"-------------------------------------------------------------------------------\n")
+ (dolist (entry results)
+ (let ((pname (if use-flakes
+ (alist-get 'pname (cdr entry))
+ (alist-get 'pkgName (cdr entry))))
+ (version (alist-get 'version (cdr entry)))
+ (description (alist-get 'description (cdr entry))))
+ (put-text-property 0 (length pname) 'face 'nix-search-pname pname)
+ (put-text-property 0 (length version) 'face 'nix-search-version
version)
+ (put-text-property 0 (length description) 'face
'nix-search-description description)
+ (insert (format "* %s (%s)\n%s\n" pname version description))
+ (insert
"-------------------------------------------------------------------------------\n")
+ ))))
(display-buffer display-buffer))
;;;###autoload
-(defun nix-search (search &optional file)
+(defun nix-search (search &optional file display-buffer)
"Run nix search.
SEARCH a search term to use.
FILE a Nix expression to search in."
@@ -52,7 +120,7 @@ FILE a Nix expression to search in."
(setq file (or file (if use-flakes (nix-read-flake) (nix-read-file))))
(let ((results (nix-search--search search file nil use-flakes)))
(when (called-interactively-p 'any)
- (nix-search--display results nil use-flakes))
+ (nix-search--display results display-buffer use-flakes search file))
results))
(defun nix-search-read-attr (file)