Cursor position after lcd.print() and lcd.scrollDisplayLeft()

rwiens,
This peaked my interest as I initially also expected the same behavior you expected.
So when in doubt, just go look at the code.
Then all becomes obvious.

The scrollDisplayLeft() sends the hd44780 command:
LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT
or
0x10 | 0x8 | 0x0
or 0x18
which is hd44780 command
Cursor/Display shift with S/C = 1, R/L = 0
which is moves the existing display to the left by
changing the base address of where the display fetches characters.
scrollDisplayLeft() does not alter the cursor position.

The next part is where the things are not so obvious.
setCursor() sends the hd44780 command:
(LCD_SETDDRAMADDR | (col + row_offsets[row])
or
0x80 | (col + row_offsets[row])
This will set the cursor position to an absolute address.
It is not dependent on the display position.

So what you are seeing is that column 15 appears to move, when in fact
what is really happening is that column 15 is staying the same and the display
window is changing.

In order to do what you want, all you need to do set the initial cursor position
and then not set the cursor position between updates.
Something like:

lcd.setCursor(15,0);   
for (chrdCnt=1; chrdCnt<chrdLen; chrdCnt++) {

        lcd.print(chords[chrdCnt]);
        delay(1000);
        lcd.scrollDisplayLeft();
     }

This will allow the cursor position (ram address) to continue to bump
as the character is written and then you can scroll it to the left between
each update.

I tried it and it does work.

--- bill