How Can ISPF tell a Line number from a Line command ?

How Can ISPF tell a Line number from a Line command? How can the ISPF editor know the difference between Line 1000 with a D on it, and Line 1000 with D1000 on it, or D10 or D100 ?

If you are reading this, you probably use the TSO/ISPF editor, or some similar text editor, to do your work. Many times every day you tab over to the line number column and type in a line command such as R or D. The line is repeated or deleted. You type R20 to get twenty copies of a line. You might have wondered how the editor knows whether to interpret the 20 as the replication factor, or just part of the underlying line number.

Initially you think:  Maybe it's the 3270 Modified Data Tag(MDT)? The flag that indicates a field has had data entered.  But then you realize that there is only one MDT per field.  So, only one for the entire line number field.  There has to be some other information used.

After pondering the question briefly you forget about it, until one day the inevitable happens.

You're editing a big dataset and you want to replicate one line, say line 1001. You quickly tab over to the line number column, which contains 001001.  In your haste you go past the first zero and put the R in column 2 rather than column 1:
0R1001
Still in a hurry, you accidentally hit the very sensitive right arrow cursor key, and the cursor moves to the last zero on the line.
0R1001
When you hit enter, you get ten copies of the line instead of one.

Since you have no recollection of accidentally grazing the right arrow key, you get annoyed with the editor (or the 3270 emulator).
Then you decide you'll just delete 9 of the lines. You go to line 001002 and type d9:
d91002
Again your right pinky finger grazes the right cursor arrow, moving the cursor one position to the right, and again you don't notice it. You hit enter, and you've deleted 91 lines. If you registered two right-arrow strokes instead of one, you've deleted 910 lines. Your annoyance with the editor (or the 3270 emulation package) escalates.

Contemplating your situation, you remember having previously wondered to yourself, How does the editor tell the line number from the replication factor?

Since you don't remember moving the cursor accidentally, you remain as puzzled as ever.  Now that you've read this, though, you know what happened.  That other piece of information the editor has and uses is the cursor position, that is, the position of the cursor at the time the enter key is pressed.

There's no need to take my word for it.  Go edit something and play around with it.  Repeat the exact cases shown above.  Invent new ones.  (It might be more fun and feel safer if you use "x" (for exclude) rather than R or D.)  The editor is pretty smart and dodges a lot of possible mistakes, but there just isn't enough information there for it to be able to determine with certainty 100% of the time whether a digit in the line number field is really part of the line number or part of the replication factor.

How do you guard against this sort of thing tripping you up? Cautious people tend to insert a blank at the end of their intended line command, or press the erase-end-of-field key.  It's also a good idea to run with the edit UNDO option enabled, so you can easily reverse any inadvertent errors.  UNDO is enabled when RECOVERY is on in the ISPF edit profile.