diff options
Diffstat (limited to 'mbbsd/pmore.c')
-rw-r--r-- | mbbsd/pmore.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/mbbsd/pmore.c b/mbbsd/pmore.c index 931aefe0..1ddaaae7 100644 --- a/mbbsd/pmore.c +++ b/mbbsd/pmore.c @@ -159,12 +159,15 @@ enum { /* browsing preference */ typedef struct { - int rawmode, // show file as-is. - wrapmode; // wrap? + /* mode flags */ + unsigned short int + rawmode, // show file as-is. + wrapmode, // wrap? + indicator; // show wrap indicators? } MF_BrowsingPrefrence; MF_BrowsingPrefrence bpref = -{ 0, MFDISP_WRAP_WRAP, }; +{ 0, MFDISP_WRAP_WRAP, 1, }; /* pretty format header */ #define FH_HEADERS (4) // how many headers do we know? @@ -910,7 +913,14 @@ mf_disp() } else #endif { - if(col <= maxcol) + /* if col > maxcol, + * because we have the space for + * "indicators" (one byte), + * so we can tolerate one more byte. + */ + if(col <= maxcol || + (mf.dispe < mf.end-1 && + *(mf.dispe+1) == '\n')) outc(*mf.dispe); else switch (bpref.wrapmode) { @@ -951,10 +961,13 @@ mf_disp() if(wrapping) endline = MFDISP_PAGE-1; - if(wrapping) - outs(MFDISP_WRAP_INDICATOR); - else - outs(MFDISP_TRUNC_INDICATOR); + if(bpref.indicator) + { + if(wrapping) + outs(MFDISP_WRAP_INDICATOR); + else + outs(MFDISP_TRUNC_INDICATOR); + } } else wrapping = 0; @@ -1010,7 +1023,7 @@ static const char * const pmore_help[] = { "(f/b) 跳至下/上篇", "(a/A) 跳至同一作者下/上篇", "(t/[-/]+) 主題式閱\讀:循序/前/後篇", - "(w/\\) 切換顯示原始內容/自動折行", // this IS already aligned! + "(\\/w/W) 切換顯示原始內容/自動折行/折行符號", // this IS already aligned! "(q)(←) 結束", "(h)(H)(?) 本說明畫面", #ifdef DEBUG @@ -1380,6 +1393,10 @@ pmore(char *fpath, int promptend) } MFDISP_DIRTY(); break; + case 'W': + bpref.indicator = !bpref.indicator; + MFDISP_DIRTY(); + break; case '\\': bpref.rawmode = !bpref.rawmode; MFDISP_DIRTY(); |