Thanks for the very comprehensive answer, William!

There are a few jlab issues asking about this (including
https://github.com/jupyterlab/jupyterlab/issues/4143,
https://github.com/jupyterlab/jupyterlab/issues/3011,
https://github.com/jupyterlab/jupyterlab/issues/1204,
https://github.com/jupyterlab/jupyterlab/issues/1146#issuecomment-394686488).
I'm going to point at least #1146 to your comment.

Jason


On Thu, Sep 20, 2018 at 1:24 PM William Stein <[email protected]> wrote:

> Hi,
>
> Jupyter (and Jupyter Lab) uses xterm.js to implement their terminal:
> https://github.com/xtermjs/xterm.js
> I've been looking into xterm.js a lot this week since I'm currently
> rewriting CoCalc to xterm.js instead of term.js.
>
> (NOTE term.js -- see https://github.com/chjj/term.js --  is Fabrice
> Bellard's terminal in Javascript so he could use his emscriptem linux
> in a browser, and xterm.js is a fork of term.js with all the code
> refactored and rewritten in Typescript, and with an additional Canvas
> renderer, a plugin system, etc., etc. I hadn't looked at xterm.js much
> and have been developing term.js a little over the last 5 years in
> parallel.)
>
> As far as I can tell, xterm.js is pretty amazing.  However,  I just
> searched through the xterm.js source code
> for a while, and it looks to me like "the copy/paste via the keyboard
> terminal problem" is not really fully solved in xterm.js itself.
> There's also no issue in the xterm.js issue tracker about implementing
> copy so maybe I'm missing something.  There's discussion claiming this
> is not a problem at all: "Copy & paste from and to xterm should just
> work fine without any extra code using CTRL+C and CTRL+V keyboard
> shortcuts."
> (see
> https://github.com/xtermjs/xterm.js/issues/1411#issuecomment-383916953)
>
> This is the sort of thing you would think if you don't do cross
> platform testing... e.g., you only use a mac, but is a big  problem
> for people using Linux (me) or maybe Windows.   Anyway, it looks to me
> like the only way copy can happen is via the code here:
>
> https://github.com/xtermjs/xterm.js/blob/master/src/Terminal.ts#L546
>
> This binds to the copy event I think of the hidden textarea.  So copy
> (and paste) via *right click and a menu* work fine in Windows and
> Linux with xterm.js.  However, copy via "Control+C" doesn't seem to
> trigger copy on the terminal, since that gets interpreted elsewhere,
> and results in an interrupt signal in bash.
>
> It's an interesting  UX problem how to deal with this, and most
> terminals on Windows/Linux have their own solution.   For example, the
> browser-based one in ChromeOS uses Control+Shift+C (and
> Control+Shift+V) for copy/paste, and also I think *just* highlighting
> causes the copy to happen in ChromeOS, even if you don't hit keys.  I
> think this control+shift+v choice is pretty common in Linux. VSCode
> also integrates xterm.js, and they
> have solved this problem as explained here:
>
>
> https://code.visualstudio.com/docs/editor/integrated-terminal#_copy-paste
>
> where they have control+shift+c on linux, control+c on Windows, and
> Cmd+c on OS X.  I didn't look into the vscode/xterm.js integration
> code to see how they did this (in electron/chromium).
>
> In CoCalc, with term.js, I took a different approach.  I made it so
> Control+C behaves as usual (sending an interrupt, say) if no text is
> selected.  If you select text and then hit Control+C then it does
> copy.   I've been using this for years, and I think it makes a ton of
> sense.  On the other hand, it's just a UX solution I completely made
> up, and I've never seen it anywhere else.  Our users don't complain
> about it -- they expect control+c to copy after all when they are
> doing a copy, and they expect it to interrupt when they are trying to
> stop something, and just never think about it.  Either I implement
> this same thing somehow for xterm.js, or I have to just stick with old
> term.js (which I really don't want to do).
>
>  -- William
>
> On Wed, Sep 19, 2018 at 3:33 PM, 'Tyler Erickson' via Project Jupyter
> <[email protected]> wrote:
> > The copy and paste keyboard strokes are different depending on your
> > operating system.
> >
> > What operating system / browser are you using?
> >
> >
> > On Tuesday, September 18, 2018 at 3:11:16 AM UTC-7, 铁龙国 wrote:
> >>
> >> Jupyter lab Terminal can't copy and paste!
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Project Jupyter" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to [email protected].
> > To post to this group, send email to [email protected].
> > To view this discussion on the web visit
> >
> https://groups.google.com/d/msgid/jupyter/493eb17e-ec01-4e7b-b03d-325e036be092%40googlegroups.com
> .
> >
> > For more options, visit https://groups.google.com/d/optout.
>
>
>
> --
> William (http://wstein.org)
>
> --
> You received this message because you are subscribed to the Google Groups
> "Project Jupyter" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jupyter/CACLE5GACzU7dU5gKE-K0USguxdcD4TD_XcQ3S-Rt5oa9YM121w%40mail.gmail.com
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Project Jupyter" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jupyter/CAPDWZHxbZMK0voK6LuqbvVQBAFJhqi4PE0BufVHE%3D%2BfRW5qodg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to