make mg statusline a bit more informative
Currently the statusline in mg shows the line and column numbers, which is nice but doesn't let you know your relative position in the file. Emacs shows 'top', 'bot', 'all' or your relative position like '42%'. This diff implements that behaviour in mg too. From: (fundamental-fill)--L3--C31 to: (fundamental-fill)--9%--L69--C0 or (fundamental-fill)--all--L1--C0 you get the idea. Index: display.c === RCS file: /cvs/src/usr.bin/mg/display.c,v retrieving revision 1.37 diff -p -u -r1.37 display.c --- display.c 4 Jun 2009 02:23:37 - 1.37 +++ display.c 10 Oct 2012 11:56:51 - @@ -835,8 +835,21 @@ modeline(struct mgwin *wp) ++n; if (linenos) { - len = snprintf(sl, sizeof(sl), --L%d--C%d, wp-w_dotline, - getcolpos()); + char location[4], r_location[4]; + + if (bp-b_lines = wp-w_ntrows) { + strlcpy(location, all, sizeof(location)); + } else if (wp-w_dotline = wp-w_ntrows) { + strlcpy(location, top, sizeof(location)); + } else if (wp-w_dotline = (bp-b_lines - wp-w_ntrows)) { + strlcpy(location, bot, sizeof(location)); + } else { + snprintf(r_location, sizeof(r_location), %d%%, (100 * wp-w_dotline) / bp-b_lines); + strlcpy(location, r_location, sizeof(location)); + } + + len = snprintf(sl, sizeof(sl), --%s--L%d--C%d, + location, wp-w_dotline, getcolpos()); if (len sizeof(sl) len != -1) n += vtputs(sl); } -- Cheers, Jasper Stay Hungry. Stay Foolish
Re: make mg statusline a bit more informative
Date: Wed, 10 Oct 2012 15:12:59 +0200 From: Jasper Lievisse Adriaanse jas...@openbsd.org Currently the statusline in mg shows the line and column numbers, which is nice but doesn't let you know your relative position in the file. Emacs shows 'top', 'bot', 'all' or your relative position like '42%'. This diff implements that behaviour in mg too. Emacs uses 'Top', 'Bot' and 'All' and: From: (fundamental-fill)--L3--C31 to: (fundamental-fill)--9%--L69--C0 --L69--C0--9%-- or (fundamental-fill)--all--L1--C0 --L1--C0--All--
Re: make mg statusline a bit more informative
On Wed, Oct 10, 2012 at 03:31:30PM +0200, Mark Kettenis wrote: Date: Wed, 10 Oct 2012 15:12:59 +0200 From: Jasper Lievisse Adriaanse jas...@openbsd.org Currently the statusline in mg shows the line and column numbers, which is nice but doesn't let you know your relative position in the file. Emacs shows 'top', 'bot', 'all' or your relative position like '42%'. This diff implements that behaviour in mg too. Emacs uses 'Top', 'Bot' and 'All' and: From: (fundamental-fill)--L3--C31 to: (fundamental-fill)--9%--L69--C0 --L69--C0--9%-- or (fundamental-fill)--all--L1--C0 --L1--C0--All-- Sure, let's go all the way then :) Index: display.c === RCS file: /cvs/src/usr.bin/mg/display.c,v retrieving revision 1.37 diff -p -u -r1.37 display.c --- display.c 4 Jun 2009 02:23:37 - 1.37 +++ display.c 10 Oct 2012 13:39:00 - @@ -835,8 +835,21 @@ modeline(struct mgwin *wp) ++n; if (linenos) { - len = snprintf(sl, sizeof(sl), --L%d--C%d, wp-w_dotline, - getcolpos()); + char location[4], r_location[4]; + + if (bp-b_lines = wp-w_ntrows) { + strlcpy(location, All, sizeof(location)); + } else if (wp-w_dotline = wp-w_ntrows) { + strlcpy(location, Top, sizeof(location)); + } else if (wp-w_dotline = (bp-b_lines - wp-w_ntrows)) { + strlcpy(location, Bot, sizeof(location)); + } else { + snprintf(r_location, sizeof(r_location), %d%%, (100 * wp-w_dotline) / bp-b_lines); + strlcpy(location, r_location, sizeof(location)); + } + + len = snprintf(sl, sizeof(sl), --L%d--C%d--%s, + wp-w_dotline, getcolpos(), location); if (len sizeof(sl) len != -1) n += vtputs(sl); } -- Cheers, Jasper Stay Hungry. Stay Foolish
Re: make mg statusline a bit more informative
On Wed, Oct 10, 2012 at 03:39:39PM +0200, Jasper Lievisse Adriaanse wrote: On Wed, Oct 10, 2012 at 03:31:30PM +0200, Mark Kettenis wrote: Date: Wed, 10 Oct 2012 15:12:59 +0200 From: Jasper Lievisse Adriaanse jas...@openbsd.org Currently the statusline in mg shows the line and column numbers, which is nice but doesn't let you know your relative position in the file. Emacs shows 'top', 'bot', 'all' or your relative position like '42%'. This diff implements that behaviour in mg too. Emacs uses 'Top', 'Bot' and 'All' and: From: (fundamental-fill)--L3--C31 to: (fundamental-fill)--9%--L69--C0 --L69--C0--9%-- or (fundamental-fill)--all--L1--C0 --L1--C0--All-- Sure, let's go all the way then :) The info tends to get cut off. Using emacs in a 80 column window shows the style part (the stuff within parentheses) and the counts more to the left. Also, mg seem to compute the percentage based on line numbers and cursor position. But emacs computes a number based the top line being shown and the total number of lines in the file. Emacs updates the number only when the top line changes due to cursor or other movement. -Otto Index: display.c === RCS file: /cvs/src/usr.bin/mg/display.c,v retrieving revision 1.37 diff -p -u -r1.37 display.c --- display.c 4 Jun 2009 02:23:37 - 1.37 +++ display.c 10 Oct 2012 13:39:00 - @@ -835,8 +835,21 @@ modeline(struct mgwin *wp) ++n; if (linenos) { - len = snprintf(sl, sizeof(sl), --L%d--C%d, wp-w_dotline, - getcolpos()); + char location[4], r_location[4]; + + if (bp-b_lines = wp-w_ntrows) { + strlcpy(location, All, sizeof(location)); + } else if (wp-w_dotline = wp-w_ntrows) { + strlcpy(location, Top, sizeof(location)); + } else if (wp-w_dotline = (bp-b_lines - wp-w_ntrows)) { + strlcpy(location, Bot, sizeof(location)); + } else { + snprintf(r_location, sizeof(r_location), %d%%, (100 * wp-w_dotline) / bp-b_lines); + strlcpy(location, r_location, sizeof(location)); + } + + len = snprintf(sl, sizeof(sl), --L%d--C%d--%s, +wp-w_dotline, getcolpos(), location); if (len sizeof(sl) len != -1) n += vtputs(sl); } -- Cheers, Jasper Stay Hungry. Stay Foolish
Re: make mg statusline a bit more informative
Date: Wed, 10 Oct 2012 15:39:39 +0200 From: Jasper Lievisse Adriaanse jas...@openbsd.org On Wed, Oct 10, 2012 at 03:31:30PM +0200, Mark Kettenis wrote: Date: Wed, 10 Oct 2012 15:12:59 +0200 From: Jasper Lievisse Adriaanse jas...@openbsd.org Currently the statusline in mg shows the line and column numbers, which is nice but doesn't let you know your relative position in the file. Emacs shows 'top', 'bot', 'all' or your relative position like '42%'. This diff implements that behaviour in mg too. Emacs uses 'Top', 'Bot' and 'All' and: From: (fundamental-fill)--L3--C31 to: (fundamental-fill)--9%--L69--C0 --L69--C0--9%-- or (fundamental-fill)--all--L1--C0 --L1--C0--All-- Sure, let's go all the way then :) Fine with me, but I'm neither an mg hacker or an mg user. So I think a more authoritive ok is needed. Index: display.c === RCS file: /cvs/src/usr.bin/mg/display.c,v retrieving revision 1.37 diff -p -u -r1.37 display.c --- display.c 4 Jun 2009 02:23:37 - 1.37 +++ display.c 10 Oct 2012 13:39:00 - @@ -835,8 +835,21 @@ modeline(struct mgwin *wp) ++n; if (linenos) { - len = snprintf(sl, sizeof(sl), --L%d--C%d, wp-w_dotline, - getcolpos()); + char location[4], r_location[4]; + + if (bp-b_lines = wp-w_ntrows) { + strlcpy(location, All, sizeof(location)); + } else if (wp-w_dotline = wp-w_ntrows) { + strlcpy(location, Top, sizeof(location)); + } else if (wp-w_dotline = (bp-b_lines - wp-w_ntrows)) { + strlcpy(location, Bot, sizeof(location)); + } else { + snprintf(r_location, sizeof(r_location), %d%%, (100 * wp-w_dotline) / bp-b_lines); + strlcpy(location, r_location, sizeof(location)); + } + + len = snprintf(sl, sizeof(sl), --L%d--C%d--%s, +wp-w_dotline, getcolpos(), location); if (len sizeof(sl) len != -1) n += vtputs(sl); }