The Day Return Became Enter (2023)
Original: The day Return became Enter (2023)
Key topics
The nostalgia is palpable as techies reminisce about the day Apple blurred the lines between "Return" and "Enter" on their keyboards. Some commenters shared fond memories of using "Enter" to create page breaks in old Mac apps like AppleWorks, while others discovered that on modern Macs, pressing "Fn + Return" still mimics the old "Enter" key behavior. As it turns out, the distinction between "Return" and "Enter" has roots in ancient computing protocols, with "Return" tied to character-based systems and "Enter" originating from IBM's form-based input style. The discussion reveals a mix of confusion, nostalgia, and newfound understanding among commenters.
Snapshot generated from the HN discussion
Discussion Activity
Very active discussionFirst comment
38m
Peak period
100
Day 4
Avg / period
26.7
Based on 160 loaded comments
Key moments
- 01Story posted
Aug 29, 2025 at 8:12 AM EDT
4 months ago
Step 01 - 02First comment
Aug 29, 2025 at 8:51 AM EDT
38m after posting
Step 02 - 03Peak activity
100 comments in Day 4
Hottest window of the conversation
Step 03 - 04Latest activity
Sep 7, 2025 at 12:02 PM EDT
4 months ago
Step 04
Generating AI Summary...
Analyzing up to 500 comments to identify key contributors and discussion patterns
Want the full context?
Jump to the original sources
Read the primary article or dive into the live Hacker News thread when you're ready.
If applications followed the UI guidelines, Enter behaved like Return if enter didn’t make sense in the context and vice versa. Yes, that was mostly (when do you have UI to enter a multi-line text to be processed as a separate unit?) but when it mattered, return started a new line, and enter sent entered text to be processed by the application.
MPW shell was a (?the?) prime example. In its editor, Return started a new line, Enter executed the current selection or, if there was none, line.
The only thing I really use this for is renaming files in Finder: select a file and press Enter to edit the filename.
Are there any other apps in which it does something useful nowadays?
The habit of using Enter has been so ingrained for so many years that I never tried pressing Return before now. Has that always worked? I suspect that it didn’t at some point in the past, though it may be you have to go back a long way. Or perhaps I've been mistaken about this for decades and never realised…
Enter is for IBM 3278 style where a "screenful" or form of inputs is buffered by the terminal and sent as a whole when the user presses enter or send. Fewer interrupts and context switches at the mainframe. Required even its own ssh client. Return key exists, too, and can be part of the buffered data record.
In practice the enter term leaked into the character-based world.
ASCII standardized on a character set containing control codes for line printers, so it included CR and LF separately. It's a bit weird that some terminals changed the semantics of those control codes, but I guess things never stay static in time.
The printers either kept track of the number of lines printed "so far", or, in the case of a chain printer, there was a literal chain (similar to an engine timing belt) that had a particular location that was supposed to be aligned with the paper perforation.
Standard tractor feed paper had a printable area that was 132 monospaced characters wide (13.2") and 11" high. Tractor feed paper had the holes at a standard distance apart vertically and a standard margin to allow for the tractor holes and an area before printing, so that the paper could also have vertical perforations to remove the tractor feed paper after printing.
Teletypes were 72 characters wide and 0.1" line height and used continuous paper rolls.
Also, if you're ever mystified by SQL's CHAR/VARCHAR handling of trailing whitespace, look into IBM "block-based" terminals and their text input and the conventions match exactly.
It's ironic that, though we haven't seen a Return key for a long time, the down-left arrow symbol still used on many keyboards represents the motion of a carriage return. I guess there's no other symbol that would convey the meaning of Enter as well.
https://daringfireball.net/2020/07/return_and_enter
If I recall correctly, only Return caused an evaluation attempt, while Enter merely added a line break for readability.
Just wait until UI mafia from Microsoft, Apple or Google find about this. They will come with a new symbol every 3 months.
(I guess the arrow's supposed to represents the movement of the cursor, not the paper/carriage.)
“Manual hyphenation was not ad-
vised, either”
It is a very common older model iPhone, so I wonder if they lined that up on purpose. Brilliant, if so. It isn’t a manual hyphen, it just so happens to hit there.
"Manual hy-
phenation was not advised, either."
Why not “Sure”?
Proceed.
Engage.
Take that!
En Garde!
Go!
Blam!
Start your engines!
Yes.
Forward.
Eh, good enough.
https://youtu.be/K4eScf6TMaM
https://www.folklore.org/Do_It.html
Also, the text is nicely readable but none of the images are viewable.
Line Feed moved the paper up one line, Form Feed moved the paper up by a "form length" or, in the case of chain printers, to the particular position on the chain that was synchronized with the perforations on the paper itself.
The carriage return physical device on the typewriter combined moving the carriage (which could be done by hand) and the rolling of the paper up one line (which could also be done by hand) into one convenient motion.
Carriage return always returned the carriage to the far right. Neither the print ball (if there was one), the printwheel, nor the typebars moved. Linefeed rotated the platen.
It's true the carriage return lever operated both the carriage and the platen. Manually operated with the left hand and pushed one level deep it would release the carriage lock and let you return the carriage to the right. Pushed a second level deep it would rotate the platen one, one and a half, or two lines depending on the setting.
Certainly the head moved on most if not all ball/cylinder/wheel devices. Look at the Selectrics, Teletype 33, the Diablo/Xerox/Qume terminals, as common examples.
IBM Selectric: https://www.youtube.com/watch?v=vNUEUth7qjc
IBM Wheelwriter: https://www.youtube.com/watch?v=ZabsF0aIE6k
NEC Spinwriter: https://www.youtube.com/watch?v=tCCB0AW9yT4
Diablo: https://www.youtube.com/watch?v=C5bodpSsFl8&t=342
Teletype Model 33: https://www.youtube.com/watch?v=6N8gu5F894k
So when one types, the bell alerts the typist to the need to return the carriage; typically you get quite a few characters after the bell, either to finish your word, or hyphenate.
Which makes it ding-slide rather than slide-ding :)
It was hilarious for a few minutes, then got old really quick, so it didn't last the day. The Oscar extension stuck around for months though ("I love it because it's trash!"). Computers were just so much fun back then...
Even then I assume it was really a troll as much as anything else.
https://en.wikipedia.org/wiki/Model_M_keyboard
EDIT: Holy cow, those Model M pictures are so nostalgic.
EDIT: In the US I guess that's right of "'"? Below backspace, above the right shift.
The reason I remember is it took me quite a while to actually run the damn thing :P
In this case, one reason why "wagon return" might have made more sense is because there is a wagon that holds the platen of the typewriter.
Doesn't seem perfectly consistent in English either. When there is a "wagon train" in a Western movie it is often full of people in wagons. Seems like wagon vs carriage is a bit more complex than just if it carries people or not?
https://en.wikipedia.org/wiki/Covered_wagon
So that's a full-circle kind of comment you've got there.
To release it, you either pressed the shift key down, or pressed the shift lock again to "unlock" the shift.
No animals were harmed by the implementation of the tooth :)
Then the whole CRLF vs CR vs LF for line endings in files would have been totally avoided, with CR returning the print-head/cursor to the left-most position (right-most on R-L languages) and LF literally moving the print-head/cursor down.
The drivers for the particular terminal could have translated as required, and we would not need (in 2025!) to be specifying to git and elsewhere what to convert line endings to/from.
I know that back in the days of literal TTYs (ASR-33) where I cut my teeth, the BEL/BS/SP/CR/LF/FF etc characters were literally controlling a print head, but even then it didn't make much sense that we didn't have internal representation of what was needed (field separator, group separator, record separator) that was translated when doing actual I/O to a physical device.
There is "pipe delimited" which used "|" (ASCII 124 decimal) to separate fields, which actually makes way more sense, because that character is rarely used in normal text.
It's also a good separator when a human is reading the file.
I am not sure whether RS could have replaced LF or CR+LF in this kind of free-format database; overloading record and line separators makes sense. But if FS-separated fields were a thing, people on MSDOS would have been used to seeing ⌙ as a field separator and likewise for other OSes.
CR: move next character position to position 1 horizontally LF: move next character position to vertically below current character position, potentially inserting SP characters.
So a combination of CR/LF, or LF/CR would have the effect of "New Line".
No, it's not.
That stuff is left over from 1940s-1950s schemes for polled multidrop teletype machines - multiple stations on one wire, taking turns. The idea was that you punched paper tapes locally and then put them into a reader. When it was your station's turn, the central machine would send a polling sequence of a few characters, the selected reader would start up, read one message into the upstream system, then stop. In the other direction, the central station could send a turn-on code to any machine, print a message, then turn it off. Only one machine at a time could run. Those control characters were the delimiters for that process. All of this was mechanical, done by a unit called the "stunt box", which you can look up if really bored.
RS-485 is a descendant of that technology, still used in some industrial control systems.
(I used to restore antique Teletypes for fun, and had a functional Telegraph Office at steampunk conventions for about seven years.)
I thought the control characters for that sort of use were the DC1-4 characters?
RS-485 uses polling but my understanding is that the characters for polling usually involve like "FF" (hex) and some sort of device ID.
I just read a TTY model 28 manual about the stunt box and I didn't see anything specific about FS/GS/RS there.
How were messages delimited in the polled multidrop environment?
The ones I used were ASR-33s on 20mA current loop interfaces.
The Model 28 was a 5-bit Baudot (ITA2 code) machine with a stunt box. The Model 35, an ASCII machine, had a similar system, with different coding.[1] The term "Selective calling" replaced "stunt box".
ASCII-67 is modern ASCII, but there was previously ASCII-63.[2] That keyboard has special keys for selective calling. WRU, RU, EOT, EOA, TAPE, ~TAPE, etc. Codes didn't become standardized industry-wide until ASCII-67. Before that, there were lots of variations.
Here's a popular view of the process in the Baudot era.[3] That big switching center is essentially Sendmail built from of relays and paper tape equipment. It was called "Plan 55-A".[4]
[1] https://www.smecc.org/teleprinters/35selcall001.pdf
[2] https://lostbits.net/blog/the-teletype-model-35-character-se...
[3] https://youtu.be/PKJyGuhCQdQ?t=369
[4] https://en.wikipedia.org/wiki/Plan_55-A
But still there is a lot of stuff that uses ASCII STX/ETX and then some kind of field separators inside otherwise human readable message. Things like industrial scales, industrial barcode readers and what not usually use something like that as default output format.
[1] https://aether.ltd
Are you doing anything more than calling dos2unix?
Why would you use LF if the focus of the application that you develop is Windows? You make the life harder for these users. :-)
Seriously: your argument typically comes from developers who consider GNU/Linux as a first-class citizen as a development or deployment platform, and Windows only as a second-class citizen (assuming that a Windows port actually exists).
I can accept an argument like "I, as a developer, don't care about Windows and its users, so all my source code is in UNIX format." This is a conscious, though quite political decision.
But an argument like "not using LF makes lifes harder" without a relativization on which premises this claim is build (such as "GNU/Linux and macOS users are much more important for as, and if there exist any users or developers who use Windows, we consider them to be undesired, because they make everybody's lifes harder") is intellectual ignorance.
If you develop on windows and only for windows, use CRLF all the way. Just do NOT forget to set .gitattributed correctly, and you are set.
With ReactOS, there even exists a flavor that is not developed by Microsoft. If you consider Wine and its derivates as an implementation of the WinAPI, you have one additional (or multiple if you consider their derivates) implementation of the WinAPI.
Even if you only consider the flavours of Microsoft Windows that are full operating systems, you immediately get multiple ones:
- the discontinued Win 9x series
- the discontinued Windows CE, Windows Embedded CE, Windows Embedded Compact, Windows Mobile, Windows Pocket series (technically quite different from both Windows 9x and Windows NT)
- Lots of variants (indirectly) derived from Windows NT:
* Windows (desktop OS)
* Windows Server
* Windows IoT (I would claim that at least for the Windows 10 IoT Core version, the user experience is quite different from both desktop and server Windows)
* Windows PE [1]
* Further discontinued variants such as Windows Phone
[1] https://en.wikipedia.org/wiki/Windows_Preinstallation_Enviro...
I never touched ReactOS, but I suspect is modern enough to handle LF only too. It was targeting Win2003 AFAIR.
So yeah, I stand corrected abit. If you develop only for windows (especially legacy), use CRLF. Anything w/ portability in mind, go for LF only...
Hopefully nobody is using it for documents, but most text-based internet protocols, including SMTP and HTTP, use CRLF for line endings.
The confusion about "LF" (Unix) vs "CR" (Apple) vs "CR/LF" (MS/DOS & Windows) is because we didn't have an explicit "Line End" character in 7-bit ASCII.
There was "EOT" (Ctrl-D/ASCII 4/EOF in Unix) , "ETX" (Ctrl-C/ASCII 3), and other characters that were used to mean other I/O, including ones that didn't match the ASCII definition like Ctrl-S/Ctrl-Q to stop/start I/O, and Ctrl-Z to mean EOF (MS/DOS & Windows).
I think this is one of those things that sounds kind of nice in principle, but where the real-world practicalities just don't work out.
The I/O drivers could translate as necessary, that's the point of using an explicit character to mean "new line" as opposed to either "carriage return" or "line feed".
Effectively moving away from explicit carriage and paper controls to a character that was explicitly internal to mean to generate whatever carriage/paper controls were needed on output/editing etc.
https://en.m.wikipedia.org/wiki/Enter_key#/media/File%3AEnte...
I wonder if the labels on your linked keyboard really mean much. It could be like how Apple calls their backspace key delete, and has their own names for some of the modifiers.
Edited: Mixed up Matlab and Mathematica
https://www.apple.com/shop/product/MXK83LL/A/magic-keyboard-...
https://commons.wikimedia.org/wiki/File:AT_keyboard_original...
https://commons.wikimedia.org/wiki/File:IBM_Model_M.png
https://www.daskeyboard.com/blog/wp-content/uploads/Cherry_k...
https://superuser.com/a/1368499
Personally I use a Pinky4 keyboard where every key is 1U these days, even space and enter.
I can't imagine any mainstream use where you'd want to enter a long sequence of symbols (!@#$% etc) needing Shift, other than letters.
One thing the article doesn't mention is that some of the old teletypewriters were so slow that you could not be guaranteed that you would get the carriage to the start of the line by using only one Enter character, so it was mandatory to use two.
This meant that all linefeeds consisted of the following characters: CR CR LF (two carriage returns followed by one linefeed). Even in the time where most of the equipment were modern and didn't really need this, you couldn't know if somebody somewhere still had an old teletype running. So this was mandatory and part of the standard.
On mainframes there is also a distinction between Return and Enter. As far as I remember there was a soft return, which only moved the cursor down. And there was a hard return, which acted as Send - thereby transmitting your screen to the mainframe.
Something similar can be used on modern computers. Here is an example in Excel: If you edit a cell (with F2) you can end the edit by using Enter. But if you have enabled to wrap text you can use Alt+Enter to just input a linefeed without exiting the editor.
This is useful if you're trying to type verbatim inside a block, it's less so if you have a strong muscle-memory to shift+enter and do so while in the code block and find yourself sending half a message.
I also use a mixture of teams, discord and slack, and while slack does allow for customisations, I'd always rather get used to defaults to avoid having to configure on every machine I use.
There isn't quite a consistent well agreed default for the behaviour across applications, and that too is a source of frustration.
So I've taken to typing up any long messages in a PM to myself, and then copying that out to my intended target once I'm ready.
There's a setting to turn that off so it behaves consistently. Or there was last time I used Slack.
But changing settings on platforms which I need to use across different computers and accounts is also cause for frustration, so I try to adapt to the defaults, no matter how frustrating.
That won't change if you had a different dedicated key for "move one line down but don't send `enter` keycode". You'd still accidentally hit `enter` due to muscle memory.
After all, if you could get past muscle memory, you'd simply press Shift while hitting Enter.
I'd claim that the article draws its own wrong conclusions.
The key was not renamed. On the IBM PC, the key got overloaded with two functions.
The IBM PC keyboard was preceded by larger keyboards with the same mechanism, style and font for use with IBM's terminals. Those had two separate keys for ↵ and Enter.
The ↵ symbol was the Return symbol signifying the Return function. The textual legend "Enter" signified the Enter function, for data entry.
Some early Model F XT keyboards did not have stabilised keys so the touch-area had to be 1×1 with room only for ↵. From the Mode F AT (large backwards-L key) forwards however, the key did have both legends: ↵ and Enter. From there on, "Enter" is mostly just what IBM PC users called it.
There are other common misconceptions about key legends. For example that ↹ would mean Tab, when it is two symbols: ⇥ for Tab and ⇤ for Back-Tab. Back-tab is on the top because it is activated with Shift. (And again, some IBM terminal keyboards had separate Tab and Back-Tab keys. Apple keyboards have only the ⇥ symbol, BTW.)
Later, some systems, notably IBM's, overloaded this to move to the ‘next’ field on a form, which might be to the left and down the page. So from there MS-DOS/Windows stuck us with a Tab that sometimes moves horizontally within a text field, and sometimes moves to a different field. Just like Return sometimes moves to a new line/paragraph and sometimes submits a form.
Where it goes off the rails is when we embed a user interface inside another user interface. That's not a problem specific to the tabulator, but also with all novigation functions, like home, forward, and back.
I rarely use web-based email interfaces, but when I do, I accidentally send half-written email messages, because I'm trying to use a block quote or something similarly indented. It's especially bad when the next field is the 'Send' button, and pressing the spacebar sends the message.
I still remember when the ⌘ key was "open apple".
And young people look at me like I’m crazy when I tell them to press “omppu Z”… But it’s a hard habit to break. I don’t even know what the official name of the key is in Finnish.
http://xahlee.info/kbd/i/Apple_IIe_keyboard_f91f4.jpg
https://www.applefritter.com/files/styles/95-percent/public/...
The IIgs keyboard had both the "open apple" and "looped square" symbols on that key, with the "closed apple" becoming option:
https://i0.wp.com/www.applerescueofdenver.com/wp-content/upl...
The extended keyboard had both keys on each side of the spacebar:
https://www.reddit.com/media?url=https%3A%2F%2Fi.redd.it%2Fa...
On the Mac, the keys were always officially called command and option, as far as I recall:
https://cdn.shopify.com/s/files/1/0653/6917/8326/products/25...
https://en.wikipedia.org/wiki/Apple_keyboards#Layout_and_fea...
All ISO layouts plus a few of the other ANSI layouts (like Korean) make use of the symbols
in CR LF, the LF being there to account for timing as its tolerant of the return process still being in progress is genius.
https://repository.kulib.kyoto-u.ac.jp/server/api/core/bitst...
I wonder if hat word processors would have used a separate Enter (or Go!) for?
When Apple introduced the Macintosh II, buyers had the option to get a keyboard with the Macintosh layout, or the larger Apple Extended Keyboard with a mixed Macintosh/IBM PC layout.
The Apple Extended Keyboard was intended to be used with a IBM PC in a card slot. That is why it has a layout like a IBM Model M with two Control keys. It also has some sublegends that are PC-specific and otherwise didn't make sense on Macintosh.
But this keyboard got popular, and influenced its successors.
I was a little surprised the Space Cadet keyboard didn't come up, but I guess this is an article about the return/enter key and not various modifier keys.
16 more comments available on Hacker News