From: "Sven Eden" <sven.eden@gmx.de>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/ufed:master commit in: /
Date: Fri, 1 Feb 2013 10:49:50 +0000 (UTC) [thread overview]
Message-ID: <1359656698.da9fd3adf9e5aa3c3b8f99aa99535ab95efd9e2f.yamakuzure@gentoo> (raw)
commit: da9fd3adf9e5aa3c3b8f99aa99535ab95efd9e2f
Author: Sven Eden <sven.eden <AT> gmx <DOT> de>
AuthorDate: Thu Jan 31 18:24:58 2013 +0000
Commit: Sven Eden <sven.eden <AT> gmx <DOT> de>
CommitDate: Thu Jan 31 18:24:58 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/ufed.git;a=commit;h=da9fd3ad
Changed ufed-curses.c to support the new data model and added the implementation of the new drawing functions.
---
ufed-curses.c | 756 ++++++++++++++++++++++++++++++---------------------------
1 files changed, 403 insertions(+), 353 deletions(-)
diff --git a/ufed-curses.c b/ufed-curses.c
index f45b8e3..bc55ca1 100644
--- a/ufed-curses.c
+++ b/ufed-curses.c
@@ -6,61 +6,47 @@
#include <unistd.h>
#include <locale.h>
-/* internal types */
-struct window window[wCount] = {
- { NULL, 0, 0, 5, 0 }, /* Top */
- { NULL, 5, 0, -8, 3 }, /* Left */
- { NULL, 5, 3, -9, -6 }, /* List */
- { NULL, -4, 3, 1, -6 }, /* Input */
- { NULL, 5, -3, -8, 1 }, /* Scrollbar */
- { NULL, 5, -2, -8, 2 }, /* Right */
- { NULL, -3, 0, 3, 0 }, /* Bottom */
-};
-
-
/* internal members */
-static const char *subtitle;
-static const struct key *keys;
-static struct item *items, *currentitem;
+static const char* subtitle = NULL;
+static const sKey* keys = NULL;
+static sFlag* currentflag = NULL;
+static sFlag* flags = NULL;
+
// Needed for the scrollbar and its mouse events
static int listHeight, barStart, barEnd, dispStart, dispEnd;
/* external members */
-int topline, bottomline, minwidth;
-extern enum mask showMasked;
-extern enum order pkgOrder;
-extern enum scope showScope;
-extern int lineCountGlobal;
-extern int lineCountGlobalInstalled;
-extern int lineCountLocal;
-extern int lineCountLocalInstalled;
-extern int lineCountMasked;
-extern int lineCountMaskedInstalled;
-extern int lineCountMasked;
+sWindow window[wCount] = {
+ { NULL, 0, 0, 5, 0 }, /* Top --- Top ---- */
+ { NULL, 5, 0, -8, 3 }, /* Left L+------+S|R */
+ { NULL, 5, 3, -9, -6 }, /* List E| |c|i */
+ { NULL, -4, 3, 1, -6 }, /* Input F| List |r|g */
+ { NULL, 5, -3, -8, 1 }, /* Scrollbar T|______|B|h */
+ { NULL, 5, -2, -8, 2 }, /* Right |+Input-+r|t */
+ { NULL, -3, 0, 3, 0 }, /* Bottom ---Bottom--- */
+};
+int topline = 0, bottomline = 0, minwidth = 0;
+extern eMask e_mask;
+extern eOrder e_order;
+extern eScope e_scope;
+extern eState e_state;
+extern sListStats listStats;
/* internal prototypes */
-int (*callback)(struct item **, int);
-int (*drawitem)(struct item *, bool);
+static int (*callback)(sFlag**, int);
+static int (*drawflag)(sFlag*, bool);
void checktermsize(void);
-void draw(void);
-void drawscrollbar(void);
+void draw(bool withSep);
+void drawScrollbar(void);
int getListHeight(void);
-void resetDisplay(void);
+void resetDisplay(bool withSep);
void setNextItem(int count, bool strict);
void setPrevItem(int count, bool strict);
/* internal functions */
-/** @brief return the number of lines the full item display needs
-**/
-int getItemHeight(struct item *item)
-{
- // TODO : Add filtering and possible line break
- return item->ndescr;
-}
-
/** @brief get the sum of lines the list holds respecting current filtering
**/
@@ -68,19 +54,28 @@ int getListHeight()
{
int result = 0;
- if (show_unmasked != showMasked) {
- // TODO : add installed/not installed filter
- result += lineCountMasked + lineCountMaskedInstalled;
+ // Add masked lines
+ if (eMask_masked != e_mask) {
+ if (eState_installed != e_state)
+ result += listStats.lineCountMasked;
+ if (eState_notinstalled != e_state)
+ result += listStats.lineCountMaskedInstalled;
}
- if (show_masked != showMasked) {
- if (show_global != showScope) {
- // TODO : add installed/not installed filter
- result += lineCountLocal + lineCountLocalInstalled;
- }
- if (show_local != showScope) {
- // TODO : add installed/not installed filter
- result += lineCountGlobal + lineCountGlobalInstalled;
- }
+
+ // Add global lines
+ if (eScope_local != e_scope) {
+ if (eState_installed != e_state)
+ result += listStats.lineCountGlobal;
+ if (eState_notinstalled != e_state)
+ result += listStats.lineCountGlobalInstalled;
+ }
+
+ // Add local lines
+ if (eScope_global != e_scope) {
+ if (eState_installed != e_state)
+ result += listStats.lineCountLocal;
+ if (eState_notinstalled != e_state)
+ result += listStats.lineCountLocalInstalled;
}
return result;
@@ -103,14 +98,14 @@ void initcurses() {
mousemask(BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED | BUTTON1_PRESSED | BUTTON1_RELEASED, NULL);
#endif
checktermsize();
- { enum win w; for(w = (enum win) 0; w != wCount; w++) {
+ { eWin w; for(w = (eWin) 0; w != wCount; w++) {
window[w].win = newwin(wHeight(w), wWidth(w), wTop(w), wLeft(w));
} }
}
void cursesdone() {
- enum win w;
- for(w = (enum win) 0; w != wCount; w++)
+ eWin w;
+ for(w = (eWin) 0; w != wCount; w++)
delwin(window[w].win);
endwin();
}
@@ -124,77 +119,142 @@ void checktermsize() {
mvaddstr(0, 0, "Your screen is too small. Press Ctrl+C to exit.");
while(getch()!=KEY_RESIZE) {}
#else
- cursesdone();
- fputs("Your screen is too small.\n", stderr);
- exit(-1);
+ ERROR_EXIT(-1, "The following error occurred:\n\"%2\n\"",
+ "Your screen is too small.\n")
#endif
}
}
-void drawitems() {
+
+/** @brief redraw Bottom with or without status separators
+ * The window is not fully refreshed!
+ * @param withSep Draw status separators and filter status if true.
+ */
+void drawBottom(bool withSep)
+{
+ WINDOW* w = win(Bottom);
+
+ wattrset(w, COLOR_PAIR(2) | A_BOLD);
+ mvwaddch(w, 0, 0, ACS_VLINE);
+ wattrset(w, COLOR_PAIR(3));
+ waddch(w, ' ');
+ waddch(w, ACS_LLCORNER);
+ whline(w, ACS_HLINE, wWidth(Bottom)-6);
+ if (withSep) {
+ mvwaddch(w, 0, minwidth + 3, ACS_BTEE); // Before state
+ mvwaddch(w, 0, minwidth + 7, ACS_BTEE); // Between state and scope
+ mvwaddch(w, 0, minwidth + 10, ACS_BTEE); // After scope
+ }
+ mvwaddch(w, 0, wWidth(Bottom)-3, ACS_LRCORNER);
+ waddch(w, ' ');
+ wattrset(w, COLOR_PAIR(2) | A_BOLD);
+ waddch(w, ACS_VLINE);
+
+ waddch(w, ACS_VLINE);
+ wattrset(w, COLOR_PAIR(3));
+ if (keys) {
+ char buf[COLS + 1];
+ char *p = buf;
+ const sKey* key;
+ const size_t maxAdr = (const size_t)(buf+wWidth(Bottom)-3);
+ *p++ = ' ';
+ for(key=keys; key->key!='\0'; key++) {
+ size_t n = maxAdr - (size_t)p;
+ if(n > key->length)
+ n = key->length;
+ memcpy(p, key->descr, n);
+ p += n;
+ if ((size_t)p == maxAdr)
+ break;
+ *p++ = ' ';
+ }
+ memset(p, ' ', maxAdr + 1 - (size_t)p);
+ buf[wWidth(Bottom)-2] = '\0';
+ waddstr(w, buf);
+ } else
+ whline(w, ' ', wWidth(Bottom) - 3);
+
+ wattrset(w, COLOR_PAIR(2) | A_BOLD);
+ waddch(w, ACS_VLINE);
+
+ waddch(w, ACS_LLCORNER);
+ whline(w, ACS_HLINE, wWidth(Bottom)-2);
+ mvwhline(w, 2, wWidth(Bottom)-1, ACS_LRCORNER, 1);
+
+ wnoutrefresh(w);
+}
+
+
+void drawFlags() {
+ int lHeight = wHeight(List);
+
/* this method must not be called if the current
* item is not valid.
*/
- if (!isLegalItem(currentitem))
+ if (!isFlagLegal(currentflag))
ERROR_EXIT(-1,
- "drawitems() must not be called with a filtered currentitem! (topline %d listline %d)\n",
- topline, currentitem->listline)
+ "drawflags() must not be called with a filtered currentflag! (topline %d listline %d)\n",
+ topline, currentflag->listline)
- struct item *item = currentitem;
- int line = item->listline - topline;
+ sFlag* flag = currentflag;
+
+ int line = flag->listline - topline;
/* move to the top of the displayed list */
- while ((item != items) && (line > 0)) {
- item = item->prev;
- if (isLegalItem(item))
- line -= getItemHeight(item);
+ while ((flag != flags) && (line > 0)) {
+ flag = flag->prev;
+ if (isFlagLegal(flag))
+ line -= getFlagHeight(flag);
}
- /* If the above move ended up with item == items
+ /* If the above move ended up with flag == flags
* topline and line must be adapted to the current
- * item.
+ * flag.
* This can happen if the flag filter is toggled
- * and the current item is the first not filtered item.
+ * and the current flag is the first not filtered.
*/
- if ((item == items) && !isLegalItem(item)) {
- item = currentitem;
- topline = currentitem->listline;
+ if ((flag == flags) && !isFlagLegal(flag)) {
+ flag = currentflag;
+ topline = currentflag->listline;
line = 0;
}
// The display start line might differ from topline:
- dispStart = item->listline;
+ dispStart = flag->listline;
- for( ; line < wHeight(List); ) {
- item->currline = line; // drawitem() and maineventloop() need this
- line += drawitem(item, item == currentitem ? TRUE : FALSE);
+ for( ; line < lHeight; ) {
+ flag->currline = line; // drawflag() and maineventloop() need this
+ line += drawflag(flag, flag == currentflag ? TRUE : FALSE);
- if (line < wHeight(List)) {
- item = item->next;
+ if (line < lHeight) {
+ flag = flag->next;
/* Add blank lines if we reached the end of the
* flag list, but not the end of the display.
*/
- if(item == items) {
- char buf[wWidth(List)];
- memset(buf, ' ', wWidth(List));
- buf[wWidth(List)] = '\0';
+ if(flag == flags) {
+ int lWidth = wWidth(List);
+ char buf[lWidth];
+ memset(buf, ' ', lWidth);
+ buf[lWidth] = '\0';
wmove(win(List), line, 0);
wattrset(win(List), COLOR_PAIR(3));
- while(line++ < wHeight(List))
+ while(line++ < lHeight)
waddstr(win(List), buf);
}
} else
- dispEnd = item->listline + item->ndescr;
+ dispEnd = flag->listline + flag->ndesc;
}
wnoutrefresh(win(List));
}
-void drawscrollbar() {
+void drawScrollbar() {
+ int sHeight = wHeight(Scrollbar);
+ int lHeight = wHeight(List);
WINDOW *w = win(Scrollbar);
wattrset(w, COLOR_PAIR(3) | A_BOLD);
mvwaddch(w, 0, 0, ACS_UARROW);
- wvline(w, ACS_CKBOARD, wHeight(Scrollbar)-3);
+ wvline(w, ACS_CKBOARD, sHeight - 3);
/* The scrollbar location differs related to the
* current filtering of masked flags.
@@ -202,10 +262,10 @@ void drawscrollbar() {
listHeight = getListHeight();
// Only show a scrollbar if the list is actually longer than can be displayed:
- if (listHeight > wHeight(List)) {
- int sbHeight = wHeight(Scrollbar) - 3;
+ if (listHeight > lHeight) {
+ int sbHeight = sHeight - 3;
barStart = 1 + (dispStart * sbHeight / bottomline);
- barEnd = barStart + ((dispEnd - dispStart) * wHeight(List) / bottomline);
+ barEnd = barStart + ((dispEnd - dispStart) * lHeight / bottomline);
// Strongly filtered lists scatter much and must be corrected:
if (barEnd > sbHeight) {
@@ -216,19 +276,62 @@ void drawscrollbar() {
mvwaddch(w, barStart, 0, ACS_BLOCK);
}
- mvwaddch(w, wHeight(Scrollbar)-2, 0, ACS_DARROW);
- mvwaddch(w, wHeight(Scrollbar)-1, 0, ACS_VLINE);
+ mvwaddch(w, sHeight - 2, 0, ACS_DARROW);
+ mvwaddch(w, sHeight - 1, 0, ACS_VLINE);
wnoutrefresh(w);
}
-void draw() {
- size_t bufsize = COLS+1;
- char buf[bufsize];
- WINDOW *w;
- wnoutrefresh(stdscr);
+/** @brief redraw Input with blank input and current status if @a withSep is true
+ * This function resets the cursor to 0,0.
+ * The window is not fully refreshed!
+ * @param withSep Draw status separators and filter status if true.
+ */
+void drawStatus(bool withSep)
+{
+ WINDOW* w = win(Input);
+ int iWidth = wWidth(Input);
+
+ wattrset(w, COLOR_PAIR(3));
+
+ // Blank the input area
+ mvwhline(w, 0, 0, ' ', withSep ? minwidth : iWidth);
+
+ if (withSep) {
+ char buf[COLS+1];
+
+ // Add Status separators and explenation characters
+ mvwaddstr(w, 0, minwidth, " DPC Si");
+ mvwaddch(w, 0, minwidth, ACS_VLINE); // Before state
+ mvwaddch(w, 0, minwidth + 4, ACS_VLINE); // Between state and scope
+ mvwaddch(w, 0, minwidth + 7, ACS_VLINE); // After scope
+
+ // Use the unused right side to show the filter status
+ sprintf(buf, "%-*s%-6s / %-6s / %-12s] ",
+ max(2, iWidth - 40 - minwidth), " [",
+ eMask_masked == e_mask ? "masked" :
+ eMask_unmasked == e_mask ? "normal" : "all",
+ eScope_global == e_scope ? "global" :
+ eScope_local == e_scope ? "local" : "all",
+ eState_installed == e_state ? "installed" :
+ eState_notinstalled == e_state ? "not installed" : "all");
+ waddstr(w, buf);
+ }
+
+ // Reset cursor to 0,0 and apply changes
+ wmove(w, 0, 0);
+ wnoutrefresh(w);
+}
+
- w = win(Top);
+/** @brief redraw Top with or without status separators
+ * The window is not fully refreshed!
+ * @param withSep Draw status separators and filter status if true.
+ */
+void drawTop(bool withSep)
+{
+ WINDOW* w = win(Top);
+ char buf[COLS + 1];
wattrset(w, COLOR_PAIR(1) | A_BOLD);
sprintf(buf, "%-*.*s", wWidth(Top), wWidth(Top), "Gentoo USE flags editor " PACKAGE_VERSION);
@@ -248,23 +351,37 @@ void draw() {
wattrset(w, COLOR_PAIR(2) | A_BOLD);
waddch(w, ACS_VLINE);
- /* maybe this should be based on List? */
+ /* maybe this should be based on List?
+ * A: Absolutely not, or every line drawing algorithm
+ * had to be rewritten to cover the offsets. - Sven
+ */
waddch(w, ACS_VLINE);
wattrset(w, COLOR_PAIR(3));
waddch(w, ' ');
waddch(w, ACS_ULCORNER);
whline(w, ACS_HLINE, wWidth(Top)-6);
- mvwaddch(w, 4, minwidth + 3, ACS_TTEE); // Before state
- mvwaddch(w, 4, minwidth + 6, ACS_TTEE); // Between state and scope
- mvwaddch(w, 4, minwidth + 9, ACS_TTEE); // After scope
+ if (withSep) {
+ mvwaddch(w, 4, minwidth + 3, ACS_TTEE); // Before state
+ mvwaddch(w, 4, minwidth + 7, ACS_TTEE); // Between state and scope
+ mvwaddch(w, 4, minwidth + 10, ACS_TTEE); // After scope
+ }
mvwaddch(w, 4, wWidth(Top)-3, ACS_URCORNER);
waddch(w, ' ');
wattrset(w, COLOR_PAIR(2) | A_BOLD);
waddch(w, ACS_VLINE);
wnoutrefresh(w);
+}
+
+
+/** @brief redraw the whole screen
+ * @param withSep draw status separators if set to true
+ */
+void draw(bool withSep) {
+ WINDOW *w = win(Left);
+
+ wnoutrefresh(stdscr);
- w = win(Left);
wattrset(w, COLOR_PAIR(2) | A_BOLD);
mvwvline(w, 0, 0, ACS_VLINE, wHeight(Left));
wattrset(w, COLOR_PAIR(3));
@@ -278,176 +395,116 @@ void draw() {
mvwvline(w, 0, 1, ACS_VLINE, wHeight(Right));
wnoutrefresh(w);
- w = win(Bottom);
-
- wattrset(w, COLOR_PAIR(2) | A_BOLD);
- mvwaddch(w, 0, 0, ACS_VLINE);
- wattrset(w, COLOR_PAIR(3));
- waddch(w, ' ');
- waddch(w, ACS_LLCORNER);
- whline(w, ACS_HLINE, wWidth(Bottom)-6);
- mvwaddch(w, 0, minwidth + 3, ACS_BTEE); // Before state
- mvwaddch(w, 0, minwidth + 6, ACS_BTEE); // Between state and scope
- mvwaddch(w, 0, minwidth + 9, ACS_BTEE); // After scope
- mvwaddch(w, 0, wWidth(Bottom)-3, ACS_LRCORNER);
- waddch(w, ' ');
- wattrset(w, COLOR_PAIR(2) | A_BOLD);
- waddch(w, ACS_VLINE);
+ drawTop(withSep);
+ drawBottom(withSep);
+ drawStatus(withSep);
- waddch(w, ACS_VLINE);
- wattrset(w, COLOR_PAIR(3));
- {
- char *p = buf;
- const struct key *key;
- const size_t maxAdr = (const size_t)(buf+wWidth(Bottom)-3);
- *p++ = ' ';
- for(key=keys; key->key!='\0'; key++) {
- size_t n = maxAdr - (size_t)p;
- if(n > key->length)
- n = key->length;
- memcpy(p, key->descr, n);
- p += n;
- if ((size_t)p == maxAdr)
- break;
- *p++ = ' ';
- }
- /* If there is enough space, show which kind of flags
- * are displayed: normal, masked or all
- */
- if ((size_t)p < (maxAdr - 9)) {
- memset(p, ' ', maxAdr - 9 - (size_t)p);
- p += maxAdr - 9 - (size_t)p;
- if (show_unmasked == showMasked) strcpy(p, "[normal]");
- if (show_masked == showMasked) strcpy(p, "[masked]");
- if (show_both == showMasked) strcpy(p, "[ all ]");
- p += 8;
- }
- memset(p, ' ', maxAdr + 1 - (size_t)p);
- buf[wWidth(Bottom)-2] = '\0';
+ if (flags) {
+ drawFlags();
+ drawScrollbar();
}
- waddstr(w, buf);
- wattrset(w, COLOR_PAIR(2) | A_BOLD);
- waddch(w, ACS_VLINE);
-
- waddch(w, ACS_LLCORNER);
- whline(w, ACS_HLINE, wWidth(Bottom)-2);
- mvwhline(w, 2, wWidth(Bottom)-1, ACS_LRCORNER, 1);
-
- wnoutrefresh(w);
-
- w = win(Input);
- wattrset(w, COLOR_PAIR(3));
- mvwhline(w, 0, 0, ' ', wWidth(Input));
- mvwaddch(w, 0, minwidth, ACS_VLINE); // Before state
- mvwaddch(w, 0, minwidth + 3, ACS_VLINE); // Between state and scope
- mvwaddch(w, 0, minwidth + 6, ACS_VLINE); // After scope
- wmove(w, 0, 0);
- wnoutrefresh(w);
-
- drawitems();
- drawscrollbar();
wrefresh(win(List));
}
bool scrollcurrent() {
- if(currentitem->listline < topline)
- topline = max(currentitem->listline, currentitem->listline + currentitem->ndescr - wHeight(List));
- else if( (currentitem->listline + currentitem->ndescr) > (topline + wHeight(List)))
- topline = min(currentitem->listline + currentitem->ndescr - wHeight(List), currentitem->listline);
+ if(currentflag->listline < topline)
+ topline = max(currentflag->listline, currentflag->listline + currentflag->ndesc - wHeight(List));
+ else if( (currentflag->listline + currentflag->ndesc) > (topline + wHeight(List)))
+ topline = min(currentflag->listline + currentflag->ndesc - wHeight(List), currentflag->listline);
else
return false;
- drawitems();
- drawscrollbar();
+ drawFlags();
+ drawScrollbar();
return true;
}
bool yesno(const char *prompt) {
- wattrset(win(Input), COLOR_PAIR(4) | A_BOLD | A_REVERSE);
- mvwhline(win(Input), 0, 0, ' ', wWidth(Input));
- mvwaddch(win(Input), 0, minwidth, ACS_VLINE); // Before state
- mvwaddch(win(Input), 0, minwidth + 3, ACS_VLINE); // Between state and scope
- mvwaddch(win(Input), 0, minwidth + 6, ACS_VLINE); // After scope
- wmove(win(Input), 0, 0);
- waddstr(win(Input), prompt);
- whline(win(Input), 'Y', 1);
- wrefresh(win(Input));
- for(;;) switch(getch()) {
- case '\n': case KEY_ENTER:
- case 'Y': case 'y':
- return TRUE;
- case '\033':
- case 'N': case 'n':
- wattrset(win(Input), COLOR_PAIR(3));
- mvwhline(win(Input), 0, 0, ' ', wWidth(Input));
- mvwaddch(win(Input), 0, minwidth, ACS_VLINE); // Before state
- mvwaddch(win(Input), 0, minwidth + 3, ACS_VLINE); // Between state and scope
- mvwaddch(win(Input), 0, minwidth + 6, ACS_VLINE); // After scope
- wmove(win(Input), 0, 0);
- wnoutrefresh(win(Input));
- wrefresh(win(List));
- return FALSE;
+ WINDOW* wInp = win(Input);
+ bool doWait = true;
+ bool result = true;
+
+ drawStatus(true);
+ wattrset(wInp, COLOR_PAIR(4) | A_BOLD);
+ waddstr(wInp, prompt);
+ waddch(wInp, 'Y');
+ wrefresh(wInp);
+
+ while(doWait) {
+ switch(getch()) {
+ case '\n': case KEY_ENTER:
+ case 'Y': case 'y':
+ doWait = false;
+ break;
+ case '\033':
+ case 'N': case 'n':
+ drawStatus(true);
+ wrefresh(wInp);
+ result = false;
+ doWait = false;
+ break;
#ifdef KEY_RESIZE
case KEY_RESIZE:
resizeterm(LINES, COLS);
checktermsize();
- { enum win w; for(w = (enum win) 0; w != wCount; w++) {
+ { eWin w; for(w = (eWin) 0; w != wCount; w++) {
delwin(window[w].win);
window[w].win = newwin(wHeight(w), wWidth(w), wTop(w), wLeft(w));
} }
+
/* this won't work for the help viewer, but it doesn't use yesno() */
topline = 0;
scrollcurrent();
- draw();
- wattrset(win(Input), COLOR_PAIR(4) | A_BOLD | A_REVERSE);
- mvwhline(win(Input), 0, 0, ' ', wWidth(Input));
- mvwaddch(win(Input), 0, minwidth, ACS_VLINE); // Before state
- mvwaddch(win(Input), 0, minwidth + 3, ACS_VLINE); // Between state and scope
- mvwaddch(win(Input), 0, minwidth + 6, ACS_VLINE); // After scope
- wmove(win(Input), 0, 0);
- waddstr(win(Input), prompt);
- whline(win(Input), 'Y', 1);
- wrefresh(win(Input));
+ draw(true); // Only used outside help view.
+ wattrset(wInp, COLOR_PAIR(4) | A_BOLD);
+ waddstr(wInp, prompt);
+ waddch (wInp, 'Y');
+ wrefresh(wInp);
break;
#endif
+ }
}
- return FALSE;
+
+ return result;
}
int maineventloop(
const char *_subtitle,
- int(*_callback)(struct item **, int),
- int(*_drawitem)(struct item *, bool),
- struct item *_items,
- const struct key *_keys) {
+ int(*_callback)(sFlag**, int),
+ int(*_drawflag)(sFlag*, bool),
+ sFlag* _flags,
+ const sKey *_keys,
+ bool withSep) {
int result;
// Always reset the Filters on start and revert on exit
- enum mask oldMask = showMasked;
- enum scope oldScope = showScope;
- showMasked = show_unmasked;
- showScope = show_all;
+ eMask oldMask = e_mask;
+ eScope oldScope = e_scope;
+ eState oldState = e_state;
+ e_mask = eMask_unmasked;
+ e_scope = eScope_all;
+ e_state = eState_all;
{ const char *temp = subtitle;
- subtitle=_subtitle;
- _subtitle=temp; }
- { int(*temp)(struct item **, int) = callback;
- callback=_callback;
- _callback=temp; }
- { int(*temp)(struct item *, bool) = drawitem;
- drawitem=_drawitem;
- _drawitem=temp; }
- { struct item *temp=items;
- items=_items;
- _items=temp; }
- { const struct key *temp=keys;
- keys=_keys;
- _keys=temp; }
-
- currentitem = items;
+ subtitle = _subtitle;
+ _subtitle = temp; }
+ { int(*temp)(sFlag**, int) = callback;
+ callback = _callback;
+ _callback = temp; }
+ { int(*temp)(sFlag*, bool) = drawflag;
+ drawflag = _drawflag;
+ _drawflag = temp; }
+ { sFlag* temp = flags;
+ flags = _flags;
+ _flags = temp; }
+ { const sKey *temp = keys;
+ keys = _keys;
+ _keys = temp; }
+
+ currentflag = flags;
topline = 0;
- draw();
+ draw(withSep);
for(;;) {
int c = getch();
@@ -476,27 +533,27 @@ int maineventloop(
}
if(wmouse_trafo(win(List), &event.y, &event.x, FALSE)) {
if(event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED)) {
- struct item *item = currentitem;
- if(currentitem->currline > event.y) {
- do item = item->prev;
- while((item==items ? item=NULL, 0 : 1)
- && item->currline > event.y);
- } else if(currentitem->currline + getItemHeight(currentitem) - 1 < event.y) {
- do item = item->next;
- while((item->next==items ? item=NULL, 0 : 1)
- && item->currline + getItemHeight(item) - 1 < event.y);
+ sFlag* flag = currentflag;
+ if(currentflag->currline > event.y) {
+ do flag = flag->prev;
+ while((flag == flags ? flag = NULL, 0 : 1)
+ && flag->currline > event.y);
+ } else if(currentflag->currline + getFlagHeight(currentflag) - 1 < event.y) {
+ do flag = flag->next;
+ while((flag->next == flags ? flag = NULL, 0 : 1)
+ && flag->currline + getFlagHeight(flag) - 1 < event.y);
}
- if(item==NULL)
+ if(flag == NULL)
continue;
- drawitem(currentitem, FALSE);
- currentitem = item;
+ drawflag(currentflag, FALSE);
+ currentflag = flag;
if(event.bstate & BUTTON1_DOUBLE_CLICKED) {
- result=callback(¤titem, KEY_MOUSE);
+ result=callback(¤tflag, KEY_MOUSE);
if(result>=0)
goto exit;
}
scrollcurrent();
- drawitem(currentitem, TRUE);
+ drawflag(currentflag, TRUE);
}
} else if(wmouse_trafo(win(Scrollbar), &event.y, &event.x, FALSE)) {
// Only do mouse events if there actually is a scrollbar
@@ -531,19 +588,17 @@ int maineventloop(
event.y -= wTop(Scrollbar) + 1;
int sbHeight = wHeight(Scrollbar) - 3;
if( (event.y >= 0) && (event.y < sbHeight) ) {
- /// TODO : This needs to be fixed!
topline = (event.y * (listHeight - sbHeight + 2) + sbHeight - 1) / sbHeight;
- // was: topy = (event.y*(items->prev->top+items->prev->height-(wHeight(List)-1))+(wHeight(Scrollbar)-4))/(wHeight(Scrollbar)-3);
- while( (currentitem != items)
- && (currentitem->prev->listline >= topline) )
- currentitem = currentitem->prev;
- while( (currentitem->next != items)
- && (currentitem->listline < topline) )
- currentitem = currentitem->next;
- if( (currentitem->listline + currentitem->ndescr) > (topline + wHeight(List)) )
- topline = currentitem->listline + currentitem->ndescr - wHeight(List);
- drawitems();
- drawscrollbar();
+ while( (currentflag != flags)
+ && (currentflag->prev->listline >= topline) )
+ currentflag = currentflag->prev;
+ while( (currentflag->next != flags)
+ && (currentflag->listline < topline) )
+ currentflag = currentflag->next;
+ if( (currentflag->listline + currentflag->ndesc) > (topline + wHeight(List)) )
+ topline = currentflag->listline + currentflag->ndesc - wHeight(List);
+ drawFlags();
+ drawScrollbar();
wrefresh(win(List));
}
}
@@ -558,7 +613,7 @@ int maineventloop(
} else if(wmouse_trafo(win(Bottom), &event.y, &event.x, FALSE)) {
if( (event.bstate & (BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED))
&& (event.y == 1) ) {
- const struct key *key;
+ const sKey* key;
int x = event.x;
if(x < 2)
continue;
@@ -588,72 +643,79 @@ int maineventloop(
} else
#endif
{
- result=callback(¤titem, c);
- if(result>=0)
+ result = callback(¤tflag, c);
+ if(result >= 0)
goto exit;
switch(c) {
case KEY_UP:
- if(currentitem->currline < 0 ) {
+ if(currentflag->currline < 0 ) {
--topline;
- drawitems();
- drawscrollbar();
+ drawFlags();
+ drawScrollbar();
} else
setPrevItem(1, true);
break;
case KEY_DOWN:
- if( (currentitem->currline + getItemHeight(currentitem)) > wHeight(List) ) {
+ if( (currentflag->currline + getFlagHeight(currentflag)) > wHeight(List) ) {
++topline;
- drawitems();
- drawscrollbar();
+ drawFlags();
+ drawScrollbar();
} else
setNextItem(1, true);
break;
case KEY_PPAGE:
- if(currentitem!=items)
+ if(currentflag != flags)
setPrevItem(wHeight(List), false);
break;
case KEY_NPAGE:
- if(currentitem->next!=items)
+ if(currentflag->next != flags)
setNextItem(wHeight(List), false);
break;
case KEY_HOME:
- if(currentitem!=items)
- resetDisplay();
+ if(currentflag != flags)
+ resetDisplay(withSep);
break;
case KEY_END:
- if(currentitem->next!=items) {
- drawitem(currentitem, FALSE);
- currentitem = items->prev;
- while (!isLegalItem(currentitem))
- currentitem = currentitem->prev;
+ if(currentflag->next != flags) {
+ drawflag(currentflag, FALSE);
+ currentflag = flags->prev;
+ while (!isFlagLegal(currentflag))
+ currentflag = currentflag->prev;
scrollcurrent();
- drawitem(currentitem, TRUE);
+ drawflag(currentflag, TRUE);
}
break;
case KEY_F(5):
- if (show_masked == showMasked) showMasked = show_unmasked;
- else if (show_both == showMasked) showMasked = show_masked;
- else if (show_unmasked == showMasked) showMasked = show_both;
- resetDisplay();
+ if (eMask_masked == e_mask) e_mask = eMask_unmasked;
+ else if (eMask_unmasked == e_mask) e_mask = eMask_both;
+ else e_mask = eMask_masked;
+ resetDisplay(withSep);
break;
case KEY_F(6):
- if (pkgs_left == pkgOrder) pkgOrder = pkgs_right;
- else pkgOrder = pkgs_left;
- drawitems();
+ if (eOrder_left == e_order) e_order = eOrder_right;
+ else e_order = eOrder_left;
+ drawFlags();
break;
// case KEY_F(7):
-// if (show_local == showScope) showScope = show_all;
-// else if (show_global == showScope) showScope = show_local;
-// else if (show_all == showScope) showScope = show_global;
+// if (eScope_local == e_scope) e_scope = eScope_all;
+// else if (eScope_global == e_scope) e_scope = eScope_local;
+// else if (eScope_all == e_scope) e_scope = eScope_global;
+// resetDisplay();
+// break;
+//
+// case KEY_F(8):
+// if (eState_installed == e_state) e_state = eState_notinstalled;
+// else if (eState_notinstalled == e_state) e_state = eState_all;
+// else if (eState_all == e_state) e_state = eState_installed;
// resetDisplay();
// break;
@@ -661,16 +723,19 @@ int maineventloop(
case KEY_RESIZE:
resizeterm(LINES, COLS);
checktermsize();
- { enum win w; for(w = (enum win) 0; w != wCount; w++) {
+ { eWin w; for(w = (eWin) 0; w != wCount; w++) {
delwin(window[w].win);
window[w].win = newwin(wHeight(w), wWidth(w), wTop(w), wLeft(w));
} }
- if(result==-1) {
+ if(result == -1) {
topline = 0;
scrollcurrent();
} else
- items = currentitem;
- draw();
+ // This is the result of a resize in
+ // the help screen, it will re-init
+ // the help text lines.
+ flags = currentflag;
+ draw(withSep);
break;
#endif
}
@@ -680,124 +745,109 @@ int maineventloop(
exit:
subtitle = _subtitle;
callback = _callback;
- drawitem = _drawitem;
- items = _items;
+ drawflag = _drawflag;
+ flags = _flags;
keys = _keys;
// revert filters
- showMasked = oldMask;
- showScope = oldScope;
+ e_mask = oldMask;
+ e_scope = oldScope;
+ e_state = oldState;
- if(items!=NULL)
- resetDisplay();
+ if(flags != NULL)
+ resetDisplay(withSep);
return result;
}
-/* @brief Set display to first legal item and redraw
+/** @brief Set display to first legal item and redraw
+ * @param withSep draw status separators if set to true
*/
-void resetDisplay()
+void resetDisplay(bool withSep)
{
- currentitem = items;
- while (!isLegalItem(currentitem))
- currentitem = currentitem->next;
- topline = currentitem->listline;
- draw();
+ currentflag = flags;
+ while (!isFlagLegal(currentflag) && (currentflag->next != flags))
+ currentflag = currentflag->next;
+ topline = currentflag->listline;
+ draw(withSep);
}
-/* @brief set currentitem to the next item @a count lines away
+/** @brief set currentflag to the next flag @a count lines away
* @param count set how many lines should be skipped
* @param strict if set to false, at least one item has to be skipped.
*/
void setNextItem(int count, bool strict)
{
- bool result = true;
- struct item *curr = currentitem;
- int skipped = 0;
- int oldTop = topline;
+ bool result = true;
+ sFlag* curr = currentflag;
+ int skipped = 0;
+ int oldTop = topline;
while (result && (skipped < count)) {
- if (curr->next == items)
+ if (curr->next == flags)
result = false; // The list is finished, no next item to display
else
curr = curr->next;
// curr is only counted if it is not filtered out:
- if (isLegalItem(curr))
- skipped += getItemHeight(curr);
+ if (isFlagLegal(curr))
+ skipped += getFlagHeight(curr);
else
// Otherwise topline must be adapted or scrollcurrent() wreaks havoc!
- topline += curr->ndescr;
+ topline += curr->ndesc;
} // End of trying to find a next item
if ( (result && strict) || (!strict && skipped) ) {
// Move back again if curr ended up being filtered
- while (!isLegalItem(curr)) {
- topline -= curr->ndescr;
+ while (!isFlagLegal(curr)) {
+ topline -= curr->ndesc;
curr = curr->prev;
}
- drawitem(currentitem, FALSE);
- currentitem = curr;
+ drawflag(currentflag, FALSE);
+ currentflag = curr;
if (!scrollcurrent())
- drawitem(currentitem, TRUE);
+ drawflag(currentflag, TRUE);
} else
topline = oldTop;
}
-/* @brief set currentitem to the previous item @a count lines away
+/* @brief set currentflag to the previous item @a count lines away
* @param count set how many lines should be skipped
* @param strict if set to false, at least one item has to be skipped.
*/
void setPrevItem(int count, bool strict)
{
- bool result = true;
- struct item *curr = currentitem;
- int skipped = 0;
- int oldTop = topline;
+ bool result = true;
+ sFlag* curr = currentflag;
+ int skipped = 0;
+ int oldTop = topline;
while (result && (skipped < count)) {
- if (curr == items)
+ if (curr == flags)
result = false; // The list is finished, no previous item to display
else
curr = curr->prev;
// curr is only counted if it is not filtered out:
- if (isLegalItem(curr))
- skipped += getItemHeight(curr);
+ if (isFlagLegal(curr))
+ skipped += getFlagHeight(curr);
else
- topline -= curr->ndescr;
+ topline -= curr->ndesc;
} // End of trying to find next item
if ( (result && strict) || (!strict && skipped) ) {
// Move forth again if curr ended up being filtered
- while (!isLegalItem(curr)) {
- topline += curr->ndescr;
+ while (!isFlagLegal(curr)) {
+ topline += curr->ndesc;
curr = curr->next;
}
- drawitem(currentitem, FALSE);
- currentitem = curr;
+ drawflag(currentflag, FALSE);
+ currentflag = curr;
if (!scrollcurrent())
- drawitem(currentitem, TRUE);
+ drawflag(currentflag, TRUE);
} else
topline = oldTop;
}
-
-
-/* @brief return true if the given @a item is not filtered out
- */
-bool isLegalItem(struct item *item)
-{
- if ( // 1: Mask filter
- ( ( item->isMasked && (show_unmasked != showMasked))
- || (!item->isMasked && (show_masked != showMasked)) )
- // 2: Global / Local filter
- && ( ( item->isGlobal && ( (show_local != showScope) || (item->ndescr > 1) ) )
- || (!item->isGlobal && ( show_global != showScope)) ) )
- return true;
- return false;
-}
-
-
next reply other threads:[~2013-02-01 10:50 UTC|newest]
Thread overview: 238+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-01 10:49 Sven Eden [this message]
-- strict thread matches above, loose matches on Subject: below --
2020-11-07 14:25 [gentoo-commits] proj/ufed:master commit in: / Sven Eden
2020-05-02 8:38 Ulrich Müller
2019-09-27 6:42 Sven Eden
2019-09-27 6:39 Sven Eden
2019-09-24 17:57 Sven Eden
2019-09-24 17:56 Sven Eden
2019-04-07 15:17 David Seifert
2019-04-07 13:56 David Seifert
2019-04-07 13:19 David Seifert
2019-04-07 13:19 David Seifert
2019-04-07 13:19 David Seifert
2019-04-07 13:19 David Seifert
2019-04-07 13:19 David Seifert
2015-02-12 15:47 Sven Eden
2015-02-11 9:03 Sven Eden
2014-11-10 9:59 Sven Eden
2014-10-28 11:43 Sven Eden
2014-02-26 10:26 Sven Eden
2014-02-26 10:26 Sven Eden
2014-02-26 10:26 Sven Eden
2014-02-26 10:26 Sven Eden
2014-02-26 10:26 Sven Eden
2014-02-26 10:26 Sven Eden
2014-02-25 8:18 Sven Eden
2014-02-25 8:18 Sven Eden
2014-02-25 8:18 Sven Eden
2014-02-25 8:18 Sven Eden
2013-11-25 21:43 Sven Eden
2013-11-25 21:43 Sven Eden
2013-11-25 21:43 Sven Eden
2013-11-25 21:43 Sven Eden
2013-11-25 21:43 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-20 8:30 Sven Eden
2013-09-11 7:09 Sven Eden
2013-09-11 6:31 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-11 6:04 Sven Eden
2013-09-10 12:37 Sven Eden
2013-09-10 6:36 Sven Eden
2013-09-10 6:36 Sven Eden
2013-09-10 6:36 Sven Eden
2013-09-10 6:36 Sven Eden
2013-09-10 6:36 Sven Eden
2013-09-10 6:36 Sven Eden
2013-09-10 6:36 Sven Eden
2013-07-22 9:34 Sven Eden
2013-07-22 6:09 Sven Eden
2013-07-22 6:09 Sven Eden
2013-04-09 7:22 Sven Eden
2013-04-09 7:22 Sven Eden
2013-04-09 7:22 Sven Eden
2013-04-08 7:18 Sven Eden
2013-04-03 13:39 Sven Eden
2013-03-05 16:53 Sven Eden
2013-03-05 16:49 Sven Eden
2013-03-05 16:49 Sven Eden
2013-03-05 16:49 Sven Eden
2013-03-05 16:49 Sven Eden
2013-03-05 16:49 Sven Eden
2013-02-21 10:02 Sven Eden
2013-02-19 15:16 Sven Eden
2013-02-19 13:34 Sven Eden
2013-02-18 7:22 Sven Eden
2013-02-15 8:36 Sven Eden
2013-02-15 8:36 Sven Eden
2013-02-15 8:36 Sven Eden
2013-02-14 8:35 Sven Eden
2013-02-14 8:35 Sven Eden
2013-02-14 8:35 Sven Eden
2013-02-13 9:23 Sven Eden
2013-02-13 9:23 Sven Eden
2013-02-13 9:23 Sven Eden
2013-02-13 9:23 Sven Eden
2013-02-13 9:23 Sven Eden
2013-02-12 10:51 Sven Eden
2013-02-12 10:51 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-12 9:01 Sven Eden
2013-02-06 9:09 Sven Eden
2013-02-06 9:09 Sven Eden
2013-02-05 18:06 Paul Varner
2013-02-05 13:53 Sven Eden
2013-02-05 13:53 Sven Eden
2013-02-05 11:24 Sven Eden
2013-02-03 14:32 Sven Eden
2013-02-03 14:32 Sven Eden
2013-02-03 14:32 Sven Eden
2013-02-03 14:32 Sven Eden
2013-02-03 14:32 Sven Eden
2013-02-02 20:49 Sven Eden
2013-02-02 10:11 Sven Eden
2013-02-02 9:47 Sven Eden
2013-02-02 9:47 Sven Eden
2013-02-02 9:47 Sven Eden
2013-02-01 21:12 Sven Eden
2013-02-01 21:12 Sven Eden
2013-02-01 21:12 Sven Eden
2013-02-01 16:04 Sven Eden
2013-02-01 15:55 Sven Eden
2013-02-01 15:26 Sven Eden
2013-02-01 14:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-02-01 10:49 Sven Eden
2013-01-24 10:15 Sven Eden
2013-01-24 10:15 Sven Eden
2013-01-24 10:15 Sven Eden
2013-01-24 10:15 Sven Eden
2013-01-24 10:15 Sven Eden
2013-01-23 14:44 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-23 12:05 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-19 21:43 Sven Eden
2013-01-16 13:43 Sven Eden
2013-01-16 12:56 Sven Eden
2013-01-16 12:56 Sven Eden
2013-01-16 12:56 Sven Eden
2013-01-16 12:56 Sven Eden
2013-01-16 12:56 Sven Eden
2013-01-16 12:56 Sven Eden
2013-01-08 11:02 Sven Eden
2013-01-02 8:47 Sven Eden
2013-01-02 8:01 Sven Eden
2013-01-02 8:01 Sven Eden
2012-11-20 17:31 Paul Varner
2012-11-20 17:25 Paul Varner
2012-10-23 16:13 Paul Varner
2012-10-23 16:13 Paul Varner
2012-10-23 16:13 Paul Varner
2012-10-23 16:01 Paul Varner
2012-10-22 20:42 Paul Varner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1359656698.da9fd3adf9e5aa3c3b8f99aa99535ab95efd9e2f.yamakuzure@gentoo \
--to=sven.eden@gmx.de \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox