Mercurial > hg > xemacs-beta
comparison lisp/package-ui.el @ 1365:02909207294a
[xemacs-hg @ 2003-03-20 13:19:56 by youngs]
2003-03-20 Steve Youngs <youngs@xemacs.org>
* menubar-items.el (default-menubar): Add a "Pre-Release Download
Sites" submenu to "Tools -> Packages" menu.
Filter the package download sites menus through
`menu-split-long-menu'.
* obsolete.el (pui-add-install-directory): New.
(package-get-download-menu): New.
* package-admin.el: (package-admin-add-single-file-package):
Removed.
(package-admin-get-install-dir): Don't rely on an installed
xemacs-base package to guess where a package needs to be installed
to.
(package-admin-get-manifest-file): Whitespace clean up.
(package-admin-check-manifest): Use `directory-sep-char' to
compute regexp.
Only search 'lisp' and 'man' directories to determine package
name.
Don't error is xemacs-base package isn't installed, just don't
sort the MANIFEST file and issue a warning.
(package-admin-add-binary-package): Whitespace clean up.
(package-admin-get-lispdir): Ditto.
(package-admin-delete-binary-package): Use `with-temp-buffer'
instead of creating a temporary buffer manually.
* package-get.el: (package-get-remote): Change custom type so that
only either a single directory or remote host:directory can be
selected.
(package-get-download-sites): Put the sites into alphabetical
order of country.
Make the description element be "Country (site)" instead of the
other way around.
(package-get-pre-release-download-sites): New.
(package-get-require-signed-base-updates): Default to t.
(package-get-download-menu): Removed.
(package-get-locate-file): Change to reflect new format of
'package-get-remote'.
(package-get-update-base-from-buffer): Whitespace clean up and
remove an unneccessary 'when'.
(package-get-interactive-package-query): Whitespace clean up.
(package-get-update-all): Ditto.
(package-get-all): Ditto.
(package-get-init-package): Ditto.
(package-get-info): New.
(package-get): Bring into line with new format of
'package-get-remote'.
Error if non-Mule XEmacsen try to install Mule packages.
Don't rely on a Mule package having 'mule-base' in its
"REQUIRES" to determine if it is a Mule package or not,
instead we test "CATEGORY".
Better handling of the situation where a partial package tarball
exists on the local hard drive from a previous interupted
download.
Clean up after a failed package install.
(package-get-set-version-prop): Removed.
(package-get-installedp): Whitespace clean up.
* package-ui.el: Whitespace clean up.
(pui-info-buffer): Make it a defcustom.
(pui-directory-exists): Removed.
(pui-package-dir-list): Removed.
(pui-add-install-directory): Removed.
(package-ui-download-menu): New.
(package-ui-pre-release-download-menu): New.
(pui-set-local-package-get-directory): New.
(pui-package-symbol-char): Whitespace clean up.
(pui-update-package-display): Ditto.
(pui-toggle-package): Ditto.
(pui-toggle-package-key): Ditto.
(pui-toggle-package-delete): Ditto.
(pui-toggle-package-delete-key): Ditto.
(pui-toggle-package-event): Ditto.
(pui-toggle-verbosity-redisplay): Ditto.
(pui-install-selected-packages): Ditto.
(pui-help-echo): Ditto.
(pui-display-info): Ditto.
(pui-list-packages): Ditto.
* packages.el: Whitespace clean up.
author | youngs |
---|---|
date | Thu, 20 Mar 2003 13:19:59 +0000 |
parents | d83885ef293b |
children | d638fc15d68b |
comparison
equal
deleted
inserted
replaced
1364:29e39e3ac319 | 1365:02909207294a |
---|---|
78 "*The face to use for uninstalled packages. | 78 "*The face to use for uninstalled packages. |
79 Set this to `nil' to use the `default' face." | 79 Set this to `nil' to use the `default' face." |
80 :group 'pui | 80 :group 'pui |
81 :type 'face) | 81 :type 'face) |
82 | 82 |
83 | 83 (defcustom pui-info-buffer "*Packages*" |
84 | 84 "*Buffer to use for displaying package information." |
85 | 85 :group 'pui |
86 (defvar pui-info-buffer "*Packages*" | 86 :type 'string) |
87 "Buffer to use for displaying package information.") | |
88 | 87 |
89 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 88 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
90 ;; End of user-changeable variables. | 89 ;; End of user-changeable variables. |
91 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 90 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
92 | 91 |
135 | 134 |
136 | 135 |
137 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 136 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
138 ;; Configuration routines | 137 ;; Configuration routines |
139 | 138 |
140 (defun pui-directory-exists (dir) | |
141 "Check to see if DIR exists in `package-get-remote'." | |
142 (let (found) | |
143 (mapcar #'(lambda (item) | |
144 (if (and (null (car item)) | |
145 (string-equal (file-name-as-directory (car (cdr item))) | |
146 (file-name-as-directory dir))) | |
147 (setq found t))) | |
148 package-get-remote) | |
149 found | |
150 )) | |
151 | |
152 (defun pui-package-dir-list (buffer) | |
153 "In BUFFER, format the list of package binary paths." | |
154 (let ( (count 1) paths sys dir) | |
155 (set-buffer buffer) | |
156 (buffer-disable-undo buffer) | |
157 (erase-buffer buffer) | |
158 (insert "Existing package binary paths:\n\n") | |
159 (setq paths package-get-remote) | |
160 (while paths | |
161 (setq sys (car (car paths)) | |
162 dir (car (cdr (car paths)))) | |
163 (insert (format "%2s. " count)) | |
164 (if (null sys) | |
165 (insert dir) | |
166 (insert sys ":" dir)) | |
167 (insert "\n") | |
168 (setq count (1+ count)) | |
169 (setq paths (cdr paths)) | |
170 ) | |
171 (insert "\nThese are the places that will be searched for package binaries.\n") | |
172 (goto-char (point-min)) | |
173 )) | |
174 | |
175 ;;;###autoload | 139 ;;;###autoload |
176 (defun package-ui-add-site (site) | 140 (defun package-ui-add-site (site) |
177 "Add site to package-get-remote and possibly offer to update package list." | 141 "Add site to package-get-remote and possibly offer to update package list." |
178 (let ((had-none (null package-get-remote))) | 142 (let ((had-none (null package-get-remote))) |
179 (push site package-get-remote) | 143 (setq package-get-remote site) |
180 (when (and had-none package-get-was-current | 144 (when (and had-none package-get-was-current |
181 (y-or-n-p "Update Package list?")) | 145 (y-or-n-p "Update Package list?")) |
182 (setq package-get-was-current nil) | 146 (setq package-get-was-current nil) |
183 (package-get-require-base t) | 147 (package-get-require-base t) |
184 (if (get-buffer pui-info-buffer) | 148 (if (get-buffer pui-info-buffer) |
185 (save-window-excursion | 149 (save-window-excursion |
186 (pui-list-packages)))) | 150 (pui-list-packages)))) |
187 (set-menubar-dirty-flag))) | 151 (set-menubar-dirty-flag))) |
188 | |
189 | 152 |
190 ;;;###autoload | 153 ;;;###autoload |
191 (defun pui-add-install-directory (dir) | 154 (defun package-ui-download-menu () |
192 "Add a new package binary directory to the head of `package-get-remote'. | 155 "Build the `Add Download Site' menu." |
156 (mapcar (lambda (site) | |
157 (vector (car site) | |
158 `(if (equal package-get-remote (quote ,(cdr site))) | |
159 (setq package-get-remote nil) | |
160 (package-ui-add-site (quote ,(cdr site)))) | |
161 ;; I've used radio buttons so that only a single | |
162 ;; site can be selected, but they are in fact | |
163 ;; toggles. SY. | |
164 :style 'radio | |
165 :selected `(equal package-get-remote (quote ,(cdr site))))) | |
166 package-get-download-sites)) | |
167 | |
168 ;;;###autoload | |
169 (defun package-ui-pre-release-download-menu () | |
170 "Build the 'Pre-Release Download Sites' menu." | |
171 (mapcar (lambda (site) | |
172 (vector (car site) | |
173 `(if (equal package-get-remote (quote ,(cdr site))) | |
174 (setq package-get-remote nil) | |
175 (package-ui-add-site (quote ,(cdr site)))) | |
176 ;; I've used radio buttons so that only a single | |
177 ;; site can be selected, but they are in fact | |
178 ;; toggles. SY. | |
179 :style 'radio | |
180 :selected `(equal package-get-remote (quote ,(cdr site))))) | |
181 package-get-pre-release-download-sites)) | |
182 | |
183 ;;;###autoload | |
184 (defun pui-set-local-package-get-directory (dir) | |
185 "Set a new package binary directory in `package-get-remote'. | |
193 Note that no provision is made for saving any changes made by this function. | 186 Note that no provision is made for saving any changes made by this function. |
194 It exists mainly as a convenience for one-time package installations from | 187 It exists mainly as a convenience for one-time package installations from |
195 disk." | 188 disk." |
196 (interactive (let ( (tmpbuf (get-buffer-create | 189 (interactive) |
197 "*Existing Package Binary Paths*")) | 190 (let ((dir (read-directory-name |
198 dir) | 191 "New package binary directory to add? " |
199 (save-window-excursion | 192 nil nil t))) |
200 (save-excursion | 193 (setq package-get-remote (list nil dir)) |
201 (unwind-protect | 194 (message "Package directory \"%s\" added." dir))) |
202 (progn | |
203 (pui-package-dir-list tmpbuf) | |
204 (display-buffer tmpbuf) | |
205 (setq dir (read-directory-name | |
206 "New package binary directory to add? " | |
207 nil nil t)) | |
208 ) | |
209 (kill-buffer tmpbuf) | |
210 ))) | |
211 (list dir) | |
212 )) | |
213 (progn | |
214 (if (not (pui-directory-exists dir)) | |
215 (progn | |
216 (setq package-get-remote (cons (list nil dir) package-get-remote)) | |
217 (message "Package directory \"%s\" added." dir) | |
218 ) | |
219 (message "Directory \"%s\" already exists in `package-get-remote'." dir)) | |
220 )) | |
221 | 195 |
222 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | 196 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
223 ;; Package list/installer routines | 197 ;; Package list/installer routines |
224 | 198 |
225 (defun pui-quit () | 199 (defun pui-quit () |
236 (if (stringp version) | 210 (if (stringp version) |
237 (string-to-number version) | 211 (string-to-number version) |
238 version)) | 212 version)) |
239 (list " " pui-up-to-date-package-face) | 213 (list " " pui-up-to-date-package-face) |
240 (list "*" pui-outdated-package-face))) | 214 (list "*" pui-outdated-package-face))) |
241 (list "-" pui-uninstalled-package-face)) | 215 (list "-" pui-uninstalled-package-face)))) |
242 )) | |
243 | 216 |
244 (defun pui-update-package-display (extent &optional pkg-sym version) | 217 (defun pui-update-package-display (extent &optional pkg-sym version) |
245 "Update the package status for EXTENT. | 218 "Update the package status for EXTENT. |
246 If PKG-SYM or VERSION are not given, they are read from the extent. | 219 If PKG-SYM or VERSION are not given, they are read from the extent. |
247 These are used to determine whether or not the package is installed, | 220 These are used to determine whether or not the package is installed, |
270 (set-extent-face extent (get-face 'default))))) | 243 (set-extent-face extent (get-face 'default))))) |
271 (save-excursion | 244 (save-excursion |
272 (goto-char (extent-start-position extent)) | 245 (goto-char (extent-start-position extent)) |
273 (delete-char 1) | 246 (delete-char 1) |
274 (insert sym-char) | 247 (insert sym-char) |
275 (set-buffer-modified-p nil) | 248 (set-buffer-modified-p nil)))) |
276 ) | |
277 )) | |
278 | 249 |
279 (defun pui-toggle-package (extent) | 250 (defun pui-toggle-package (extent) |
280 (let (pkg-sym) | 251 (let (pkg-sym) |
281 (setq pkg-sym (extent-property extent 'pui-package)) | 252 (setq pkg-sym (extent-property extent 'pui-package)) |
282 (if (member pkg-sym pui-selected-packages) | 253 (if (member pkg-sym pui-selected-packages) |
284 (delete pkg-sym pui-selected-packages)) | 255 (delete pkg-sym pui-selected-packages)) |
285 (setq pui-selected-packages | 256 (setq pui-selected-packages |
286 (cons pkg-sym pui-selected-packages)) | 257 (cons pkg-sym pui-selected-packages)) |
287 (setq pui-deleted-packages | 258 (setq pui-deleted-packages |
288 (delete pkg-sym pui-deleted-packages))) | 259 (delete pkg-sym pui-deleted-packages))) |
289 (pui-update-package-display extent pkg-sym) | 260 (pui-update-package-display extent pkg-sym))) |
290 )) | |
291 | 261 |
292 (defun pui-toggle-package-key () | 262 (defun pui-toggle-package-key () |
293 "Select/unselect package for installation, using the keyboard." | 263 "Select/unselect package for installation, using the keyboard." |
294 (interactive) | 264 (interactive) |
295 (let (extent) | 265 (let (extent) |
296 (if (setq extent (extent-at (point) (current-buffer) 'pui)) | 266 (if (setq extent (extent-at (point) (current-buffer) 'pui)) |
297 (progn | 267 (progn |
298 (pui-toggle-package extent) | 268 (pui-toggle-package extent) |
299 (forward-line 1) | 269 (forward-line 1)) |
300 ) | 270 (error "No package under cursor!")))) |
301 (error "No package under cursor!")) | |
302 )) | |
303 | 271 |
304 (defun pui-toggle-package-delete (extent) | 272 (defun pui-toggle-package-delete (extent) |
305 (let (pkg-sym) | 273 (let (pkg-sym) |
306 (setq pkg-sym (extent-property extent 'pui-package)) | 274 (setq pkg-sym (extent-property extent 'pui-package)) |
307 (if (member pkg-sym pui-deleted-packages) | 275 (if (member pkg-sym pui-deleted-packages) |
309 (delete pkg-sym pui-deleted-packages)) | 277 (delete pkg-sym pui-deleted-packages)) |
310 (setq pui-deleted-packages | 278 (setq pui-deleted-packages |
311 (cons pkg-sym pui-deleted-packages)) | 279 (cons pkg-sym pui-deleted-packages)) |
312 (setq pui-selected-packages | 280 (setq pui-selected-packages |
313 (delete pkg-sym pui-selected-packages))) | 281 (delete pkg-sym pui-selected-packages))) |
314 (pui-update-package-display extent pkg-sym) | 282 (pui-update-package-display extent pkg-sym))) |
315 )) | |
316 | 283 |
317 | 284 |
318 (defun pui-toggle-package-delete-key () | 285 (defun pui-toggle-package-delete-key () |
319 "Select/unselect package for removal, using the keyboard." | 286 "Select/unselect package for removal, using the keyboard." |
320 (interactive) | 287 (interactive) |
321 (let (extent) | 288 (let (extent) |
322 (if (setq extent (extent-at (point) (current-buffer) 'pui)) | 289 (if (setq extent (extent-at (point) (current-buffer) 'pui)) |
323 (progn | 290 (progn |
324 (pui-toggle-package-delete extent) | 291 (pui-toggle-package-delete extent) |
325 (forward-line 1) | 292 (forward-line 1)) |
326 ) | 293 (error "No package under cursor!")))) |
327 (error "No package under cursor!")) | |
328 )) | |
329 | 294 |
330 (defun pui-current-package () | 295 (defun pui-current-package () |
331 (let ((extent (extent-at (point) (current-buffer) 'pui))) | 296 (let ((extent (extent-at (point) (current-buffer) 'pui))) |
332 (if extent | 297 (if extent |
333 (extent-property extent 'pui-package)))) | 298 (extent-property extent 'pui-package)))) |
334 | 299 |
335 (defun pui-toggle-package-event (event) | 300 (defun pui-toggle-package-event (event) |
336 "Select/unselect package for installation, using the mouse." | 301 "Select/unselect package for installation, using the mouse." |
337 (interactive "e") | 302 (interactive "e") |
338 (let* ( (ep (event-point event)) | 303 (let* ((ep (event-point event)) |
339 (buffer (window-buffer (event-window event))) | 304 (buffer (window-buffer (event-window event))) |
340 (extent (extent-at ep buffer 'pui-package)) | 305 (extent (extent-at ep buffer 'pui-package))) |
341 ) | 306 (pui-toggle-package extent))) |
342 (pui-toggle-package extent) | |
343 )) | |
344 | 307 |
345 (defun pui-toggle-verbosity-redisplay () | 308 (defun pui-toggle-verbosity-redisplay () |
346 "Toggle verbose package info." | 309 "Toggle verbose package info." |
347 (interactive) | 310 (interactive) |
348 (progn | 311 (progn |
349 (setq pui-list-verbose (not pui-list-verbose)) | 312 (setq pui-list-verbose (not pui-list-verbose)) |
350 (pui-list-packages) | 313 (pui-list-packages))) |
351 )) | |
352 | 314 |
353 (defun pui-install-selected-packages () | 315 (defun pui-install-selected-packages () |
354 "Install selected packages." | 316 "Install selected packages." |
355 (interactive) | 317 (interactive) |
356 (let ( (tmpbuf "*Packages-To-Remove*") do-delete) | 318 (let ((tmpbuf "*Packages-To-Remove*") |
319 do-delete) | |
357 (when pui-deleted-packages | 320 (when pui-deleted-packages |
358 (save-window-excursion | 321 (save-window-excursion |
359 (with-output-to-temp-buffer tmpbuf | 322 (with-output-to-temp-buffer tmpbuf |
360 (display-completion-list (sort | 323 (display-completion-list (sort |
361 (mapcar #'symbol-name pui-deleted-packages) | 324 (mapcar #'symbol-name pui-deleted-packages) |
362 #'string<) | 325 #'string<) |
363 :activate-callback nil | 326 :activate-callback nil |
364 :help-string "Packages selected for removal:\n" | 327 :help-string "Packages selected for removal:\n" |
365 :completion-string t | 328 :completion-string t)) |
366 )) | |
367 (setq tmpbuf (get-buffer-create tmpbuf)) | 329 (setq tmpbuf (get-buffer-create tmpbuf)) |
368 (display-buffer tmpbuf) | 330 (display-buffer tmpbuf) |
369 (setq do-delete (yes-or-no-p "Remove these packages? ")) | 331 (setq do-delete (yes-or-no-p "Remove these packages? ")) |
370 (kill-buffer tmpbuf)) | 332 (kill-buffer tmpbuf)) |
371 (when do-delete | 333 (when do-delete |
374 (package-admin-delete-binary-package | 336 (package-admin-delete-binary-package |
375 pkg (package-admin-get-install-dir pkg nil))) | 337 pkg (package-admin-get-install-dir pkg nil))) |
376 (nreverse pui-deleted-packages)) | 338 (nreverse pui-deleted-packages)) |
377 (message "Packages deleted")))) | 339 (message "Packages deleted")))) |
378 | 340 |
379 (let ( (tmpbuf "*Packages-To-Install*") do-install) | 341 (let ((tmpbuf "*Packages-To-Install*") |
342 do-install) | |
380 (if pui-selected-packages | 343 (if pui-selected-packages |
381 (progn | 344 (progn |
382 ;; Don't change window config when asking the user if he really | 345 ;; Don't change window config when asking the user if he really |
383 ;; wants to install the packages. We do this to avoid messing up | 346 ;; wants to install the packages. We do this to avoid messing up |
384 ;; the window configuration if errors occur (we don't want to | 347 ;; the window configuration if errors occur (we don't want to |
388 (with-output-to-temp-buffer tmpbuf | 351 (with-output-to-temp-buffer tmpbuf |
389 (display-completion-list | 352 (display-completion-list |
390 (sort (mapcar #'symbol-name pui-selected-packages) #'string<) | 353 (sort (mapcar #'symbol-name pui-selected-packages) #'string<) |
391 :activate-callback nil | 354 :activate-callback nil |
392 :help-string "Packages selected for installation:\n" | 355 :help-string "Packages selected for installation:\n" |
393 :completion-string t | 356 :completion-string t)) |
394 )) | |
395 (setq tmpbuf (get-buffer-create tmpbuf)) | 357 (setq tmpbuf (get-buffer-create tmpbuf)) |
396 (display-buffer tmpbuf) | 358 (display-buffer tmpbuf) |
397 (setq do-install (y-or-n-p "Install these packages? ")) | 359 (setq do-install (y-or-n-p "Install these packages? ")) |
398 (kill-buffer tmpbuf) | 360 (kill-buffer tmpbuf)) |
399 ) | |
400 (if do-install | 361 (if do-install |
401 (progn | 362 (progn |
402 (save-excursion | 363 (save-excursion |
403 ;; Clear old temp buffer history | 364 ;; Clear old temp buffer history |
404 (set-buffer (get-buffer-create package-admin-temp-buffer)) | 365 (set-buffer (get-buffer-create package-admin-temp-buffer)) |
405 (buffer-disable-undo package-admin-temp-buffer) | 366 (buffer-disable-undo package-admin-temp-buffer) |
406 (erase-buffer package-admin-temp-buffer) | 367 (erase-buffer package-admin-temp-buffer)) |
407 ) | |
408 (message "Installing selected packages ...") (sit-for 0) | 368 (message "Installing selected packages ...") (sit-for 0) |
409 (if (catch 'done | 369 (if (catch 'done |
410 (mapcar (lambda (pkg) | 370 (mapcar (lambda (pkg) |
411 (if (not (package-get pkg nil nil | 371 (if (not (package-get pkg nil nil |
412 pui-package-install-dest-dir)) | 372 pui-package-install-dest-dir)) |
413 (throw 'done nil))) | 373 (throw 'done nil))) |
414 (nreverse pui-selected-packages)) | 374 (nreverse pui-selected-packages)) |
415 t) | 375 t) |
416 (progn | 376 (progn |
417 (pui-list-packages) | 377 (pui-list-packages) |
418 (message "Packages installed") | 378 (message "Packages installed")))) |
419 )) | 379 (clear-message))) |
420 ) | |
421 (clear-message) | |
422 ) | |
423 ) | |
424 (if pui-deleted-packages | 380 (if pui-deleted-packages |
425 (pui-list-packages) | 381 (pui-list-packages) |
426 (error "No packages have been selected!"))) | 382 (error "No packages have been selected!"))) |
427 ;; sync with windows type systems | 383 ;; sync with windows type systems |
428 (package-net-update-installed-db) | 384 (package-net-update-installed-db))) |
429 )) | |
430 | 385 |
431 (defun pui-add-required-packages () | 386 (defun pui-add-required-packages () |
432 "Select packages required by those already selected for installation." | 387 "Select packages required by those already selected for installation." |
433 (interactive) | 388 (interactive) |
434 (let ((tmpbuf "*Required-Packages*") do-select) | 389 (let ((tmpbuf "*Required-Packages*") do-select) |
488 "Display additional package info in the modeline. | 443 "Display additional package info in the modeline. |
489 EXTENT determines the package to display (the package information is | 444 EXTENT determines the package to display (the package information is |
490 attached to the extent as properties)." | 445 attached to the extent as properties)." |
491 (let (pkg-sym info inst-ver auth-ver date maintainer balloon req) | 446 (let (pkg-sym info inst-ver auth-ver date maintainer balloon req) |
492 (if (or force-update (not (current-message)) | 447 (if (or force-update (not (current-message)) |
493 (string-match ".*: .*: " (current-message)) | 448 (string-match ".*: .*: " (current-message))) |
494 ) | |
495 (progn | 449 (progn |
496 (setq pkg-sym (extent-property extent 'pui-package) | 450 (setq pkg-sym (extent-property extent 'pui-package) |
497 info (extent-property extent 'pui-info) | 451 info (extent-property extent 'pui-info) |
498 inst-ver (package-get-key pkg-sym :version) | 452 inst-ver (package-get-key pkg-sym :version) |
499 auth-ver (package-get-info-prop info 'author-version) | 453 auth-ver (package-get-info-prop info 'author-version) |
518 (if pui-list-verbose | 472 (if pui-list-verbose |
519 (format | 473 (format |
520 "Inst V: %.2f Auth V: %s Maint: %s" | 474 "Inst V: %.2f Auth V: %s Maint: %s" |
521 inst-ver auth-ver maintainer) | 475 inst-ver auth-ver maintainer) |
522 (format "%.2f : %s : %s" | 476 (format "%.2f : %s : %s" |
523 inst-ver auth-ver maintainer)) | 477 inst-ver auth-ver maintainer)))))) |
524 )) | |
525 )) | |
526 | 478 |
527 (defun pui-display-info (&optional no-error event) | 479 (defun pui-display-info (&optional no-error event) |
528 "Display additional package info in the modeline. | 480 "Display additional package info in the modeline. |
529 Designed to be called interactively (from a keypress)." | 481 Designed to be called interactively (from a keypress)." |
530 (interactive) | 482 (interactive) |
533 (beginning-of-line) | 485 (beginning-of-line) |
534 (if (setq extent (extent-at (point) (current-buffer) 'pui)) | 486 (if (setq extent (extent-at (point) (current-buffer) 'pui)) |
535 (message (pui-help-echo extent t)) | 487 (message (pui-help-echo extent t)) |
536 (if no-error | 488 (if no-error |
537 (clear-message nil) | 489 (clear-message nil) |
538 (error "No package under cursor!"))) | 490 (error "No package under cursor!")))))) |
539 ))) | |
540 | 491 |
541 (defvar pui-menu | 492 (defvar pui-menu |
542 '("Packages" | 493 '("Packages" |
543 ["Toggle install " pui-toggle-package-key :active (pui-current-package) :suffix (format "`%s'" (or (pui-current-package) "..."))] | 494 ["Toggle install " pui-toggle-package-key :active (pui-current-package) :suffix (format "`%s'" (or (pui-current-package) "..."))] |
544 ["Toggle delete " pui-toggle-package-delete-key :active (pui-current-package) :suffix (format "`%s'" (or (pui-current-package) "..."))] | 495 ["Toggle delete " pui-toggle-package-delete-key :active (pui-current-package) :suffix (format "`%s'" (or (pui-current-package) "..."))] |
595 buffer, the user can see which packages are installed, which are not, and | 546 buffer, the user can see which packages are installed, which are not, and |
596 which are out-of-date (a newer version is available). The user can then | 547 which are out-of-date (a newer version is available). The user can then |
597 select packages for installation via the keyboard or mouse." | 548 select packages for installation via the keyboard or mouse." |
598 (interactive) | 549 (interactive) |
599 (package-get-require-base t) | 550 (package-get-require-base t) |
600 (let ( (outbuf (get-buffer-create pui-info-buffer)) | 551 (let ((outbuf (get-buffer-create pui-info-buffer)) |
601 (sep-string "===============================================================================\n") | 552 (sep-string "===============================================================================\n") |
602 start ) | 553 start) |
603 (message "Creating package list ...") (sit-for 0) | 554 (message "Creating package list ...") (sit-for 0) |
604 (set-buffer outbuf) | 555 (set-buffer outbuf) |
605 (setq buffer-read-only nil) | 556 (setq buffer-read-only nil) |
606 (buffer-disable-undo outbuf) | 557 (buffer-disable-undo outbuf) |
607 (erase-buffer outbuf) | 558 (erase-buffer outbuf) |
641 (setq b (point)) | 592 (setq b (point)) |
642 (if pui-list-verbose | 593 (if pui-list-verbose |
643 (progn | 594 (progn |
644 (setq current-vers (package-get-key pkg-sym :version)) | 595 (setq current-vers (package-get-key pkg-sym :version)) |
645 (cond | 596 (cond |
646 ( (not current-vers) | 597 ((not current-vers) |
647 (setq current-vers "-----") ) | 598 (setq current-vers "-----")) |
648 ( (stringp current-vers) | 599 ((stringp current-vers) |
649 (setq current-vers | 600 (setq current-vers |
650 (format "%.2f" | 601 (format "%.2f" |
651 (string-to-number current-vers))) ) | 602 (string-to-number current-vers)))) |
652 ( (numberp current-vers) | 603 ((numberp current-vers) |
653 (setq current-vers (format "%.2f" current-vers)) ) | 604 (setq current-vers (format "%.2f" current-vers)))) |
654 ) | |
655 (insert | 605 (insert |
656 (format "%s %-15s %-5.2f %-5s %s\n" | 606 (format "%s %-15s %-5.2f %-5s %s\n" |
657 (car disp) pkg-sym | 607 (car disp) pkg-sym |
658 (if (stringp version) | 608 (if (stringp version) |
659 (string-to-number version) | 609 (string-to-number version) |
660 version) | 610 version) |
661 current-vers desc)) | 611 current-vers desc))) |
662 ;; (insert | |
663 ;; (format "\t\t %-12s %s\n" | |
664 ;; (package-get-info-prop info 'author-version) | |
665 ;; (package-get-info-prop info 'date))) | |
666 ) | |
667 (insert (format "%s %-15s %-5s %s\n" | 612 (insert (format "%s %-15s %-5s %s\n" |
668 (car disp) | 613 (car disp) |
669 pkg-sym version desc))) | 614 pkg-sym version desc))) |
670 (save-excursion | 615 (save-excursion |
671 (setq e (progn | 616 (setq e (progn |
679 (set-extent-property extent 'highlight t) | 624 (set-extent-property extent 'highlight t) |
680 (set-extent-property extent 'pui t) | 625 (set-extent-property extent 'pui t) |
681 (set-extent-property extent 'pui-package pkg-sym) | 626 (set-extent-property extent 'pui-package pkg-sym) |
682 (set-extent-property extent 'pui-info info) | 627 (set-extent-property extent 'pui-info info) |
683 (set-extent-property extent 'help-echo 'pui-help-echo) | 628 (set-extent-property extent 'help-echo 'pui-help-echo) |
684 (set-extent-property extent 'keymap pui-package-keymap) | 629 (set-extent-property extent 'keymap pui-package-keymap))) |
685 )) | |
686 (sort (copy-sequence package-get-base) | 630 (sort (copy-sequence package-get-base) |
687 #'(lambda (a b) | 631 #'(lambda (a b) |
688 (string< (symbol-name (car a)) | 632 (string< (symbol-name (car a)) |
689 (symbol-name (car b)))))) | 633 (symbol-name (car b)))))) |
690 (insert sep-string) | 634 (insert sep-string) |
698 (setq pui-deleted-packages nil) ; Reset list | 642 (setq pui-deleted-packages nil) ; Reset list |
699 (when (featurep 'menubar) | 643 (when (featurep 'menubar) |
700 (set-buffer-menubar current-menubar) | 644 (set-buffer-menubar current-menubar) |
701 (add-submenu '() pui-menu) | 645 (add-submenu '() pui-menu) |
702 (setq mode-popup-menu pui-menu)) | 646 (setq mode-popup-menu pui-menu)) |
703 (clear-message) | 647 (clear-message))) |
704 ;; (message (substitute-command-keys "Press `\\[pui-help]' for help.")) | |
705 )) | |
706 | 648 |
707 ;;;###autoload | 649 ;;;###autoload |
708 (defalias 'list-packages 'pui-list-packages) | 650 (defalias 'list-packages 'pui-list-packages) |
709 | 651 |
710 (provide 'package-ui) | 652 (provide 'package-ui) |