emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/nix-mode 37f641a913 434/500: Add menu to nix search mode


From: ELPA Syncer
Subject: [nongnu] elpa/nix-mode 37f641a913 434/500: Add menu to nix search mode
Date: Sat, 29 Jan 2022 08:27:52 -0500 (EST)

branch: elpa/nix-mode
commit 37f641a9132269bf4c9b36ff312bc8952e2550bc
Author: Matthew Bauer <mjbauer95@gmail.com>
Commit: Matthew Bauer <mjbauer95@gmail.com>

    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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]