branch: elpa/nix-mode commit 37f641a9132269bf4c9b36ff312bc8952e2550bc Author: Matthew Bauer <mjbaue...@gmail.com> Commit: Matthew Bauer <mjbaue...@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)