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 <jupyter@googlegroups.com> 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 jupyter+unsubscr...@googlegroups.com. > To post to this group, send email to jupyter@googlegroups.com. > 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 jupyter+unsubscr...@googlegroups.com. To post to this group, send email to jupyter@googlegroups.com. 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.