diff --git a/el-get-list-packages.el b/el-get-list-packages.el index 16c6e3be..14d0628f 100644 --- a/el-get-list-packages.el +++ b/el-get-list-packages.el @@ -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))) diff --git a/el-get-status.el b/el-get-status.el index cec561ba..346f1cf8 100644 --- a/el-get-status.el +++ b/el-get-status.el @@ -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))