I've added an option to 'fmt' to ignore lines beginning with the
greater-than symbol, so that whole email replies can be piped through
fmt (e.g. via vi from mutt) without needing to repeat the command
for each of my paragraphs.

This is my first real patch, so I would appreciate any feedback.

Many thanks,

Anthony
Index: fmt.1
===================================================================
--- fmt.1	(revision 258550)
+++ fmt.1	(working copy)
@@ -99,6 +99,10 @@
 .Fl p
 flag, any change in the amount of whitespace at the start of a line
 results in a new paragraph being begun.
+.It Fl r
+Ignore lines beginning with a
+.Ql \&>
+(greater-than) character, marking email replies.
 .It Fl s
 Collapse whitespace inside lines, so that multiple whitespace
 characters are turned into a single space.
Index: fmt.c
===================================================================
--- fmt.c	(revision 258550)
+++ fmt.c	(working copy)
@@ -227,6 +227,7 @@
 static const wchar_t *sentence_enders=L".?!";	/* Double-space after these */
 static int grok_mail_headers=0;	/* treat embedded mail headers magically? */
 static int format_troff=0;	/* Format troff? */
+static int format_email_replies=1;	/* Format email replies? */
 
 static int n_errors=0;		/* Number of failed files. Return on exit. */
 static wchar_t *output_buffer=0;	/* Output line will be built here */
@@ -266,7 +267,7 @@
 
   /* 1. Grok parameters. */
 
-  while ((ch = getopt(argc, argv, "0123456789cd:hl:mnpst:w:")) != -1)
+  while ((ch = getopt(argc, argv, "0123456789cd:hl:mnprst:w:")) != -1)
   switch(ch) {
     case 'c':
       centerP = 1;
@@ -294,6 +295,9 @@
     case 'p':
       allow_indented_paragraphs = 1;
       continue;
+    case 'r':
+      format_email_replies = 0;
+      continue;
     case 's':
       coalesce_spaces_P = 1;
       continue;
@@ -328,6 +332,7 @@
 "         -m     try to make sure mail header lines stay separate\n"
 "         -n     format lines beginning with a dot\n"
 "         -p     allow indented paragraphs\n"
+"         -r     ignore lines beginning with a greater-than sign\n"
 "         -s     coalesce whitespace inside lines\n"
 "         -t <n> have tabs every <n> columns\n"
 "         -w <n> set maximum width to <n>\n"
@@ -419,6 +424,7 @@
       /* We need a new paragraph if and only if:
        *   this line is blank,
        *   OR it's a troff request (and we don't format troff),
+       *   OR it's not an email reply, prefixed with ">"
        *   OR it's a mail header,
        *   OR it's not a mail header AND the last line was one,
        *   OR the indentation has changed
@@ -427,6 +433,7 @@
        */
       if ( length==0
            || (line[0]=='.' && !format_troff)
+           || (line[0]=='>' && !format_email_replies)
            || header_type==hdr_Header
            || (header_type==hdr_NonHeader && prev_header_type>hdr_NonHeader)
            || (np!=last_indent
@@ -437,7 +444,8 @@
         first_indent = np;
         last_indent = np;
         if (header_type==hdr_Header) last_indent=2;	/* for cont. lines */
-        if (length==0 || (line[0]=='.' && !format_troff)) {
+        if (length==0 || (line[0]=='.' && !format_troff) ||
+	    (line[0]=='>' && !format_email_replies)) {
           if (length==0)
             putwchar('\n');
           else
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to