mirror of
https://github.com/dimitri/el-get.git
synced 2024-09-29 04:58:53 +08:00
Merge pull request #1586 from npostavs/update-menu
Update package list/menu as packages are installed/removed
This commit is contained in:
commit
7e418558b2
|
@ -19,6 +19,10 @@
|
|||
(require 'el-get-core)
|
||||
(require 'cl)
|
||||
|
||||
(defvar el-get-package-menu-buffer nil
|
||||
"Global var holding pointing to the package menu buffer, so
|
||||
that it can be updated from `el-get-save-package-status'")
|
||||
|
||||
(define-button-type 'el-get-help-package-def
|
||||
:supertype 'help-xref
|
||||
'help-function (lambda (package) (find-file (el-get-recipe-filename package)))
|
||||
|
@ -273,7 +277,6 @@ in el-get package menu."
|
|||
(el-get-remove package-name)
|
||||
(message "Deleting %s..." package-name))))
|
||||
(forward-line))
|
||||
(el-get-package-menu-revert)
|
||||
(goto-char current-point)
|
||||
(beginning-of-line)))
|
||||
|
||||
|
@ -301,12 +304,19 @@ in el-get package menu."
|
|||
(define-key el-get-package-menu-mode-map "h" 'el-get-package-menu-quick-help)
|
||||
(define-key el-get-package-menu-mode-map "q" 'quit-window))
|
||||
|
||||
(defun el-get-package-on-kill ()
|
||||
"Add this to `kill-buffer-query-functions' to clear `el-get-package-menu-buffer'."
|
||||
(setq el-get-package-menu-buffer nil)
|
||||
t)
|
||||
|
||||
(defun el-get-package-menu-mode ()
|
||||
"Major mode for browsing a list of packages.
|
||||
|
||||
\\{el-get-package-menu-mode-map}"
|
||||
(kill-all-local-variables)
|
||||
(use-local-map el-get-package-menu-mode-map)
|
||||
(add-hook 'kill-buffer-query-functions #'el-get-package-on-kill t t)
|
||||
(setq el-get-package-menu-buffer (current-buffer))
|
||||
(setq major-mode 'el-get-package-menu-mode)
|
||||
(setq mode-name "Package-Menu")
|
||||
(setq buffer-read-only t)
|
||||
|
@ -315,7 +325,7 @@ in el-get package menu."
|
|||
(run-mode-hooks 'el-get-package-menu-mode-hook)
|
||||
(run-hooks 'el-get-package-menu-mode-hook)))
|
||||
|
||||
(defun el-get-print-package (package-name status desc)
|
||||
(defun el-get-print-package (package-name status &optional desc)
|
||||
(let ((face
|
||||
(cond
|
||||
((string= status "installed")
|
||||
|
@ -328,15 +338,14 @@ in el-get package menu."
|
|||
(setq status "available")
|
||||
'default))))
|
||||
(indent-to 2 1)
|
||||
(insert (propertize package-name 'font-lock-face face))
|
||||
(insert package-name)
|
||||
(indent-to 30 1)
|
||||
(insert (propertize status 'font-lock-face face))
|
||||
(insert status)
|
||||
(when desc
|
||||
(indent-to 41 1)
|
||||
(insert (propertize
|
||||
(replace-regexp-in-string "\n" " " desc)
|
||||
'font-lock-face face)))
|
||||
(insert "\n")))
|
||||
(insert (replace-regexp-in-string "\n" " " desc) "\n"))
|
||||
(put-text-property (line-beginning-position) (line-end-position)
|
||||
'font-lock-face face)))
|
||||
|
||||
(defun el-get-list-all-packages ()
|
||||
(with-current-buffer (get-buffer-create "*el-get packages*")
|
||||
|
@ -364,7 +373,7 @@ in el-get package menu."
|
|||
(let ((package-name (el-get-as-string (plist-get package :name))))
|
||||
(el-get-print-package package-name
|
||||
(el-get-read-package-status package-name)
|
||||
(plist-get package :description))))
|
||||
(or (plist-get package :description) ""))))
|
||||
packages))
|
||||
(goto-char (point-min))
|
||||
(current-buffer)))
|
||||
|
|
|
@ -48,6 +48,7 @@
|
|||
package-name
|
||||
(intern (format ":%s" package-name))))
|
||||
|
||||
(defvar el-get-package-menu-buffer) ; from el-get-list-packages.el
|
||||
(defun el-get-save-package-status (package status &optional recipe)
|
||||
"Save given package status"
|
||||
(let* ((package (el-get-as-symbol package))
|
||||
|
@ -74,6 +75,20 @@
|
|||
(insert (el-get-print-to-string new-package-status-alist 'pretty)))
|
||||
;; Update cache
|
||||
(setq el-get-status-cache new-package-status-alist)
|
||||
;; Update package menu, if it exists
|
||||
(save-excursion
|
||||
(when (and (bound-and-true-p el-get-package-menu-buffer)
|
||||
(buffer-live-p el-get-package-menu-buffer)
|
||||
(set-buffer el-get-package-menu-buffer)
|
||||
(eq major-mode 'el-get-package-menu-mode))
|
||||
(goto-char (point-min))
|
||||
(let ((inhibit-read-only t)
|
||||
(name (el-get-package-name package)))
|
||||
(re-search-forward
|
||||
(format "^..%s[[:blank:]]+[^[:blank:]]+"
|
||||
(regexp-quote name)))
|
||||
(delete-region (match-beginning 0) (match-end 0))
|
||||
(el-get-print-package name status))))
|
||||
;; Return the new alist
|
||||
new-package-status-alist))
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user