On Sat, Aug 31, 2024 at 07:01:21PM +0000, Eric Wong wrote:
> Rene Kita <m...@rkta.de> wrote:
[...]
> > Eric, just in case you are still interested I also have a patch to force
> > folding in <pre> tags.
> 
> Thanks, I am still interested in the <pre> folding patch as well.

Patch is below.

> I didn't find an improvement from using
> Do-not-override-cols-option-value.patch on my <pre>-heavy sites

I read this as: The patch worked, but the result was not satisfying
because of the many <pre>s, right? Thanks for testing.

> Thanks again.

Your welcome.

I don't expect those patches to be available in Debian in the near
future. You might check out my fork at [0], those patches are currently
staged in branch 'next' for some beta testing.

[0]: https://sr.ht/~rkta/w3m


----->8------
>From 6e93a36c274dd2a3b9541730aa59023915660c2f Mon Sep 17 00:00:00 2001
From: Rene Kita <m...@rkta.de>
Date: Sun, 1 Sep 2024 12:23:17 +0200
Subject: [PATCH] Enable folding in pre tags

Some bug trackers are really annoying to read, because they place
comments in <pre> elements. They usually provide some CSS to make it
readable.

As we do not speak CSS, add a command to reload the page folding those
long lines. This is a one-time operation. Additionally add an option to
make this behaviour permanent.
---
 doc-de/README.func |  1 +
 doc/README.func    |  1 +
 file.c             |  7 +++++--
 fm.h               |  1 +
 main.c             | 11 +++++++++++
 proto.h            |  1 +
 rc.c               |  3 +++
 7 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/doc-de/README.func b/doc-de/README.func
index cb175db4..7adabfba 100644
--- a/doc-de/README.func
+++ b/doc-de/README.func
@@ -31,6 +31,7 @@ EXEC_SHELL    Führe Shell-Befehl aus und zeige Ausgabe an
 EXIT           Sofort beenden
 EXTERN         Verwende externen Browser zur Anzeige
 EXTERN_LINK    Verwende externen Browser zur Anzeige des Linkziels
+FOLD_PRE       Erzwinge Umbruch von langen Zeilen in <pre>-Elementen
 FRAME          Wechsle zwischen Kennung und Umsetzung von HTML-Frames
 GOTO           Öffne angegebenes Dokument in neuem Puffer
 GOTO_HOME      Zurück zur Startseite (die Variablen HTTP_HOME oder WWW_HOME 
spezifiziert wurden)
diff --git a/doc/README.func b/doc/README.func
index 55523a4b..65ca1f84 100644
--- a/doc/README.func
+++ b/doc/README.func
@@ -31,6 +31,7 @@ EXEC_SHELL    Execute shell command and display output
 EXIT           Quit without confirmation
 EXTERN         Display using an external browser
 EXTERN_LINK    Display target using an external browser
+FOLD_PRE       Fold long lines in <pre> elements
 FRAME          Toggle rendering HTML frames
 GOTO           Open specified document in a new buffer
 GOTO_HOME      Return to the homepage (specified HTTP_HOME or WWW_HOME 
variable)
diff --git a/file.c b/file.c
index fb0a75ef..74927de9 100644
--- a/file.c
+++ b/file.c
@@ -30,6 +30,7 @@
 
 #define MAX_INPUT_SIZE 80 /* TODO - max should be screen line length */
 
+extern int fold_pre;
 static int frame_source = 0;
 static int need_number = 0;
 
@@ -2604,7 +2605,7 @@ check_breakpoint(struct readbuffer *obuf, int pre_mode, 
char *ch)
     int tlen, len = obuf->line->length;
 
     append_tags(obuf);
-    if (pre_mode)
+    if (pre_mode && !fold_pre)
        return;
     tlen = obuf->line->length - len;
     if (tlen > 0
@@ -6695,7 +6696,8 @@ HTMLlineproc0(char *line, struct html_feed_environ 
*h_env, int internal)
                        proc_mchar(obuf, 1, delta, &str, mode);
                }
                if (obuf->flag & (RB_SPECIAL & ~RB_PRE_INT))
-                   continue;
+                   if (!fold_pre)
+                       continue;
            }
            else {
                if (!IS_SPACE(*str))
@@ -6923,6 +6925,7 @@ loadHTMLBuffer(URLFile *f, Buffer *newBuf)
        if (src)
            newBuf->sourcefile = tmp->ptr;
     }
