Mercurial > hg > xemacs-beta
comparison lisp/package-ui.el @ 375:a300bb07d72d r21-2b3
Import from CVS: tag r21-2b3
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:04:51 +0200 |
parents | 6240c7796c7a |
children | d883f39b8495 |
comparison
equal
deleted
inserted
replaced
374:4ebeb1a5388b | 375:a300bb07d72d |
---|---|
28 | 28 |
29 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 29 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
30 ;; User-changeable variables: | 30 ;; User-changeable variables: |
31 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 31 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
32 | 32 |
33 (defvar pui-up-to-date-package-face nil | 33 (defgroup pui nil |
34 "The face to use for packages that are up-to-date.") | 34 "Conventient interface to the package system." |
35 | 35 :group 'package-tools |
36 (defvar pui-selected-package-face (get-face 'bold) | 36 :tag "Package User interface" |
37 "The face to use for selected packages. | 37 :prefix "pui-") |
38 Set this to `nil' to use the `default' face.") | 38 |
39 | 39 (defcustom pui-package-install-dest-dir nil |
40 (defvar pui-outdated-package-face (get-face 'red) | 40 "*If non-nil (Automatic) path to package tree to install packages in. |
41 "The face to use for outdated packages. | 41 Otherwise, use old path for installed packages and make a guess for |
42 Set this to `nil' to use the `default' face.") | 42 new ones." |
43 | 43 :group 'pui |
44 (defvar pui-uninstalled-package-face (get-face 'italic) | 44 :tag "Install Location" |
45 "The face to use for uninstalled packages. | 45 :type '(choice (const :tag "Automatic" nil) |
46 Set this to `nil' to use the `default' face.") | 46 (directory))) |
47 | 47 |
48 (defvar pui-list-verbose t | 48 (defcustom pui-list-verbose t |
49 "If non-nil, display verbose info in the package list buffer.") | 49 "*If non-nil, display verbose info in the package list buffer." |
50 :group 'pui | |
51 :tag "Verbose Listing" | |
52 :type 'boolean) | |
53 | |
54 (defcustom pui-up-to-date-package-face nil | |
55 "*The face to use for packages that are up-to-date." | |
56 :group 'pui | |
57 :type 'face) | |
58 | |
59 (defcustom pui-selected-package-face 'bold | |
60 "*The face to use for selected packages. | |
61 Set this to `nil' to use the `default' face." | |
62 :group 'pui | |
63 :type 'face) | |
64 | |
65 (defcustom pui-outdated-package-face 'red | |
66 "*The face to use for outdated packages. | |
67 Set this to `nil' to use the `default' face." | |
68 :group 'pui | |
69 :type 'face) | |
70 | |
71 (defcustom pui-uninstalled-package-face 'italic | |
72 "*The face to use for uninstalled packages. | |
73 Set this to `nil' to use the `default' face." | |
74 :group 'pui | |
75 :type 'face) | |
76 | |
77 | |
78 | |
50 | 79 |
51 (defvar pui-info-buffer "*Packages*" | 80 (defvar pui-info-buffer "*Packages*" |
52 "Buffer to use for displaying package information.") | 81 "Buffer to use for displaying package information.") |
53 | 82 |
54 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 83 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
69 (define-key m "v" 'pui-toggle-verbosity-redisplay) | 98 (define-key m "v" 'pui-toggle-verbosity-redisplay) |
70 (define-key m "d" 'pui-toggle-verbosity-redisplay) | 99 (define-key m "d" 'pui-toggle-verbosity-redisplay) |
71 (define-key m [return] 'pui-toggle-package-key) | 100 (define-key m [return] 'pui-toggle-package-key) |
72 (define-key m "x" 'pui-install-selected-packages) | 101 (define-key m "x" 'pui-install-selected-packages) |
73 (define-key m "I" 'pui-install-selected-packages) | 102 (define-key m "I" 'pui-install-selected-packages) |
103 (define-key m "r" 'pui-add-required-packages) | |
74 (define-key m "n" 'next-line) | 104 (define-key m "n" 'next-line) |
75 (define-key m "+" 'next-line) | 105 (define-key m "+" 'next-line) |
76 (define-key m "p" 'previous-line) | 106 (define-key m "p" 'previous-line) |
77 (define-key m "-" 'previous-line) | 107 (define-key m "-" 'previous-line) |
78 m) | 108 m) |
80 | 110 |
81 (defvar pui-package-keymap | 111 (defvar pui-package-keymap |
82 (let ((m (make-sparse-keymap))) | 112 (let ((m (make-sparse-keymap))) |
83 (set-keymap-name m 'pui-package-keymap) | 113 (set-keymap-name m 'pui-package-keymap) |
84 (define-key m 'button2 'pui-toggle-package-event) | 114 (define-key m 'button2 'pui-toggle-package-event) |
85 (define-key m 'button3 'pui-toggle-package-event) | 115 ;; We use a popup menu |
116 ;; (define-key m 'button3 'pui-toggle-package-event) | |
86 m) | 117 m) |
87 "Keymap to use over package names/descriptions.") | 118 "Keymap to use over package names/descriptions.") |
88 | 119 |
89 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 120 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
90 ;; End of variables | 121 ;; End of variables |
207 (setq sym-char "+") | 238 (setq sym-char "+") |
208 ) | 239 ) |
209 (progn | 240 (progn |
210 (setq disp (pui-package-symbol-char pkg-sym version)) | 241 (setq disp (pui-package-symbol-char pkg-sym version)) |
211 (setq sym-char (car disp)) | 242 (setq sym-char (car disp)) |
212 (if (cdr disp) | 243 (if (car (cdr disp)) |
213 (set-extent-face extent (car (cdr disp))) | 244 (set-extent-face extent (get-face (car (cdr disp)))) |
214 (set-extent-face extent (get-face 'default))) | 245 (set-extent-face extent (get-face 'default))) |
215 )) | 246 )) |
216 (save-excursion | 247 (save-excursion |
217 (goto-char (extent-start-position extent)) | 248 (goto-char (extent-start-position extent)) |
218 (delete-char 1) | 249 (delete-char 1) |
299 (erase-buffer package-admin-temp-buffer) | 330 (erase-buffer package-admin-temp-buffer) |
300 ) | 331 ) |
301 (message "Installing selected packages ...") (sit-for 0) | 332 (message "Installing selected packages ...") (sit-for 0) |
302 (if (catch 'done | 333 (if (catch 'done |
303 (mapcar (lambda (pkg) | 334 (mapcar (lambda (pkg) |
304 (if (not (package-get-all pkg nil)) | 335 (if (not (package-get pkg |
336 pui-package-install-dest-dir)) | |
305 (throw 'done nil))) | 337 (throw 'done nil))) |
306 pui-selected-packages) | 338 pui-selected-packages) |
307 t) | 339 t) |
308 (progn | 340 (progn |
309 (pui-list-packages) | 341 (pui-list-packages) |
313 (clear-message) | 345 (clear-message) |
314 ) | 346 ) |
315 ) | 347 ) |
316 (error "No packages have been selected!")) | 348 (error "No packages have been selected!")) |
317 )) | 349 )) |
350 | |
351 (defun pui-add-required-packages () | |
352 "Select packages required by those already selected for installation." | |
353 (interactive) | |
354 (let ((tmpbuf "*Required-Packages*") do-select) | |
355 (if pui-selected-packages | |
356 (let ((dependencies (package-get-dependencies pui-selected-packages))) | |
357 ;; Don't change window config when asking the user if he really | |
358 ;; wants to add the packages. We do this to avoid messing up | |
359 ;; the window configuration if errors occur (we don't want to | |
360 ;; display random buffers in addition to the error buffer, if | |
361 ;; errors occur, which would normally be caused by display-buffer). | |
362 (save-window-excursion | |
363 (with-output-to-temp-buffer tmpbuf | |
364 (display-completion-list (sort | |
365 (mapcar #'(lambda (pkg) | |
366 (symbol-name pkg)) | |
367 dependencies) | |
368 'string<) | |
369 :activate-callback nil | |
370 :help-string "Required packages:\n" | |
371 :completion-string t)) | |
372 (setq tmpbuf (get-buffer-create tmpbuf)) | |
373 (display-buffer tmpbuf) | |
374 (setq do-select (y-or-n-p "Select these packages? ")) | |
375 (kill-buffer tmpbuf)) | |
376 (if do-select | |
377 (progn | |
378 (setq pui-selected-packages | |
379 (union pui-selected-packages dependencies)) | |
380 (map-extents #'(lambda (extent maparg) | |
381 (pui-update-package-display extent)) | |
382 nil nil nil nil nil 'pui) | |
383 (message "added dependencies")) | |
384 (clear-message))) | |
385 (error "No packages have been selected!")))) | |
318 | 386 |
319 (defun pui-help-echo (extent &optional force-update) | 387 (defun pui-help-echo (extent &optional force-update) |
320 "Display additional package info in the modeline. | 388 "Display additional package info in the modeline. |
321 EXTENT determines the package to display (the package information is | 389 EXTENT determines the package to display (the package information is |
322 attached to the extent as properties)." | 390 attached to the extent as properties)." |
369 available. | 437 available. |
370 | 438 |
371 Useful keys: | 439 Useful keys: |
372 | 440 |
373 `\\[pui-toggle-package-key]' to select/unselect the current package for installation. | 441 `\\[pui-toggle-package-key]' to select/unselect the current package for installation. |
442 `\\[pui-add-required-packages]' to add any packages required by those selected. | |
374 `\\[pui-install-selected-packages]' to install selected packages. | 443 `\\[pui-install-selected-packages]' to install selected packages. |
375 `\\[pui-display-info]' to display additional information about the package in the modeline. | 444 `\\[pui-display-info]' to display additional information about the package in the modeline. |
376 `\\[pui-list-packages]' to refresh the package list. | 445 `\\[pui-list-packages]' to refresh the package list. |
377 `\\[pui-toggle-verbosity-redisplay]' to toggle between a verbose and non-verbose display. | 446 `\\[pui-toggle-verbosity-redisplay]' to toggle between a verbose and non-verbose display. |
378 `\\[pui-quit]' to kill this buffer. | 447 `\\[pui-quit]' to kill this buffer. |
379 ") | 448 ") |
380 )) | 449 )) |
450 | |
451 (defvar pui-menu | |
452 '("Packages" | |
453 ["Select" pui-toggle-package-key t] | |
454 ["Info" pui-display-info t] | |
455 "---" | |
456 ["Add Required" pui-add-required-packages t] | |
457 ["Install Selected" pui-install-selected-packages t] | |
458 "---" | |
459 ["Verbose" pui-toggle-verbosity-redisplay | |
460 :active t :style toggle :selected pui-list-verbose] | |
461 ["Refresh" pui-list-packages t] | |
462 ["Help" pui-help t] | |
463 ["Quit" pui-quit t])) | |
464 | |
381 | 465 |
382 ;;;###autoload | 466 ;;;###autoload |
383 (defun pui-list-packages () | 467 (defun pui-list-packages () |
384 "List all packages and package information. | 468 "List all packages and package information. |
385 The package name, version, and description are displayed. From the displayed | 469 The package name, version, and description are displayed. From the displayed |
386 buffer, the user can see which packages are installed, which are not, and | 470 buffer, the user can see which packages are installed, which are not, and |
387 which are out-of-date (a newer version is available). The user can then | 471 which are out-of-date (a newer version is available). The user can then |
388 select packages for installation via the keyboard or mouse." | 472 select packages for installation via the keyboard or mouse." |
389 (interactive) | 473 (interactive) |
474 (package-get-require-base) | |
390 (let ( (outbuf (get-buffer-create pui-info-buffer)) | 475 (let ( (outbuf (get-buffer-create pui-info-buffer)) |
391 (sep-string "===============================================================================\n") | 476 (sep-string "===============================================================================\n") |
392 start ) | 477 start ) |
393 (message "Creating package list ...") (sit-for 0) | 478 (message "Creating package list ...") (sit-for 0) |
394 (set-buffer outbuf) | 479 (set-buffer outbuf) |
450 (forward-line -1) | 535 (forward-line -1) |
451 (end-of-line) | 536 (end-of-line) |
452 (point))) | 537 (point))) |
453 ) | 538 ) |
454 (setq extent (make-extent b e)) | 539 (setq extent (make-extent b e)) |
455 (if (cdr disp) | 540 (if (car (cdr disp)) |
456 (set-extent-face extent (car (cdr disp))) | 541 (set-extent-face extent (get-face (car (cdr disp)))) |
457 (set-extent-face extent (get-face 'default))) | 542 (set-extent-face extent (get-face 'default))) |
458 (set-extent-property extent 'highlight t) | 543 (set-extent-property extent 'highlight t) |
459 (set-extent-property extent 'pui t) | 544 (set-extent-property extent 'pui t) |
460 (set-extent-property extent 'pui-package pkg-sym) | 545 (set-extent-property extent 'pui-package pkg-sym) |
461 (set-extent-property extent 'pui-info info) | 546 (set-extent-property extent 'pui-info info) |
472 (setq buffer-read-only t) | 557 (setq buffer-read-only t) |
473 (pop-to-buffer outbuf) | 558 (pop-to-buffer outbuf) |
474 (delete-other-windows) | 559 (delete-other-windows) |
475 (goto-char start) | 560 (goto-char start) |
476 (setq pui-selected-packages nil) ; Reset list | 561 (setq pui-selected-packages nil) ; Reset list |
562 (when (featurep 'menubar) | |
563 (set-buffer-menubar current-menubar) | |
564 (add-submenu '() pui-menu) | |
565 (setq mode-popup-menu pui-menu)) | |
477 (clear-message) | 566 (clear-message) |
478 ; (message (substitute-command-keys "Press `\\[pui-help]' for help.")) | 567 ; (message (substitute-command-keys "Press `\\[pui-help]' for help.")) |
479 )) | 568 )) |
480 | 569 |
570 | |
481 (provide 'package-ui) | 571 (provide 'package-ui) |
482 | 572 |
483 ;;; package-ui.el ends here | 573 ;;; package-ui.el ends here |