Mercurial > hg > xemacs-beta
comparison lisp/package-ui.el @ 442:abe6d1db359e r21-2-36
Import from CVS: tag r21-2-36
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:35:02 +0200 |
parents | 8de8e3f6228a |
children | d7a9135ec789 |
comparison
equal
deleted
inserted
replaced
441:72a7cfa4a488 | 442:abe6d1db359e |
---|---|
29 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 29 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
30 ;; User-changeable variables: | 30 ;; User-changeable variables: |
31 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 31 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
32 | 32 |
33 (defgroup pui nil | 33 (defgroup pui nil |
34 "Conventient interface to the package system." | 34 "Convenient interface to the package system." |
35 :group 'package-tools | 35 :group 'package-tools |
36 :tag "Package User interface" | 36 :tag "Package User interface" |
37 :prefix "pui-") | 37 :prefix "pui-") |
38 | 38 |
39 (defcustom pui-package-install-dest-dir nil | 39 (defcustom pui-package-install-dest-dir nil |
138 ;; Configuration routines | 138 ;; Configuration routines |
139 | 139 |
140 (defun pui-directory-exists (dir) | 140 (defun pui-directory-exists (dir) |
141 "Check to see if DIR exists in `package-get-remote'." | 141 "Check to see if DIR exists in `package-get-remote'." |
142 (let (found) | 142 (let (found) |
143 (mapcar '(lambda (item) | 143 (mapcar #'(lambda (item) |
144 (if (and (null (car item)) | 144 (if (and (null (car item)) |
145 (string-equal (file-name-as-directory (car (cdr item))) | 145 (string-equal (file-name-as-directory (car (cdr item))) |
146 (file-name-as-directory dir))) | 146 (file-name-as-directory dir))) |
147 (setq found t)) | 147 (setq found t))) |
148 ) package-get-remote) | 148 package-get-remote) |
149 found | 149 found |
150 )) | 150 )) |
151 | 151 |
152 (defun pui-package-dir-list (buffer) | 152 (defun pui-package-dir-list (buffer) |
153 "In BUFFER, format the list of package binary paths." | 153 "In BUFFER, format the list of package binary paths." |
307 (if (member pkg-sym pui-deleted-packages) | 307 (if (member pkg-sym pui-deleted-packages) |
308 (setq pui-deleted-packages | 308 (setq pui-deleted-packages |
309 (delete pkg-sym pui-deleted-packages)) | 309 (delete pkg-sym pui-deleted-packages)) |
310 (setq pui-deleted-packages | 310 (setq pui-deleted-packages |
311 (cons pkg-sym pui-deleted-packages)) | 311 (cons pkg-sym pui-deleted-packages)) |
312 (setq pui-seleted-packages | 312 (setq pui-selected-packages |
313 (delete pkg-sym pui-selected-packages))) | 313 (delete pkg-sym pui-selected-packages))) |
314 (pui-update-package-display extent pkg-sym) | 314 (pui-update-package-display extent pkg-sym) |
315 )) | 315 )) |
316 | 316 |
317 | 317 |
356 (let ( (tmpbuf "*Packages-To-Remove*") do-delete) | 356 (let ( (tmpbuf "*Packages-To-Remove*") do-delete) |
357 (when pui-deleted-packages | 357 (when pui-deleted-packages |
358 (save-window-excursion | 358 (save-window-excursion |
359 (with-output-to-temp-buffer tmpbuf | 359 (with-output-to-temp-buffer tmpbuf |
360 (display-completion-list (sort | 360 (display-completion-list (sort |
361 (mapcar '(lambda (pkg) | 361 (mapcar #'symbol-name pui-deleted-packages) |
362 (symbol-name pkg) | 362 #'string<) |
363 ) | |
364 pui-deleted-packages) | |
365 'string<) | |
366 :activate-callback nil | 363 :activate-callback nil |
367 :help-string "Packages selected for removal:\n" | 364 :help-string "Packages selected for removal:\n" |
368 :completion-string t | 365 :completion-string t |
369 )) | 366 )) |
370 (setq tmpbuf (get-buffer-create tmpbuf)) | 367 (setq tmpbuf (get-buffer-create tmpbuf)) |
387 ;; the window configuration if errors occur (we don't want to | 384 ;; the window configuration if errors occur (we don't want to |
388 ;; display random buffers in addition to the error buffer, if | 385 ;; display random buffers in addition to the error buffer, if |
389 ;; errors occur, which would normally be caused by display-buffer). | 386 ;; errors occur, which would normally be caused by display-buffer). |
390 (save-window-excursion | 387 (save-window-excursion |
391 (with-output-to-temp-buffer tmpbuf | 388 (with-output-to-temp-buffer tmpbuf |
392 (display-completion-list (sort | 389 (display-completion-list |
393 (mapcar '(lambda (pkg) | 390 (sort (mapcar #'symbol-name pui-selected-packages) #'string<) |
394 (symbol-name pkg) | 391 :activate-callback nil |
395 ) | 392 :help-string "Packages selected for installation:\n" |
396 pui-selected-packages) | 393 :completion-string t |
397 'string<) | 394 )) |
398 :activate-callback nil | |
399 :help-string "Packages selected for installation:\n" | |
400 :completion-string t | |
401 )) | |
402 (setq tmpbuf (get-buffer-create tmpbuf)) | 395 (setq tmpbuf (get-buffer-create tmpbuf)) |
403 (display-buffer tmpbuf) | 396 (display-buffer tmpbuf) |
404 (setq do-install (y-or-n-p "Install these packages? ")) | 397 (setq do-install (y-or-n-p "Install these packages? ")) |
405 (kill-buffer tmpbuf) | 398 (kill-buffer tmpbuf) |
406 ) | 399 ) |
526 (if no-error | 519 (if no-error |
527 (clear-message nil) | 520 (clear-message nil) |
528 (error "No package under cursor!"))) | 521 (error "No package under cursor!"))) |
529 ))) | 522 ))) |
530 | 523 |
531 ;;; "Why is there no standard function to do this?" | |
532 (defun pui-popup-context-sensitive (event) | |
533 (interactive "e") | |
534 (save-excursion | |
535 (set-buffer (event-buffer event)) | |
536 (goto-char (event-point event)) | |
537 (popup-menu pui-menu event) | |
538 ;; I agree with dired.el - this is seriously bogus. | |
539 (while (popup-menu-up-p) | |
540 (dispatch-event (next-event))))) | |
541 | |
542 (defvar pui-menu | 524 (defvar pui-menu |
543 '("Packages" | 525 '("Packages" |
544 ["Toggle install " pui-toggle-package-key :active (pui-current-package) :suffix (format "`%s'" (or (pui-current-package) "..."))] | 526 ["Toggle install " pui-toggle-package-key :active (pui-current-package) :suffix (format "`%s'" (or (pui-current-package) "..."))] |
545 ["Toggle delete " pui-toggle-package-delete-key :active (pui-current-package) :suffix (format "`%s'" (or (pui-current-package) "..."))] | 527 ["Toggle delete " pui-toggle-package-delete-key :active (pui-current-package) :suffix (format "`%s'" (or (pui-current-package) "..."))] |
546 ["Info on" pui-display-info :active (pui-current-package) :suffix (format "`%s'" (or (pui-current-package) "..."))] | 528 ["Info on" pui-display-info :active (pui-current-package) :suffix (format "`%s'" (or (pui-current-package) "..."))] |
552 :active t :style toggle :selected pui-list-verbose] | 534 :active t :style toggle :selected pui-list-verbose] |
553 ["Refresh" pui-list-packages t] | 535 ["Refresh" pui-list-packages t] |
554 ["Help" pui-help t] | 536 ["Help" pui-help t] |
555 ["Quit" pui-quit t])) | 537 ["Quit" pui-quit t])) |
556 | 538 |
539 ;;; "Why is there no standard function to do this?" | |
540 (defun pui-popup-context-sensitive (event) | |
541 (interactive "e") | |
542 (save-excursion | |
543 (set-buffer (event-buffer event)) | |
544 (goto-char (event-point event)) | |
545 (popup-menu pui-menu event) | |
546 ;; I agree with dired.el - this is seriously bogus. | |
547 (while (popup-up-p) | |
548 (dispatch-event (next-event))))) | |
557 | 549 |
558 (defun list-packages-mode () | 550 (defun list-packages-mode () |
559 "Symbols in the leftmost column: | 551 "Symbols in the leftmost column: |
560 | 552 |
561 + The package is marked for installation. | 553 + The package is marked for installation. |
616 (insert " Latest | 608 (insert " Latest |
617 Package name Vers. Description | 609 Package name Vers. Description |
618 ")) | 610 ")) |
619 (insert sep-string) | 611 (insert sep-string) |
620 (setq start (point)) | 612 (setq start (point)) |
621 (mapcar '(lambda (pkg) | 613 (mapcar |
622 (let (pkg-sym info version desc | 614 #'(lambda (pkg) |
623 b e extent current-vers disp) | 615 (let (pkg-sym info version desc |
624 (setq pkg-sym (car pkg) | 616 b e extent current-vers disp) |
625 info (package-get-info-version (cdr pkg) nil)) | 617 (setq pkg-sym (car pkg) |
626 (setq version (package-get-info-prop info 'version) | 618 info (package-get-info-version (cdr pkg) nil)) |
627 desc (package-get-info-prop info 'description)) | 619 (setq version (package-get-info-prop info 'version) |
628 | 620 desc (package-get-info-prop info 'description)) |
629 (setq disp (pui-package-symbol-char pkg-sym | 621 |
630 version)) | 622 (setq disp (pui-package-symbol-char pkg-sym |
631 (setq b (point)) | 623 version)) |
632 (if pui-list-verbose | 624 (setq b (point)) |
633 (progn | 625 (if pui-list-verbose |
634 (setq current-vers (package-get-key pkg-sym :version)) | 626 (progn |
635 (cond | 627 (setq current-vers (package-get-key pkg-sym :version)) |
636 ( (not current-vers) | 628 (cond |
637 (setq current-vers "-----") ) | 629 ( (not current-vers) |
638 ( (stringp current-vers) | 630 (setq current-vers "-----") ) |
639 (setq current-vers | 631 ( (stringp current-vers) |
640 (format "%.2f" | 632 (setq current-vers |
641 (string-to-number current-vers))) ) | 633 (format "%.2f" |
642 ( (numberp current-vers) | 634 (string-to-number current-vers))) ) |
643 (setq current-vers (format "%.2f" current-vers)) ) | 635 ( (numberp current-vers) |
644 ) | 636 (setq current-vers (format "%.2f" current-vers)) ) |
645 (insert | 637 ) |
646 (format "%s %-15s %-5.2f %-5s %s\n" | 638 (insert |
647 (car disp) pkg-sym | 639 (format "%s %-15s %-5.2f %-5s %s\n" |
648 (if (stringp version) | 640 (car disp) pkg-sym |
649 (string-to-number version) | 641 (if (stringp version) |
650 version) | 642 (string-to-number version) |
651 current-vers desc)) | 643 version) |
652 ;; (insert | 644 current-vers desc)) |
653 ;; (format "\t\t %-12s %s\n" | 645 ;; (insert |
654 ;; (package-get-info-prop info 'author-version) | 646 ;; (format "\t\t %-12s %s\n" |
655 ;; (package-get-info-prop info 'date) | 647 ;; (package-get-info-prop info 'author-version) |
656 ;; )) | 648 ;; (package-get-info-prop info 'date))) |
657 ) | 649 ) |
658 (insert (format "%s %-15s %-5s %s\n" | 650 (insert (format "%s %-15s %-5s %s\n" |
659 (car disp) | 651 (car disp) |
660 pkg-sym version desc))) | 652 pkg-sym version desc))) |
661 (save-excursion | 653 (save-excursion |
662 (setq e (progn | 654 (setq e (progn |
663 (forward-line -1) | 655 (forward-line -1) |
664 (end-of-line) | 656 (end-of-line) |
665 (point))) | 657 (point)))) |
666 ) | 658 (setq extent (make-extent b e)) |
667 (setq extent (make-extent b e)) | 659 (if (car (cdr disp)) |
668 (if (car (cdr disp)) | 660 (set-extent-face extent (get-face (car (cdr disp)))) |
669 (set-extent-face extent (get-face (car (cdr disp)))) | 661 (set-extent-face extent (get-face 'default))) |
670 (set-extent-face extent (get-face 'default))) | 662 (set-extent-property extent 'highlight t) |
671 (set-extent-property extent 'highlight t) | 663 (set-extent-property extent 'pui t) |
672 (set-extent-property extent 'pui t) | 664 (set-extent-property extent 'pui-package pkg-sym) |
673 (set-extent-property extent 'pui-package pkg-sym) | 665 (set-extent-property extent 'pui-info info) |
674 (set-extent-property extent 'pui-info info) | 666 (set-extent-property extent 'help-echo 'pui-help-echo) |
675 (set-extent-property extent 'help-echo 'pui-help-echo) | 667 (set-extent-property extent 'keymap pui-package-keymap) |
676 (set-extent-property extent 'keymap pui-package-keymap) | 668 )) |
677 )) (sort (copy-sequence package-get-base) | 669 (sort (copy-sequence package-get-base) |
678 '(lambda (a b) | 670 #'(lambda (a b) |
679 (string< (symbol-name (car a)) | 671 (string< (symbol-name (car a)) |
680 (symbol-name (car b))) | 672 (symbol-name (car b)))))) |
681 ))) | |
682 (insert sep-string) | 673 (insert sep-string) |
683 (insert (documentation 'list-packages-mode)) | 674 (insert (documentation 'list-packages-mode)) |
684 (set-buffer-modified-p nil) | 675 (set-buffer-modified-p nil) |
685 (setq buffer-read-only t) | 676 (setq buffer-read-only t) |
686 (pop-to-buffer outbuf) | 677 (pop-to-buffer outbuf) |
691 (when (featurep 'menubar) | 682 (when (featurep 'menubar) |
692 (set-buffer-menubar current-menubar) | 683 (set-buffer-menubar current-menubar) |
693 (add-submenu '() pui-menu) | 684 (add-submenu '() pui-menu) |
694 (setq mode-popup-menu pui-menu)) | 685 (setq mode-popup-menu pui-menu)) |
695 (clear-message) | 686 (clear-message) |
696 ; (message (substitute-command-keys "Press `\\[pui-help]' for help.")) | 687 ;; (message (substitute-command-keys "Press `\\[pui-help]' for help.")) |
697 )) | 688 )) |
698 | 689 |
699 ;;;###autoload | 690 ;;;###autoload |
700 (defalias 'list-packages 'pui-list-packages) | 691 (defalias 'list-packages 'pui-list-packages) |
701 | 692 |