Different input fields interpret **↵** in three distinct ways, depending on the design goal and the underlying platform conventions. Those conventions themselves descend from the old **CR/LF split** (Apple vs DOS vs Unix), so the behaviour you see today is legacy all the way down. **1. “Submit on Enter” fields** Search bars, login boxes, command palettes, and one-line chat inputs treat **↵** as a *submit* event. The field is single-line by definition, so a newline has no meaning. Pressing **↵** triggers the form’s default action: search, send, submit. **2. “Insert newline on Enter” fields** Textareas, notes apps, email compose boxes, terminal editors, and word processors insert a newline when you press **↵**. Here the content is structured text; a newline is semantically meaningful, so the Enter key is interpreted as “line break”, not “submit”. **3. Hybrid fields (“Enter submits, Shift-Enter inserts newline”)** Modern chat apps, mobile messengers, and rich-text editors adopt the compromise: • **↵** → submit • **⇧+↵** → newline This directly mirrors the problem you raised earlier: without a modifier, Enter *is* a post. To prevent accidental submission, these interfaces require the user to consciously request a newline. --- **Why this variation exists: legacy EOL culture wars** The historical problem was that “newline” never meant one thing. **Unix** used **LF** (U+000A): One character = end of line. **Classic Mac OS** used **CR** (U+000D): Return = new line. **Windows / DOS** used **CR+LF** (000D 000A): Two characters = the line break sequence. So the meaning of **↵** (Return/Enter) was not conceptually unified. Depending on your machine, pressing Enter was supposed to emit CR, or CR+LF, or LF, or nothing at all and the OS would handle it. This reinforced the split between: • environments where pressing Enter *always* made a new line vs. • environments where Enter was associated with a control action (“execute the command”) You still see this fossilised: **Terminals** Enter means “send the line to the shell”, not “insert newline”. Yet text editors *inside the terminal* (nano, vim) treat Enter as “insert LF”. **Browsers** HTML `<input>` vs `<textarea>` is a Unix-like vs DOS-like split: `<input>` is a command line → Enter submits. `<textarea>` is a text file → Enter inserts newline. **Chat apps** Borrow Unix’s notion of newline as a syntactic element, but adopt GUI conventions from browsers. Hence the hybrid: Enter submits, Shift-Enter breaks. --- **Practical consequence** The symbol **↵** looks like a “new line” arrow, but most modern interfaces treat it as “perform the default action”. Text fields whose primary purpose is *text* treat Enter as EOL. Text fields whose primary purpose is *action* treat Enter as submit. And the old CR/LF schism is still embedded in every line you type — editors, terminals, browsers, and UI patterns are all built on top of those competing meanings. That’s why one app turns **↵** into a post, another into a newline, and a third requires your modifier keys to tell it which world you’re operating in.
View quoted note →