Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Aug 2001 06:30:02 -0700 (PDT)
From:      Ruslan Ermilov <ru@FreeBSD.org>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/29247: fmt should not expand tabs.
Message-ID:  <200108141330.f7EDU2259139@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/29247; it has been noted by GNATS.

From: Ruslan Ermilov <ru@FreeBSD.org>
To: Ian Dowse <iedowse@maths.tcd.ie>
Cc: bug-followup@FreeBSD.org
Subject: Re: bin/29247: fmt should not expand tabs.
Date: Tue, 14 Aug 2001 16:20:18 +0300

 --7JfCtLOvnd9MIVvH
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 On Mon, Aug 06, 2001 at 03:40:35PM +0100, Ian Dowse wrote:
 > In message <20010806170033.A44549@sunbay.com>, Ruslan Ermilov writes:
 > >Ah, that.  That could be achieved by `fmt -l 8'.  Don't take it wrong!
 > >fmt(1) always replaces spaces by tabs first.  The old fmt(1) then did
 > >what new `-l 8' currently does, unconditionally, i.e., replaces every
 > >8 leading spaces by a single tab character.
 > 
 > Ok, I didn't understand fully why it worked, but a "!}fmt" in vi
 > has always left a tab-indented paragraph with tabs in the indentation,
 > and now it doesn't. This is the only way I ever use fmt, so the
 > new behaviour is quite annoying, and I don't think I'll just get
 > used to typing "!}fmt -l 8" instead :-).
 > 
 > I agree that the old behaviour was not an ideal way to achieve the
 > effect of keeping tab indents, but the outcome for me was the same
 > as if it had not expanded the tabs in the first place. I think that
 > to avoid this unwanted change in behaviour, either fmt needs to
 > remember whether the indentation used tabs, or it should default
 > to -l 8...
 > 
 OK, how about the following?
 
 
 Cheers,
 -- 
 Ruslan Ermilov		Oracle Developer/DBA,
 ru@sunbay.com		Sunbay Software AG,
 ru@FreeBSD.org		FreeBSD committer,
 +380.652.512.251	Simferopol, Ukraine
 
 http://www.FreeBSD.org	The Power To Serve
 http://www.oracle.com	Enabling The Information Age
 
 --7JfCtLOvnd9MIVvH
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: attachment; filename=p
 
 Index: fmt.1
 ===================================================================
 RCS file: /home/ncvs/src/usr.bin/fmt/fmt.1,v
 retrieving revision 1.8
 diff -u -p -r1.8 fmt.1
 --- fmt.1	2001/06/06 10:17:05	1.8
 +++ fmt.1	2001/08/14 13:20:10
 @@ -115,8 +115,13 @@ escaped to protect them from your shell.
  .It Fl l Ar number
  Replace multiple spaces with tabs at the start of each output
  line, if possible.
 +Each
  .Ar number
  spaces will be replaced with one tab.
 +The default is 8.
 +If
 +.Ar number
 +is 0, spaces are preserved.
  .It Fl t Ar number
  Assume that the input files' tabs assume
  .Ar number
 Index: fmt.c
 ===================================================================
 RCS file: /home/ncvs/src/usr.bin/fmt/fmt.c,v
 retrieving revision 1.15
 diff -u -p -r1.15 fmt.c
 --- fmt.c	2001/08/11 00:49:11	1.15
 +++ fmt.c	2001/08/14 13:20:11
 @@ -202,6 +202,15 @@ get_positive(const char *s, const char *
    return (size_t) result;
  }
  
 +static size_t
 +get_nonnegative(const char *s, const char *err_mess, int fussyP) {
 +  char *t;
 +  long result = strtol(s,&t,0);
 +  if (*t) { if (fussyP) goto Lose; else return 0; }
 +  if (result<0) { Lose: errx(EX_USAGE, "%s", err_mess); }
 +  return (size_t) result;
 +}
 +
  /* Global variables */
  
  static int centerP=0;		/* Try to center lines? */
 @@ -210,7 +219,7 @@ static size_t max_length=0;	/* Maximum l
  static int coalesce_spaces_P=0;	/* Coalesce multiple whitespace -> ' ' ? */
  static int allow_indented_paragraphs=0;	/* Can first line have diff. ind.? */
  static int tab_width=8;		/* Number of spaces per tab stop */
 -static size_t output_tab_width=0;	/* Ditto, when squashing leading spaces */
 +static size_t output_tab_width=8;	/* Ditto, when squashing leading spaces */
  static const char *sentence_enders=".?!";	/* Double-space after these */
  static int grok_mail_headers=0;	/* treat embedded mail headers magically? */
  
 @@ -258,7 +267,7 @@ main(int argc, char *argv[]) {
        continue;
      case 'l':
        output_tab_width
 -        = get_positive(optarg, "output tab width must be positive", 1);
 +        = get_nonnegative(optarg, "output tab width must be non-negative", 1);
        continue;
      case 'm':
        grok_mail_headers = 1;
 
 --7JfCtLOvnd9MIVvH--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200108141330.f7EDU2259139>