Current cursor shape changing (as implemented in bug #103399) uses non standard sequences, which parallel iTerm. However various terminals now allow changing the cursor shape with extended DECSCUSR sequences. These sequences work in xterm (and should work also in gnome-terminal according to https://bugzilla.gnome.org/show_bug.cgi?id=720821): # blinking block printf '\e[1 q' # steady block printf '\e[2 q' # blinking underscore printf '\e[3 q' # steady underscore printf '\e[4 q' # blinking bar printf '\e[5 q' # steady bar printf '\e[6 q' It would be good for Konsole to support them as well. Reproducible: Always
Yup gnome-terminal also supports these sequences. Note that while more "standard" than the iTerm2 ones, these sequences kinda suck because most of the time an app wants to touch only the shape or only the blinking property, not both, which cannot be done with these sequences. It's a better design to have separate sequences for the two. Also, for each, there should be a way to revert to the terminal emulator's default as specified in its config. The '\e[1 q' .. '\e[6 q' sequences are implemented in xterm and vte (gnome-terminal etc.) identically. In xterm, the number 0 or omitting the number is the same as number 1. In vte we intentionally differ, the number 0 or omitting the number means to revert to the default (the shape is taken from profile prefs, blinking is from GNOME-wide setting).
Related to this: (tried sending this to the konsole-devel list but haven't seen it appear yet) Don't know if any of you use neovim in konsole but it broke the other day. The fix apparently involves working around konsole not reporting if it supports DECSCUSR or not. https://github.com/neovim/neovim/pull/6997/files https://github.com/neovim/neovim/issues/7002 + + // Some terminals can not currently be trusted to report if they support + // DECSCUSR or not. So we need to have a blacklist for when we should not + // trust the reported features. + if( (vte_version != 0 && vte_version < 3900) || konsole ) { + data->unibi_ext.reset_cursor_style = -1; + data->unibi_ext.set_cursor_style = -1; + }
Would be nice if someone could pick this up, as a recent vim update also triggers the lack of DECSCUSR support in konsole. See https://github.com/vim/vim/issues/2008 for details.
Should be fixed with this patch, which is being reviewed: https://phabricator.kde.org/D12193
Git commit 7c2a1164be14ae912d166ee79d07cc45cb5e3aba by Kurt Hindenburg, on behalf of Ahmad Samir. Committed on 19/04/2018 at 13:38. Pushed by hindenburg into branch 'master'. Add support for Set Cursor Style (DECSCUSR) escape sequences Summary: This follows the XTerm escape sequences, which include a couple more shapes than what VT520 supports. FIXED-IN: 18.08 Test Plan: To test the escape sequences: printf '\e[ q' #blinking block printf '\e[0 q' # blinking block printf '\e[1 q' # blinking block printf '\e[2 q' # steady block printf '\e[3 q' # blinking underscore printf '\e[4 q' # steady underscore printf '\e[5 q' # blinking ibeam/bar printf '\e[6 q' # steady ibeam/bar Executing `reset` in terminal will reset the cursor shape and blinking settings to the current profile values. Reviewers: #konsole, hindenburg Reviewed By: #konsole, hindenburg Subscribers: #konsole Tags: #konsole Differential Revision: https://phabricator.kde.org/D12193 M +14 -0 src/Emulation.h M +3 -0 src/Session.cpp M +30 -0 src/TerminalDisplay.cpp M +12 -0 src/TerminalDisplay.h M +34 -0 src/Vt102Emulation.cpp https://commits.kde.org/konsole/7c2a1164be14ae912d166ee79d07cc45cb5e3aba
FWIW, I've filed[1] at neovim upstream, to bring this change to their attention; since now the workarounds/excludes they added for konsole in their code can be versioned. As for vim[2], upstream didn't add in quirks for konsole, so no change is needed there AFAICT. [1] https://github.com/neovim/neovim/issues/8300 [2] https://github.com/vim/vim/issues/2008
Git commit b0d3d83eca4f523a9e4acd3989da6be96033536a by Kurt Hindenburg, on behalf of Ahmad Samir. Committed on 05/05/2018 at 00:38. Pushed by hindenburg into branch 'master'. Export KONSOLE_VERSION as an environment variable Summary: The env var is exported as a numeric string (by removing the dots from the version string), this has the benefit of making it simpler to compare the version in shell arithmetic expressions. This should help programms like neovim check if konsole has support for terminal capabilities (e.g. DECSCUSR) by using a condition that checks the konsole version. See also: https://github.com/neovim/neovim/issues/8300 Reviewers: #konsole, hindenburg Reviewed By: #konsole, hindenburg Subscribers: #konsole Tags: #konsole Differential Revision: https://phabricator.kde.org/D12621 M +1 -0 src/SessionManager.cpp https://commits.kde.org/konsole/b0d3d83eca4f523a9e4acd3989da6be96033536a
Which konsole version will this be available in?
(In reply to Shmerl from comment #8) > Which konsole version will this be available in? (Look at the "Version Fixed In" field in this bug report, 18.08).
Thanks for the pointer! Looks like Debian testing has been stuck with 18.04.0 for quite some time already.