vi copy/paste - maybe a bit OT
Bill Cole
macportsusers-20171215 at billmail.scconsult.com
Thu Jul 4 23:08:53 UTC 2019
On 4 Jul 2019, at 5:32, Christoph Kukulies wrote:
> I’m asking it here although the vi in macOS surely isn’t a macport
> but I’m asking anyway:
>
> Whenever I copy/paste a file content in vi (started from a Terminal)
> using CMD-A or select-CMD-C to select all to put it elsewhere into a
> text receiving object (like Notes) using CMD-V, I’m getting the
> whole history of that terminal window. Not only the file contents.
>
> That’s confusing once you forget about that fact. You paste the
> contents, e.g. a certificate, into a webbrowser and later you are
> wondering about all that stuff in thet text widget which you didn’t
> intend to get there.
>
> I understand why it might be correct that CMD-A copies the whole
> terminal window contents, not only the vi-part, but it’s weird
> anyway.
>
> Is the a way to circumvent this problem?
In short: No.
At length:
Terminal.app (or any equivalent tool) operates through a tightly-defined
set of ancient interfaces to the OS: the termios line discipline and
layers on top of that like ptmx, terminfo, and (n)curses. Terminal.app
talks to programs like vi, bash, etc. through a full-duplex asynchronous
serial stream of bytes. Terminal manages its data as the stream of
characters it has drawn into its window, and it has no knowledge of what
program it is talking to on the other side of the terminal emulation
layers. Terminal doesn't know that you're running vi, it just knows what
to send to the pty## device associated with a window based on your
typing or pasting of text and how to draw characters into the window
based on the stream of bytes it gets from that same pseudo-terminal. It
does not know (or have any way of knowing) that you are running a text
file editor on the other end of that pseudo-terminal link. There is no
mechanism in the terminal emulation layers for a terminal emulator to
communicate that sort of information or to request a logical "all data"
of a program on the other end that may have a file-based concept of its
current data set. Terminal only knows about the interpreted and rendered
data in its window and scrollback buffer. One the other end, vi knows
nothing about the system clipboard. As a practical matter, MacOS has
always used the Mac-only Command key to construct menu equivalents for
GUI programs, so there's no standard way to translate "Cmd-A" or any
other "Cmd-*" combination into a stream of bytes on a pseudo-terminal
device based on a 1980s concept of physical terminals.
In principle, a terminal emulation program like Terminal *could* have a
command to select everything visible in a window in addition to or
instead of a command to select the entire scrollback. I don't use it, so
I am not certain exactly it offers, but I know that iTerm provides a
more complex set of selection behaviors from the keyboard.
Finally, if all you want is to access the MacOS clipboard from the
command line, pbcopy and pbpaste exist. As you might guess, pbcopy does
a "Edit->Copy" from its stdin, pbpaste does a "Edit->Paste" to its
stdout.
--
Bill Cole
bill at scconsult.com or billcole at apache.org
(AKA @grumpybozo and many *@billmail.scconsult.com addresses)
Not Currently Available For Hire
More information about the macports-users
mailing list