summaryrefslogtreecommitdiff
path: root/dselect
diff options
context:
space:
mode:
authorGuillem Jover <guillem@debian.org>2014-08-11 15:59:41 +0200
committerGuillem Jover <guillem@debian.org>2014-08-15 03:42:59 +0200
commitb13e29d6875a316be2139875eea4d35b3790849e (patch)
treeec57ca45e7e2fa395f617c95b26e035a17a3893f /dselect
parentced655387fa38215c61d3df5478cd4228c04b92a (diff)
downloaddpkg-b13e29d6875a316be2139875eea4d35b3790849e.tar.gz
dselect: Add new architecture columns to package list view
The new columns, shown by default, can be turned off with the new ‘A’ key, or bound to another key via the new “archdisplay” keybinding.
Diffstat (limited to 'dselect')
-rw-r--r--dselect/helpmsgs.cc2
-rw-r--r--dselect/pkgcmds.cc25
-rw-r--r--dselect/pkgdisplay.cc17
-rw-r--r--dselect/pkgkeys.cc2
-rw-r--r--dselect/pkglist.cc2
-rw-r--r--dselect/pkglist.h4
-rw-r--r--dselect/pkgtop.cc18
7 files changed, 69 insertions, 1 deletions
diff --git a/dselect/helpmsgs.cc b/dselect/helpmsgs.cc
index 37d184c8f..20d75f569 100644
--- a/dselect/helpmsgs.cc
+++ b/dselect/helpmsgs.cc
@@ -45,7 +45,7 @@ Mark packages for later processing:\n\
Quit, exit, overwrite (note capitals!): ?, F1 request help (also Help)\n\
Return Confirm, quit (check dependencies) i, I toggle/cycle info displays\n\
Q Confirm, quit (override dep.s) o, O cycle through sort options\n\
- X, Esc eXit, abandoning any changes made v, V change status display opts\n\
+ X, Esc eXit, abandoning any changes made v, A, V change status display opts\n\
R Revert to state before this list ^l redraw display\n\
U set all to sUggested state / search (Return to cancel)\n\
D set all to Directly requested state n, \\ repeat last search\n")
diff --git a/dselect/pkgcmds.cc b/dselect/pkgcmds.cc
index 44079dd07..c0a1c736e 100644
--- a/dselect/pkgcmds.cc
+++ b/dselect/pkgcmds.cc
@@ -226,6 +226,31 @@ void packagelist::resortredisplay() {
refreshlist();
}
+void
+packagelist::kd_archdisplay()
+{
+ switch (archdisplayopt) {
+ case ado_both:
+ archdisplayopt = ado_none;
+ break;
+ case ado_none:
+ archdisplayopt = ado_available;
+ break;
+ case ado_available:
+ archdisplayopt = ado_both;
+ break;
+ default:
+ internerr("unknown archdisplayopt %d", archdisplayopt);
+ }
+ setwidths();
+ leftofscreen = 0;
+ ldrawnstart = ldrawnend = -1;
+ redrawtitle();
+ redrawcolheads();
+ redrawitemsrange(topofscreen, min(topofscreen + list_height, nitems));
+ refreshlist();
+}
+
void packagelist::kd_versiondisplay() {
switch (versiondisplayopt) {
case vdo_both: versiondisplayopt= vdo_none; break;
diff --git a/dselect/pkgdisplay.cc b/dselect/pkgdisplay.cc
index 4bae54edf..7b9b0170a 100644
--- a/dselect/pkgdisplay.cc
+++ b/dselect/pkgdisplay.cc
@@ -151,6 +151,23 @@ void packagelist::setwidths() {
add_column(col_package, _("Package"), verbose ? 16 : 12);
+ switch (archdisplayopt) {
+ case ado_none:
+ col_archinstalled.blank();
+ col_archavailable.blank();
+ break;
+ case ado_available:
+ col_archinstalled.blank();
+ add_column(col_archavailable, _("Avail.arch"), verbose ? 14 : 10);
+ break;
+ case ado_both:
+ add_column(col_archinstalled, _("Inst.arch"), verbose ? 14 : 10);
+ add_column(col_archavailable, _("Avail.arch"), verbose ? 14 : 10);
+ break;
+ default:
+ internerr("unknown archdisplayopt %d", archdisplayopt);
+ }
+
switch (versiondisplayopt) {
case vdo_none:
col_versioninstalled.blank();
diff --git a/dselect/pkgkeys.cc b/dselect/pkgkeys.cc
index 7666c3ec9..36eec2be7 100644
--- a/dselect/pkgkeys.cc
+++ b/dselect/pkgkeys.cc
@@ -51,6 +51,7 @@ const keybindings::interpretation packagelist_kinterps[] = {
{ "info", nullptr, &packagelist::kd_info, qa_noquit },
{ "toggleinfo", nullptr, &packagelist::kd_toggleinfo, qa_noquit },
{ "verbose", nullptr, &packagelist::kd_verbose, qa_noquit },
+ { "archdisplay", nullptr, &packagelist::kd_archdisplay, qa_noquit },
{ "versiondisplay", nullptr, &packagelist::kd_versiondisplay, qa_noquit },
{ "help", nullptr, &packagelist::kd_help, qa_noquit },
{ "search", nullptr, &packagelist::kd_search, qa_noquit },
@@ -122,6 +123,7 @@ const keybindings::orgbinding packagelist_korgbindings[]= {
{ 'o', "swaporder" },
{ 'O', "swapstatorder" },
{ 'v', "verbose" },
+ { 'A', "archdisplay" },
{ 'V', "versiondisplay" },
{ CTRL('l'), "redraw" },
{ '/', "search" },
diff --git a/dselect/pkglist.cc b/dselect/pkglist.cc
index f52a38199..5607b56c0 100644
--- a/dselect/pkglist.cc
+++ b/dselect/pkglist.cc
@@ -426,6 +426,7 @@ packagelist::packagelist(keybindings *kb) : baselist(kb) {
recursive = false;
sortorder= so_priority;
statsortorder= sso_avail;
+ archdisplayopt = ado_both;
versiondisplayopt= vdo_both;
sortmakeheads();
finalsetup();
@@ -444,6 +445,7 @@ packagelist::packagelist(keybindings *kb, pkginfo **pkgltab) : baselist(kb) {
sortorder= so_unsorted;
statsortorder= sso_unsorted;
+ archdisplayopt = ado_none;
versiondisplayopt= vdo_none;
finalsetup();
}
diff --git a/dselect/pkglist.h b/dselect/pkglist.h
index f995a595b..4be10fcfa 100644
--- a/dselect/pkglist.h
+++ b/dselect/pkglist.h
@@ -92,6 +92,8 @@ protected:
column col_section;
column col_priority;
column col_package;
+ column col_archinstalled;
+ column col_archavailable;
column col_versioninstalled;
column col_versionavailable;
column col_description;
@@ -111,6 +113,7 @@ protected:
bool recursive, verbose;
enum { so_unsorted, so_section, so_priority, so_alpha } sortorder;
enum { sso_unsorted, sso_avail, sso_state } statsortorder;
+ enum { ado_none, ado_available, ado_both } archdisplayopt;
enum { vdo_none, vdo_available, vdo_both } versiondisplayopt;
bool calcssadone, calcsssdone;
struct perpackagestate *headings;
@@ -204,6 +207,7 @@ protected:
void kd_info();
void kd_toggleinfo();
void kd_verbose();
+ void kd_archdisplay();
void kd_versiondisplay();
packagelist(keybindings *kb); // nonrecursive
diff --git a/dselect/pkgtop.cc b/dselect/pkgtop.cc
index 5e596aa62..dde30b7f8 100644
--- a/dselect/pkgtop.cc
+++ b/dselect/pkgtop.cc
@@ -208,6 +208,19 @@ void packagelist::redraw1itemsel(int index, int selected) {
waddch(listpad, ' ');
+ if (col_archinstalled.width) {
+ draw_column_sep(col_archinstalled, screenline);
+ draw_column_item(col_archinstalled, screenline, pkg->installed.arch->name);
+
+ waddch(listpad, ' ');
+ }
+ if (col_archavailable.width) {
+ draw_column_sep(col_archavailable, screenline);
+ draw_column_item(col_archavailable, screenline, pkg->available.arch->name);
+
+ waddch(listpad, ' ');
+ }
+
if (col_versioninstalled.width) {
draw_column_item(col_versioninstalled, screenline,
versiondescribe(&pkg->installed.version, vdew_nonambig));
@@ -279,6 +292,11 @@ void packagelist::redrawcolheads() {
draw_column_head(col_priority);
draw_column_head(col_package);
+ if (col_archinstalled.width)
+ draw_column_head(col_archinstalled);
+ if (col_archavailable.width)
+ draw_column_head(col_archavailable);
+
if (col_versioninstalled.width)
draw_column_head(col_versioninstalled);
if (col_versionavailable.width)