Merge pull request #1586 from npostavs/update-menu

Update package list/menu as packages are installed/removed
This commit is contained in:
Dimitri Fontaine 2014-03-02 23:29:45 +01:00
commit 7e418558b2
2 changed files with 33 additions and 9 deletions

View File

@ -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)))

View File

@ -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))