unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Tab width oddity
@ 2014-09-23 20:58 Nate Bargmann
  2014-09-23 23:20 ` Emanuel Berg
  0 siblings, 1 reply; 5+ messages in thread
From: Nate Bargmann @ 2014-09-23 20:58 UTC (permalink / raw)
  To: help-gnu-emacs

Although I've used Emacs on and off in the past, this time I decided to 
get serious about using it.  Editing some C source I found that in a 
struct where assignments had been lined up by other contributors and 
other editors that Emacs is making a slight mess of things.  I will try 
to explain and if needed I can post some screenshots.

My tab-stop-list is (8 16 24 32 40 48 56 64 72 80 88 96 104 112 120) and 
I am using CC-mode with indent defaults.

For example, I have a line like:

	.foo =		bar;

For most lines this lines up just fine but for some the '=' is positioned 
at a tab-stop -1 (position 7, 15, 23, etc) and the next character in the 
source file is a tab (0x09).  The character immediately following is also 
a tab.  Editors such as Vim and Midnight Commander only give the tab 
character one blank in this position and give the following tab the 
customary 8 blanks (per my settings).  However, Emacs is expanding the 
first tab to 9 blanks before showing the second tab character.  I do not 
see this occurring when a tab character is two or more characters to the 
left of the tab stop.  I first became aware of this when I found things 
were not lined up in Emacs as I had expected and a 'git diff' showed that 
my changes had moved the assignment operand to the left by one tab stop.

Neither my search of the Emacs documentation nor any amount of searching 
the Web has turned up mention of this.  Hopefully, this is not an FAQ I 
have yet to find.

Thanks,

- Nate


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Tab width oddity
  2014-09-23 20:58 Tab width oddity Nate Bargmann
@ 2014-09-23 23:20 ` Emanuel Berg
  2014-09-24  3:13   ` Nate Bargmann
  0 siblings, 1 reply; 5+ messages in thread
From: Emanuel Berg @ 2014-09-23 23:20 UTC (permalink / raw)
  To: help-gnu-emacs

Nate Bargmann <n0nb.DO.NOT.SPAM@ME.n0nb.us> writes:

> For most lines this lines up just fine but for some
> the '=' is positioned at a tab-stop -1 (position 7,
> 15, 23, etc) and the next character in the source
> file is a tab (0x09). The character immediately
> following is also a tab. Editors such as Vim and
> Midnight Commander only give the tab character one
> blank in this position and give the following tab the
> customary 8 blanks (per my settings). However, Emacs
> is expanding the first tab to 9 blanks before showing
> the second tab character. I do not see this occurring
> when a tab character is two or more characters to the
> left of the tab stop. I first became aware of this
> when I found things were not lined up in Emacs as I
> had expected and a git diff' showed that my changes
> had moved the assignment operand to the left by one
> tab stop.

This is difficult to understand. Can you include the
code that behaves strange so I (we) can try to
reproduce it?

I never thought about tabs in the context of
indentation (or the c-mode), but in general I don't
like tabs and I have made it so they are automatically
replaced by spaces on save-buffer.

This is what I have on tabs:

(setq-default tab-width 3)

(defun untab-all ()
  (if (not (member major-mode '(makefile-gmake-mode
                                makefile-mode) )) ; exceptions
      (untabify (point-min) (point-max)) )
  nil) ; tell 'did not write buffer to disk'

(setq before-save-hook '(untab-all delete-trailing-whitespace))

The reason for the exceptions are that 'make' wants
tabs in Makefiles. And that's the only time I ever use
them.

-- 
underground experts united


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Tab width oddity
  2014-09-23 23:20 ` Emanuel Berg
