diff --git a/pkgs/racket-pkgs/racket-doc/pkg/scribblings/pkg.scrbl b/pkgs/racket-pkgs/racket-doc/pkg/scribblings/pkg.scrbl
index 66cfb5e072..d84da9ee44 100644
--- a/pkgs/racket-pkgs/racket-doc/pkg/scribblings/pkg.scrbl
+++ b/pkgs/racket-pkgs/racket-doc/pkg/scribblings/pkg.scrbl
@@ -664,7 +664,9 @@ package is created.
@subcommand{@command/toc{show} @nonterm{option} ... --- Print information about currently installed packages.
By default, packages are shown for all @tech{package scopes}, but only for packages
- not marked as auto-installed to fulfill dependencies.
+ not marked as auto-installed to fulfill dependencies. Unless @Flag{l} or @DFlag{long} is specified,
+ the output is roughly constrained to 80 columns or the number of columns specified by the @envvar{COLUMNS}
+ environment variable.
The @exec{show} sub-command accepts
the following @nonterm{option}s:
@@ -672,6 +674,8 @@ package is created.
@itemlist[
@item{@Flag{a} or @DFlag{all} --- Includes auto-installed packages in the listing.}
+ @item{@Flag{l} or @DFlag{long} --- Show complete columns, instead of abbreviating to a width,
+ and use a more regular (but less human-readable) format for some columns.}
@item{@Flag{d} or @DFlag{dir} --- Adds a column in the output for the directory where the package is installed.}
@item{@DFlag{scope} @nonterm{scope} --- Shows only packages in @nonterm{scope}, which is one of
@@ -686,7 +690,9 @@ package is created.
@item{@DFlag{scope-dir} @nonterm{dir} --- Shows only packages installed in @nonterm{dir}.}
@item{@DFlag{version} @nonterm{vers} or @Flag{v} @nonterm{vers} --- Show only user-specific packages for
the installation name/version @nonterm{vers}.}
- ]}
+ ]
+
+@history[#:changed "6.1.1.5" @elem{Added @Flag{l}/@DFlag{--long} and @envvar{COLUMNS} support.}]}
@subcommand{@command/toc{migrate} @nonterm{option} ... @nonterm{from-version}
--- Installs packages that were previously installed in @exec{user}
diff --git a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-failure.rkt b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-failure.rkt
index 36bceb3d8a..d84f00f6a2 100644
--- a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-failure.rkt
+++ b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-failure.rkt
@@ -14,7 +14,7 @@
(shelly-case
"failure on remove"
$ "raco pkg install test-pkgs/pkg-test1.zip" =exit> 0
- $ "raco pkg show -u -a -d" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source +Directory\npkg-test1 +[a-f0-9]+ .*pkg-test1\n"
+ $ "raco pkg show -l -u -a -d" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source +Directory\npkg-test1 +[a-f0-9]+ .*pkg-test1\"\n"
$ "racket -e '(require pkg-test1)'" =exit> 0
$ "racket -e '(file-or-directory-permissions (collection-path \"pkg-test1\") #o500)'"
$ "raco pkg remove pkg-test1" =exit> 1
@@ -23,7 +23,7 @@
(shelly-case
"re-install must go to \"+1\""
$ "raco pkg install test-pkgs/pkg-test1.zip" =exit> 0
- $ "raco pkg show -u -a -d" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source +Directory\npkg-test1 +[a-f0-9]+ .*pkg-test1[+]1\n"
+ $ "raco pkg show -l -u -a -d" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source +Directory\npkg-test1 +[a-f0-9]+ .*pkg-test1[+]1\"\n"
$ "racket -e '(require pkg-test1)'" =exit> 0
$ "raco pkg remove pkg-test1" =exit> 0
$ "racket -e '(require pkg-test1)'" =exit> 1)
@@ -32,6 +32,6 @@
"re-install can go back to original place"
$ "racket -l racket/base -l setup/dirs -e '(file-or-directory-permissions (build-path (find-user-pkgs-dir) \"pkg-test1/pkg-test1\") #o700)'"
$ "raco pkg install test-pkgs/pkg-test1.zip" =exit> 0
- $ "raco pkg show -u -a -d" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source +Directory\npkg-test1 +[a-f0-9]+ .*pkg-test1\n"
+ $ "raco pkg show -l -u -a -d" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source +Directory\npkg-test1 +[a-f0-9]+ .*pkg-test1\"\n"
$ "racket -e '(require pkg-test1)'" =exit> 0
$ "raco pkg remove pkg-test1" =exit> 0))))
diff --git a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-migrate.rkt b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-migrate.rkt
index 3c14f356d4..1d4056a139 100644
--- a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-migrate.rkt
+++ b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-migrate.rkt
@@ -22,12 +22,12 @@
'source
"http://localhost:9997/pkg-a-first.plt"))
$ "raco pkg install -u --deps search-auto pkg-b" =exit> 0
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-a\\* +[a-f0-9]+ \\(catalog pkg-a\\)\npkg-b +[a-f0-9]+ +\\(catalog pkg-b\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-a\\* +[a-f0-9]+ \\(catalog \"pkg-a\"\\)\npkg-b +[a-f0-9]+ +\\(catalog \"pkg-b\"\\)\n"
$ (~a "racket"
" -e \"(require racket/file setup/dirs)\""
" -e \"(copy-directory/files (build-path (find-system-path 'addon-dir) (get-installation-name))"
" (build-path (find-system-path 'addon-dir) (symbol->string 'other)))\"")
$ "raco pkg remove -u --auto pkg-b"
- $ "raco pkg show -u -a" =stdout> " [none]\n"
+ $ "raco pkg show -l -u -a" =stdout> " [none]\n"
$ "raco pkg migrate -u other"
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-a\\* +[a-f0-9]+ \\(catalog pkg-a\\)\npkg-b +[a-f0-9]+ +\\(catalog pkg-b\\)\n")))
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-a\\* +[a-f0-9]+ \\(catalog \"pkg-a\"\\)\npkg-b +[a-f0-9]+ +\\(catalog \"pkg-b\"\\)\n")))
diff --git a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-promote.rkt b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-promote.rkt
index 6a2bcf3892..ec652c2ed9 100644
--- a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-promote.rkt
+++ b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-promote.rkt
@@ -15,37 +15,37 @@
"promote"
$ "raco pkg config --set catalogs http://localhost:9990"
$ "raco pkg install --deps search-auto test-pkgs/pkg-test2.zip" =exit> 0
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog pkg-test1\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog \"pkg-test1\"\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\"\\)\n"
$ "raco pkg install test-pkgs/pkg-test2.zip" =exit> 1 =stderr> #rx"already installed"
$ "raco pkg install test-pkgs/pkg-test1.zip" =exit> 1 =stderr> #rx"already installed from a different source"
$ "raco pkg install pkg-test1" ; promote
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1 +[a-f0-9]+ +\\(catalog pkg-test1\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1 +[a-f0-9]+ +\\(catalog \"pkg-test1\"\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\"\\)\n"
$ "raco pkg install pkg-test1" =exit> 1 =stderr> #rx"already installed" ; redundant promote fails
$ "racket -e '(require pkg-test1)'" =exit> 0
$ "racket -e '(require pkg-test2)'" =exit> 0
$ "raco pkg remove --auto pkg-test1" =exit> 1 =stderr> #rx"cannot remove packages that are dependencies of other packages"
$ "raco pkg remove --auto pkg-test2"
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1 +[a-f0-9]+ +\\(catalog pkg-test1\\)"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1 +[a-f0-9]+ +\\(catalog \"pkg-test1\"\\)"
$ "raco pkg remove --auto pkg-test1"
- $ "raco pkg show -u -a" =stdout> " [none]\n")
+ $ "raco pkg show -l -u -a" =stdout> " [none]\n")
(shelly-case
"demote"
$ "raco pkg config --set catalogs http://localhost:9990"
$ "raco pkg install --deps search-auto test-pkgs/pkg-test2.zip" =exit> 0
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog pkg-test1\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog \"pkg-test1\"\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\"\\)\n"
$ "raco pkg remove --demote pkg-test2"
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog pkg-test1\\)\npkg-test2\\* +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog \"pkg-test1\"\\)\npkg-test2\\* +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\"\\)\n"
$ "racket -e '(require pkg-test1)'" =exit> 0
$ "racket -e '(require pkg-test2)'" =exit> 0
$ "raco pkg remove --auto"
- $ "raco pkg show -u -a" =stdout> " [none]\n"))
+ $ "raco pkg show -l -u -a" =stdout> " [none]\n"))
(with-fake-root
(shelly-case
"demote+auto"
$ "raco pkg config --set catalogs http://localhost:9990"
$ "raco pkg install --deps search-auto test-pkgs/pkg-test2.zip" =exit> 0
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog pkg-test1\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog \"pkg-test1\"\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\"\\)\n"
$ "raco pkg remove --demote --auto pkg-test1" =exit> 0 ; should have no effect
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog pkg-test1\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog \"pkg-test1\"\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\"\\)\n"
$ "raco pkg remove --demote --auto pkg-test2"
- $ "raco pkg show -u -a" =stdout> " [none]\n"))))
+ $ "raco pkg show -l -u -a" =stdout> " [none]\n"))))
diff --git a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-remove.rkt b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-remove.rkt
index 8a4329acf4..b3072cac71 100644
--- a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-remove.rkt
+++ b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-remove.rkt
@@ -20,7 +20,7 @@
(shelly-case
"remove and show"
(shelly-case "remove of not installed package fails"
- $ "raco pkg show -u -a" =stdout> " [none]\n"
+ $ "raco pkg show -l -u -a" =stdout> " [none]\n"
$ "raco pkg remove not-there" =exit> 1)
(shelly-case "remove of bad name"
$ "raco pkg remove bad/" =exit> 1
@@ -35,12 +35,12 @@
"pkg-test1 pkg-test1")
(shelly-install "remove of dep fails"
"test-pkgs/pkg-test1.zip"
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test1.zip\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test1.zip\"\\)\n"
$ "raco pkg install test-pkgs/pkg-test2.zip"
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test1.zip\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test1.zip\"\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\"\\)\n"
$ "raco pkg remove pkg-test1" =exit> 1 =stderr> #rx"pkg-test1 \\(required by: \\(pkg-test2\\)\\)"
$ "raco pkg remove pkg-test2"
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test1.zip\\)\n")
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test1.zip\"\\)\n")
(shelly-install "remove of dep can be forced"
"test-pkgs/pkg-test1.zip"
$ "raco pkg install test-pkgs/pkg-test2.zip"
@@ -68,22 +68,22 @@
$ "racket -e '(require pkg-test1)'" =exit> 1
$ "racket -e '(require pkg-test2)'" =exit> 1
$ "raco pkg install --deps search-auto test-pkgs/pkg-test2.zip" =exit> 0
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog pkg-test1\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog \"pkg-test1\"\\)\npkg-test2 +[a-f0-9]+ +\\(file .+tests/pkg/test-pkgs/pkg-test2.zip\"\\)\n"
$ "racket -e '(require pkg-test1)'" =exit> 0
$ "racket -e '(require pkg-test2)'" =exit> 0
$ "racket -e '(require pkg-test2/contains-dep)'" =exit> 0
$ "raco pkg remove pkg-test2"
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog pkg-test1\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-test1\\* +[a-f0-9]+ +\\(catalog \"pkg-test1\"\\)\n"
$ "racket -e '(require pkg-test1)'" =exit> 0
$ "raco pkg remove --auto"
- $ "raco pkg show -u -a" =stdout> " [none]\n"
+ $ "raco pkg show -l -u -a" =stdout> " [none]\n"
$ "racket -e '(require pkg-test1)'" =exit> 1
$ "racket -e '(require pkg-test2)'" =exit> 1)
(shelly-case
"single-step autoremove"
$ "raco pkg install --deps search-auto test-pkgs/pkg-test2.zip" =exit> 0
$ "raco pkg remove --auto pkg-test2"
- $ "raco pkg show -u -a" =stdout> " [none]\n"
+ $ "raco pkg show -l -u -a" =stdout> " [none]\n"
$ "racket -e '(require pkg-test1)'" =exit> 1
$ "racket -e '(require pkg-test2)'" =exit> 1)
(shelly-case
@@ -92,7 +92,7 @@
$ "racket -e '(require pkg-cycle1)'" =exit> 0
$ "racket -e '(require pkg-cycle2)'" =exit> 0
$ "raco pkg remove --auto pkg-cycle1"
- $ "raco pkg show -u -a" =stdout> " [none]\n"
+ $ "raco pkg show -l -u -a" =stdout> " [none]\n"
$ "racket -e '(require pkg-cycle1)'" =exit> 1
$ "racket -e '(require pkg-cycle2)'" =exit> 1))
(with-fake-root
diff --git a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-update-auto.rkt b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-update-auto.rkt
index 598113f72b..b6833dd511 100644
--- a/pkgs/racket-pkgs/racket-test/tests/pkg/tests-update-auto.rkt
+++ b/pkgs/racket-pkgs/racket-test/tests/pkg/tests-update-auto.rkt
@@ -48,12 +48,12 @@
'source
"http://localhost:9997/pkg-a-first.plt"))
$ "raco pkg install --deps search-auto pkg-b" =exit> 0 #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-a\\* +[a-f0-9]+ \\(catalog pkg-a\\)\npkg-b +[a-f0-9]+ +\\(catalog pkg-b\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-a\\* +[a-f0-9]+ \\(catalog \"pkg-a\"\\)\npkg-b +[a-f0-9]+ +\\(catalog \"pkg-b\"\\)\n"
$ "racket -e '(require pkg-b)'" =exit> 43
$ "racket -e '(require pkg-a)'" =exit> 0
;; remove auto doesn't do anything because everything is needed
$ "raco pkg remove -u --auto"
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-a\\* +[a-f0-9]+ \\(catalog pkg-a\\)\npkg-b +[a-f0-9]+ +\\(catalog pkg-b\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-a\\* +[a-f0-9]+ \\(catalog \"pkg-a\"\\)\npkg-b +[a-f0-9]+ +\\(catalog \"pkg-b\"\\)\n"
$ "racket -e '(require pkg-b)'" =exit> 43
$ "racket -e '(require pkg-a)'" =exit> 0
;; pkg-a is now an auto
@@ -65,9 +65,9 @@
$ "raco pkg update -a" =exit> 0
$ "racket -e '(require pkg-a)'" =exit> 43
$ "raco pkg remove pkg-b"
- $ "raco pkg show -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-a\\* +[a-f0-9]+ +\\(catalog pkg-a\\)\n"
+ $ "raco pkg show -l -u -a" =stdout> #rx"Package\\[\\*=auto\\] +Checksum +Source\npkg-a\\* +[a-f0-9]+ +\\(catalog \"pkg-a\"\\)\n"
$ "racket -e '(require pkg-b)'" =exit> 1
;; pkg-a is now not needed
$ "raco pkg remove --auto"
- $ "raco pkg show -u -a" =stdout> " [none]\n"
+ $ "raco pkg show -l -u -a" =stdout> " [none]\n"
$ "racket -e '(require pkg-a)'" =exit> 1)))
diff --git a/racket/collects/pkg/lib.rkt b/racket/collects/pkg/lib.rkt
index 008fb22187..339f606577 100644
--- a/racket/collects/pkg/lib.rkt
+++ b/racket/collects/pkg/lib.rkt
@@ -118,6 +118,7 @@
[pkg-show
(->* (string?)
(#:directory? boolean?
+ #:long? boolean?
#:auto? boolean?)
void?)]
[pkg-install
diff --git a/racket/collects/pkg/main.rkt b/racket/collects/pkg/main.rkt
index 2a47c67104..cf67adbc1b 100644
--- a/racket/collects/pkg/main.rkt
+++ b/racket/collects/pkg/main.rkt
@@ -373,8 +373,11 @@
;; ----------------------------------------
[show
"Show information about installed packages"
+ #:usage-help
+ "Set the COLUMNS environment variable to configure the output without `-l'."
#:once-each
[#:bool all ("-a") "Show auto-installed packages, too"]
+ [#:bool long ("-l") "Show full column content"]
[#:bool dir ("-d") "Show the directory where the package is installed"]
#:once-any
scope-flags ...
@@ -410,6 +413,7 @@
(with-pkg-lock/read-only
(pkg-show (if only-mode "" " ")
#:auto? all
+ #:long? long
#:directory? dir)))))]
;; ----------------------------------------
[migrate
diff --git a/racket/collects/pkg/private/clone-path.rkt b/racket/collects/pkg/private/clone-path.rkt
index 9e3dfce60a..81cfdd451d 100644
--- a/racket/collects/pkg/private/clone-path.rkt
+++ b/racket/collects/pkg/private/clone-path.rkt
@@ -272,7 +272,7 @@
" Your current installation is a directory link, and the directory might\n"
" be a Git repostory checkout, but the package system doesn't know that.\n"
" If so, try\n"
- " cd " (normalize-path
+ " cd " (simple-form-path
(path->complete-path (cadr current-orig-pkg) (pkg-installed-dir)))
"\n"
" raco pkg update --clone . ")]
diff --git a/racket/collects/pkg/private/install.rkt b/racket/collects/pkg/private/install.rkt
index 6f89c2938f..9b666ca82f 100644
--- a/racket/collects/pkg/private/install.rkt
+++ b/racket/collects/pkg/private/install.rkt
@@ -998,7 +998,7 @@
" package name: ~a\n"
" package source: ~a")
pkg-name
- (normalize-path
+ (simple-form-path
(path->complete-path orig-pkg-dir (pkg-installed-dir))))
null)]
[`(dir ,_)
diff --git a/racket/collects/pkg/private/show.rkt b/racket/collects/pkg/private/show.rkt
index d516dd2e77..52d596ff0a 100644
--- a/racket/collects/pkg/private/show.rkt
+++ b/racket/collects/pkg/private/show.rkt
@@ -3,14 +3,17 @@
racket/match
racket/format
racket/function
+ racket/path
"../path.rkt"
+ "dirs.rkt"
"pkg-db.rkt")
(provide pkg-show)
(define (pkg-show indent
#:directory? [dir? #f]
- #:auto? [show-auto? #f])
+ #:auto? [show-auto? #f]
+ #:long? [long? #t])
(let ()
(define db (read-pkg-db))
(define pkgs (sort (hash-keys db) string-ci<=?))
@@ -18,6 +21,11 @@
(printf " [none]\n")
(begin
(table-display
+ long?
+ (append '(right right middle)
+ (if dir?
+ '(left)
+ '()))
(list*
(append
(list (format "~aPackage~a"
@@ -37,10 +45,28 @@
indent
pkg
(if auto? "*" ""))
- (format "~a" checksum)
- (format "~a" orig-pkg))
+ (if (or checksum long?)
+ (format "~a" checksum)
+ "")
+ (let ([src (case (car orig-pkg)
+ [(link static-link clone)
+ (list* (car orig-pkg)
+ (path->string
+ (simple-form-path
+ (path->complete-path (cadr orig-pkg)
+ (pkg-installed-dir))))
+ (cddr orig-pkg))]
+ [else orig-pkg])])
+ (if long?
+ (~s src)
+ (apply ~a #:separator " " src))))
(if dir?
- (list (~a (pkg-directory* pkg #:db db)))
+ (let ([p (path->string
+ (simple-form-path
+ (pkg-directory* pkg #:db db)))])
+ (list (if long?
+ (~s p)
+ (~a p))))
empty)))))
(unless show-auto?
(define n (for/sum ([pkg (in-list pkgs)]
@@ -52,18 +78,77 @@
n
(if (= n 1) "" "s"))))))))
-(define (table-display l)
+(define (table-display long? dots-poses l)
(define how-many-cols (length (first l)))
- (define max-widths
+ (define full-max-widths
(for/list ([col (in-range how-many-cols)])
(apply max (map (compose string-length (curryr list-ref col)) l))))
+ (define sep (if long? 4 2))
+ (define COLUMNS (or (cond
+ [long? 80]
+ [(getenv "COLUMNS")
+ => (lambda (s)
+ (define v (string->number s))
+ (and (exact-positive-integer? v) v))]
+ [else #f])
+ 80))
+ (define max-widths
+ (cond
+ [(or long?
+ ((apply + full-max-widths) . < . (- COLUMNS (* sep (sub1 how-many-cols)))))
+ full-max-widths]
+ [else
+ (define avail (- COLUMNS
+ (car full-max-widths)
+ (* sep (sub1 how-many-cols))))
+ (cons (car full-max-widths)
+ (for/list ([c (in-list (cdr full-max-widths))]
+ [i (in-naturals 1)])
+ (define frac
+ ;; Give last column twice the space:
+ (if (= i (sub1 how-many-cols))
+ (/ 2 how-many-cols)
+ (/ 1 how-many-cols)))
+ (max 3
+ (floor (* avail frac)))))]))
(for ([row (in-list l)])
(for ([col (in-list row)]
[i (in-naturals 1)]
- [width (in-list max-widths)])
+ [width (in-list max-widths)]
+ [dots-pos (in-list dots-poses)])
+ (define col-width (string-length col))
(printf "~a~a"
- col
+ (if (col-width . <= . width)
+ col
+ (case dots-pos
+ [(right)
+ ;; Checksum: show prefix:
+ (~a (substring col 0 (- width 3))
+ "...")]
+ [(middle)
+ ;; Source
+ ;; To start "..." at a space:
+ (define m (regexp-match-positions #rx" " col))
+ (define left
+ (cond
+ [(and m
+ ((caar m) . < . (- width 3)))
+ ;; Dots at space:
+ (caar m)]
+ [else
+ ;; Put dots in middle:
+ (quotient (- width 3) 2)]))
+ (~a (substring col 0 left)
+ "..."
+ (substring col (+ (- col-width width)
+ 3 left)))]
+ [(left)
+ ;; Put dots at start:
+ (~a "..."
+ (substring col (min col-width (- col-width width -3))))]))
(if (= i how-many-cols)
""
- (make-string (+ (- width (string-length col)) 4) #\space))))
+ (let ([len (min (string-length col)
+ width)])
+ (make-string (+ (- width len) sep) #\space)))))
(printf "\n")))