fish separates clipboard actions from command-line editing
fish 2.4 gives the system clipboard explicit bindings and revises history operations. The changes separate editing state from external clipboard state and make history queries easier to express.
Deleting text from a shell command line and copying text to the desktop clipboard are different actions. A shell's editing buffer is part of an interactive session, while the system clipboard can contain material from another application. fish 2.4 separates those concerns by removing X11 clipboard effects from kill-ring commands and assigning explicit copy and paste bindings.
The November 8 release notes describe the stable release as having no major changes from the October beta. That beta introduced the clipboard revision and new history commands. The stable release makes those changes available alongside terminal fixes and corrected generated documentation.
I value fish for making an interactive shell useful without extensive configuration. Explicit clipboard actions fit that preference because an editing command should have a predictable scope. A deleted word should not unexpectedly replace clipboard content needed in another application.
Clipboard integration becomes deliberate
The release notes name Control-X for copying and Control-V for pasting. They also extend clipboard availability to OS X alongside X11 systems. The earlier kill-ring behavior no longer doubles as the path to the X11 clipboard.
The copy function in the release shows the mechanism. It checks for pbcopy first and pipes the current command line to it. If that command is unavailable, it checks for xsel and sends the command line to its clipboard selection.
This implementation gives the word copy a concrete scope. It takes the command line as supplied by commandline. The helper receives the buffer through its standard input stream. It is not a general promise that any selected terminal text will enter the clipboard through the shell function.
The paste function follows the matching platform choices. It reads through pbpaste or xsel --clipboard and inserts the result with commandline -i. The code inserts into the command-line buffer instead of explicitly invoking an execution command.
These are shell-level bindings with platform helpers. Their presence does not mean fish implements a clipboard server itself. The available helper commands determine which branch the function can use. On a system with neither helper, these function bodies have no alternative clipboard implementation.
That is a useful compatibility boundary for a feature intended to work with little setup. The interaction is integrated into fish, but its access to the desktop clipboard still depends on the platform tools exposed to the process.
The kill ring has a narrower responsibility
Removing automatic clipboard effects makes the kill ring a more local editing mechanism. A command for cutting or recovering text in the shell no longer implicitly performs the external clipboard action described by the old X11 integration.
The benefit is predictability across applications. Clipboard contents often have an origin outside the shell, and editing a command should not accidentally change that independent state. Explicit bindings let the user choose when text should cross that boundary.
There is a compatibility cost for users who relied on the old coupling. A familiar editing gesture no longer has the same clipboard side effect. The release notes state this change directly and identify the new gestures, which is more useful than describing it only as improved clipboard support.
The distinction also clarifies documentation. A description of kill-ring behavior can concern command-line editing, while a description of clipboard integration can concern external exchange. Combining them requires explaining platform selection semantics that many editing operations do not otherwise need.
History actions become subcommands
The same release changes history operations from action flags to subcommands. history delete expresses the operation in the command position, while options qualify how it works. The notes say combining several actions through flags is no longer supported.
The tagged history reference retains old long-option spellings for compatibility but marks them as deprecated. This is a transition in the interface, not an assertion that every older spelling immediately stops parsing.
History search becomes case-insensitive by default. The reference provides --case-sensitive for callers that need the previous distinction. That default matters for deletion as well as retrieval, so the visible search text alone does not fully describe which entries match.
history search --case-sensitive --max=5 --contains 'ssh'
history search --show-time --max=5
The first query searches for matching case and limits the result count. The second displays recent entries with timestamps. These commands use the new subcommand form and keep the matching or presentation policy in options.
A bounded query is useful in an interactive session because a common search term can otherwise produce many entries. Timestamps answer a different question from ordering alone. They help distinguish when a command was recorded instead of merely where it appears in the result sequence.
Multiline entries need an entry delimiter
The release adds --null for history search output and fixes deletion handling for multiline commands. The reference explains that NUL termination lets consumers distinguish complete history entries even when those entries contain newlines.
A newline-delimited output stream cannot use every newline as an entry boundary if the stored command itself may span several lines. The delimiter must distinguish the representation of an entry from the text inside it. NUL output provides that distinction for consumers designed to read it.
The history interface also separates merge from save. Merge incorporates history changes from other sessions, while save writes the current changes to the history file. According to the reference, fish already saves automatically, so an explicit save is not ordinarily required.
I prefer these explicit operations because they make session behavior easier to reason about. Importing another session's history and persisting the current session's changes are different actions even when both concern the same history store.
The stable release also restricts automatic cursor changes to XTerm versions known to support them, fixing garbage printed around prompts on older versions. That correction follows the same practical requirement as the clipboard work. An interactive feature must account for the terminal and platform capabilities actually available to the session.