+    fold_pre |= FoldPre;
 
     loadHTMLstream(f, newBuf, src, newBuf->bufferprop & BP_FRAME);
 
diff --git a/fm.h b/fm.h
index a2ca9ead..5353589e 100644
--- a/fm.h
+++ b/fm.h
@@ -1058,6 +1058,7 @@ global int ignore_null_img_alt init(TRUE);
 #define DISPLAY_INS_DEL_FONTIFY        2
 global int displayInsDel init(DISPLAY_INS_DEL_NORMAL);
 global int FoldTextarea init(FALSE);
+global int FoldPre init(FALSE);
 global int FoldLine init(FALSE);
 #define DEFAULT_URL_EMPTY      0
 #define DEFAULT_URL_CURRENT    1
diff --git a/main.c b/main.c
index 144c21b7..4c0b8613 100644
--- a/main.c
+++ b/main.c
@@ -129,6 +129,7 @@ static int searchKeyNum(void);
 
 int enable_inline_image;
 extern int opt_cols;
+int fold_pre;
 
 static void
 fversion(FILE * f)
@@ -4963,6 +4964,14 @@ DEFUN(vwSrc, SOURCE VIEW, "Toggle between HTML shown or 
processed")
     displayBuffer(Currentbuf, B_NORMAL);
 }
 
+DEFUN(foldPre, FOLD_PRE, "Fold long lines in <pre> elements")
+{
+    fold_pre = 1;
+    Currentbuf->need_reshape = TRUE;
+    displayBuffer(Currentbuf, B_FORCE_REDRAW);
+    fold_pre = FoldPre;
+}
+
 /* reload */
 DEFUN(reload, RELOAD, "Load current document anew")
 {
@@ -4990,6 +4999,7 @@ DEFUN(reload, RELOAD, "Load current document anew")
        disp_err_message("Can't reload stdin", TRUE);
        return;
     }
+    fold_pre = FoldPre;
     copyBuffer(&sbuf, Currentbuf);
     if (Currentbuf->bufferprop & BP_FRAME &&
        (fbuf = Currentbuf->linkBuffer[LB_N_FRAME])) {
@@ -5086,6 +5096,7 @@ DEFUN(reload, RELOAD, "Load current document anew")
        restorePosition(Currentbuf, &sbuf);
     }
     displayBuffer(Currentbuf, B_FORCE_REDRAW);
+    fold_pre = FoldPre;
 }
 
 /* reshape */
diff --git a/proto.h b/proto.h
index ed0d2369..ef8216e0 100644
--- a/proto.h
+++ b/proto.h
@@ -99,6 +99,7 @@ extern void peekURL(void);
 extern void peekIMG(void);
 extern void curURL(void);
 extern void vwSrc(void);
+extern void foldPre(void);
 extern void reload(void);
 extern void reshape(void);
 extern void chkURL(void);
diff --git a/rc.c b/rc.c
index 2fcacb56..151771dd 100644
--- a/rc.c
+++ b/rc.c
@@ -98,6 +98,7 @@ static int OptionEncode = FALSE;
 #define CMT_DISP_BORDERS N_("Display table borders, ignore value of BORDER")
 #define CMT_DISABLE_CENTER N_("Disable center alignment")
 #define CMT_FOLD_TEXTAREA N_("Fold lines in TEXTAREA")
+#define CMT_FOLD_PRE N_("Fold lines in PRE")
 #define CMT_DISP_INS_DEL N_("Display INS, DEL, S and STRIKE element")
 #define CMT_COLOR        N_("Display with color")
 #define CMT_HINTENSITY_COLOR N_("Use high-intensity colors")
@@ -436,6 +437,8 @@ struct param_ptr params1[] = {
      CMT_DISABLE_CENTER, NULL},
     {"fold_textarea", P_CHARINT, PI_ONOFF, (void *)&FoldTextarea,
      CMT_FOLD_TEXTAREA, NULL},
+    {"fold_pre", P_CHARINT, PI_ONOFF, (void *)&FoldPre,
+     CMT_FOLD_PRE, NULL},
     {"display_ins_del", P_INT, PI_SEL_C, (void *)&displayInsDel,
      CMT_DISP_INS_DEL, displayinsdel},
     {"ignore_null_img_alt", P_INT, PI_ONOFF, (void *)&ignore_null_img_alt,
-- 
2.46.0

Reply via email to