@ 2014-09-24  3:13   ` Nate Bargmann
  2014-09-24  3:35     ` Yuri Khan
       [not found]     ` <mailman.9457.1411530092.1147.help-gnu-emacs@gnu.org>
  0 siblings, 2 replies; 5+ messages in thread
From: Nate Bargmann @ 2014-09-24  3:13 UTC (permalink / raw)
  To: help-gnu-emacs

On Wed, 24 Sep 2014 01:20:14 +0200, Emanuel Berg wrote:

> This is difficult to understand. Can you include the code that behaves
> strange so I (we) can try to reproduce it?

I am not certain if the news server I am on will pass the attachment.  
The file is available from:

https://github.com/N0NB/hamlib/blob/master/rotorez/rotorez.c

The interesting segment is from lines 320 through 326, although more 
exist throughout the file.  Lines 322 and 323 show the effect I am only 
seeing in Emacs.

For comparison, I have posted screen shots.  The first is Emacs in a 
terminal window with whitespace-mode on.  In both of the following shots 
the tab highlighting character is in the correct position after the '=' 
character but then nine positions are added instead of one:

http://i197.photobucket.com/albums/aa106/N0NB/Misc/emacs-term.jpg

This is Emacs running in its own X session also with whitespace-mode on:

http://i197.photobucket.com/albums/aa106/N0NB/Misc/emacs-gui.jpg

This is Midnight Commander using its internal editor highlighting the 
white space.  The cursor is on line 322 and only the right arrow of the 
tab highlighting sequence is visible.  The assignment operand is properly 
lined up:

http://i197.photobucket.com/albums/aa106/N0NB/Misc/mc-term.jpg

And Vim (I didn't have the command handy to show white space):

http://i197.photobucket.com/albums/aa106/N0NB/Misc/vim-term.jpg

Finally, the file printed in the terminal window using cat:

http://i197.photobucket.com/albums/aa106/N0NB/Misc/cat-term.jpg


As I see it, Emacs is the one in error here as Midnight Commander, Vim, 
cat, and the GitHub Web interface (along with Git tools) agree on the 
formatting.  Only Emacs seems to be processing the case where the tab 
only occupies one space of screen position incorrectly.

HTH,

- Nate



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Tab width oddity
  2014-09-24  3:13   ` Nate Bargmann
@ 2014-09-24  3:35     ` Yuri Khan
       [not found]     ` <mailman.9457.1411530092.1147.help-gnu-emacs@gnu.org>
  1 sibling, 0 replies; 5+ messages in thread
From: Yuri Khan @ 2014-09-24  3:35 UTC (permalink / raw)
  To: Nate Bargmann; +Cc: help-gnu-emacs@gnu.org

On Wed, Sep 24, 2014 at 10:13 AM, Nate Bargmann
<n0nb.DO.NOT.SPAM@me.n0nb.us> wrote:

> https://github.com/N0NB/hamlib/blob/master/rotorez/rotorez.c
>
> The interesting segment is from lines 320 through 326, although more
> exist throughout the file.  Lines 322 and 323 show the effect I am only
> seeing in Emacs.

This manner of aligning will break when tab size is changed. You
should not use it.

Tabs work consistently when they are at the start of each line. Within
the line, use spaces exclusively.

> For comparison, I have posted screen shots.  The first is Emacs in a
> terminal window with whitespace-mode on.  In both of the following shots
> the tab highlighting character is in the correct position after the '='
> character but then nine positions are added instead of one:

This is a somewhat known problem[1] with whitespace-mode.

[1]: http://www.emacswiki.org/emacs/WhiteSpace#toc9



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Tab width oddity
       [not found]     ` <mailman.9457.1411530092.1147.help-gnu-emacs@gnu.org>
@ 2014-09-24 10:36       ` Nate Bargmann
  0 siblings, 0 replies; 5+ messages in thread
From: Nate Bargmann @ 2014-09-24 10:36 UTC (permalink / raw)
  To: help-gnu-emacs

On Wed, 24 Sep 2014 10:35:03 +0700, Yuri Khan wrote:

> This manner of aligning will break when tab size is changed. You should
> not use it.
> 
> Tabs work consistently when they are at the start of each line. Within
> the line, use spaces exclusively.

This thread isn't about editing policy, so I'll continue to focus on the 
technical question at hand.

>> For comparison, I have posted screen shots.  The first is Emacs in a
>> terminal window with whitespace-mode on.  In both of the following
>> shots the tab highlighting character is in the correct position after
>> the '=' character but then nine positions are added instead of one:
> 
> This is a somewhat known problem[1] with whitespace-mode.
> 
> [1]: http://www.emacswiki.org/emacs/WhiteSpace#toc9

That makes sense.  Interestingly, when I had opened Emacs with whitespace-
mode disabled, I saw the misalignment.  When I enabled whitespace-mode 
last night it placed the special characters as shown in the screen shots, 
but the alignment did not change.  Just now I disabled whitespace-mode 
and the buffer was realigned as I expected compared to the other editors 
and cat.  I exited Emacs and restarted and the expected alignment is 
shown.

Perhaps I had exited Emacs with whitespace-mode enabled on that 
particular buffer at some time in the past and since I am saving and 
reloading the desktop, it may have retained the previous display 
alignment from when whitespace-mode was enabled.

At least now I understand what is going on and can take corrective 
action.  Thanks much.

- Nate


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-09-24 10:36 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-23 20:58 Tab width oddity Nate Bargmann
2014-09-23 23:20 ` Emanuel Berg
2014-09-24  3:13   ` Nate Bargmann
2014-09-24  3:35     ` Yuri Khan
     [not found]     ` <mailman.9457.1411530092.1147.help-gnu-emacs@gnu.org>
2014-09-24 10:36       ` Nate Bargmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).