contour
contour copied to clipboard
Contour disapears when cursor is hovered on any of minimize, maximize or close button in titlebar
Description
https://user-images.githubusercontent.com/29328319/144562170-d3f77e9f-9ea7-4d1a-bb7a-2f8924ff9e4b.mp4
Whenever I hover cursor on title-bar button (minimize, maximize or close) contour disappears, and only title-bar is visible, but typing or clicking again in terminal area makes it visible again
Environment
- Contour Version or Git commit hash: 0.3.0-unreleased-master-ba12d1a
- Operating System (name / distribution / version): Fedora 35 with Gnome
- Contour configuration:
# Default Contour Configuration File.
# Word delimiters when selecting word-wise.
word_delimiters: " /\\()\"'-.,:;<>~!@#$%^&*+=[]{}~?|│"
# Default PTY read buffer size.
#
# This is an advance option. Use with care!
# Default: 16384
read_buffer_size: 16384
default_profile: main
# Flag to determine whether to spawn new process or not when creating new terminal
# Default: false
spawn_new_process: false
# Whether or not to reflow the lines on terminal resize events.
# Default: true
reflow_on_resize: true
# Section of experimental features.
# All experimental features are disabled by default and must be explicitely enabled here.
# NOTE: Contour currently has no experimental features behind this configuration wall.
# experimental:
# # Enables experimental support for feature X/Y/Z
# feature_xyz: true
# This keyboard modifier can be used to bypass the terminal's mouse protocol,
# which can be used to select screen content even if the an application
# mouse protocol has been activated (Default: Shift).
#
# The same modifier values apply as with input modifiers (see below).
bypass_mouse_protocol_modifier: Shift
# Selects an action to perform when a text selection has been made.
#
# Possible values are:
#
# - None Does nothing
# - CopyToClipboard Copies the selection to the primary clipboard.
# - CopyToSelectionClipboard Copies the selection to the selection clipboard.
# This is not supported on all platforms.
#
# Default: CopyToSelectionClipboard
on_mouse_select: SelectClipboard
# Inline image related default configuration and limits
# -----------------------------------------------------
images:
# Enable or disable sixel scrolling (SM/RM ?80 default)
sixel_scrolling: true
# Configures the maximum number of color registers available when rendering Sixel graphics.
sixel_register_count: 4096
# If enabled, the ANSI text cursor is placed at the position of the sixel graphics cursor after
# image rendering, otherwise (if disabled) the cursor is placed underneath the image.
sixel_cursor_conformance: true
# maximum width in pixels of an image to be accepted (0 defaults to system screen pixel width)
max_width: 0
# maximum height in pixels of an image to be accepted (0 defaults to system screen pixel height)
max_height: 0
# Terminal Profiles
# -----------------
#
# Dominates how your terminal visually looks like. You will need at least one terminal profile.
profiles:
main:
# You can override the process to be started inside the terminal.
# If nothing is specified, the users' default login shell will be used.
# But you may as well log in to a remote host.
# shell: "ssh ubuntu-vm"
# shell: "/bin/bash"
# arguments: ["some", "optional", "arguments", "for", "the", "shell"]
# Sets initial working directory when spawning a new terminal.
# A leading ~ is expanded to the user's home directory.
# Default value is the user's home directory.
initial_working_directory: "~"
# When this profile is being *activated*, this flag decides
# whether or not to put the terminal's screen into fullscreen mode.
#
# It is activated during startup as well as when switching from another profile to this one.
fullscreen: false
# When this profile is *activated*, this flag decides
# whether or not to put the window into maximized mode.
maximized: false
# Defines the class part of the WM_CLASS property of the window.
wm_class: "contour"
# Environment variables to be passed to the shell.
# environment:
# TERM: contour
# COLORTERM: truecolor
# Determines the terminal type that is being advertised.
# Possible values are:
# - VT100
# - VT220
# - VT240
# - VT330
# - VT340
# - VT320
# - VT420
# - VT510
# - VT520
# - VT525
# Default: VT525
terminal_id: VT525
# Determines the initial terminal sice in characters.
terminal_size:
columns: 80
lines: 25
history:
# Number of lines to preserve (-1 for infinite).
limit: 1000
# Boolean indicating whether or not to scroll down to the bottom on screen updates.
auto_scroll_on_update: true
# Number of lines to scroll on ScrollUp & ScrollDown events.
scroll_multiplier: 5
# visual scrollbar support
scrollbar:
# scroll bar position: Left, Right, Hidden (ignore-case)
position: right
# whether or not to hide the scrollbar when in alt-screen.
hide_in_alt_screen: true
# Some VT sequences should need access permissions.
#
# These can be to:
# - allow Allows the given functionality
# - deny Denies the given functionality
# - ask Asks the user interactively via popup dialog for permission of the given action.
#
# Default for all of these entries should be: "ask".
permissions:
# Allows changing the font via `OSC 50 ; Pt ST`.
change_font: ask
# Allows capturing the screen buffer via `CSI > Pm ; Ps ; Pc ST`.
# The response can be read from stdin as sequence `OSC 314 ; <screen capture> ST`
capture_buffer: ask
# Font related configuration (font face, styles, size, rendering mode).
font:
# Initial font size in pixels.
size: 14
# DPI scaling factor applied on top of the system configured on (default: 1.0).
dpi_scale: 1.0
# Font Locator API
# Selects an engine to use for locating font files on the system.
# This is implicitly also responsible for font fallback
# Possible values are:
# - fontconfig : uses fontconfig to select fonts
# - CoreText : uses OS/X CoreText to select fonts (currently not implemented).
# - DirectWrite : selects DirectWrite engine (Windows only)
locator: native
# Text shaping related settings
text_shaping:
# Selects which text shaping and font rendering engine to use.
# Supported values are:
# - native : automatically choose the best available on the current platform.
# - DirectWrite : selects DirectWrite engine (Windows only)
# - CoreText : selects CoreText engine (Mac OS/X only)
# - OpenShaper : selects OpenShaper (harfbuzz/freetype/fontconfig, avilable on all
# platforms)
engine: native
# Uses builtin textures for pixel-perfect box drawing.
# If disabled, the font's provided box drawing characters
# will be used (Default: true).
builtin_box_drawing: true
# Font render modes tell the font rasterizer engine what rendering technique to use.
#
# Modes availabe are:
# - lcd Uses a subpixel rendering technique optimized for LCD displays.
# - light Uses a subpixel rendering technique in gray-scale.
# - gray Uses standard gray-scaled anti-aliasing.
# - monochrome Uses pixel-perfect bitmap rendering.
render_mode: lcd
# Indicates whether or not to include *only* monospace fonts in the font and
# font-fallback list (Default: true).
strict_spacing: true
# Font family to use for displaying text.
#
# A font can be either described in detail as below or as a
# simple string value (e.g. "monospace" with teh appropriate
# weight/slant applied automatically).
regular:
# Font family defines the font family name, such as:
# Fira Code", "Courier New", or "monospace" (default).
family: "JetBrainsMono Nerd Font Mono"
# Font weight can be one of:
# thin, extra_light, light, demilight, book, normal,
# medium, demibold, bold, extra_bold, black, extra_black.
weight: regular
# Font slant can be one of: normal, italic, oblique.
slant: normal
# Set of optional font features to be enabled. This
# is usually a 4-letter code, such as ss01 or ss02 etc.
#
# Please see your font's documentation to find out what it
# supports.
#
# Default: []
features: []
# If bold/italic/bold_italic are not explicitely specified, the regular font with
# the respective weight and slant will be used.
bold: "JetBrainsMono Nerd Font Mono"
italic: "JetBrainsMono Nerd Font Mono"
bold_italic: "JetBrainsMono Nerd Font Mono"
# This is a special font to be used for displaying unicode symbols
# that are to be rendered in emoji presentation.
# Defaults to "emoji".
emoji: "emoji"
# Terminal cursor display configuration
cursor:
# Supported shapes are:
#
# - block a filled rectangle
# - rectangle just the outline of a block
# - underscore a line under the text
# - bar: the well known i-Beam
shape: "block"
# Determins whether or not the cursor will be blinking over time.
blinking: false
# Blinking interval (in milliseconds) to use when cursor is blinking.
blinking_interval: 500
# Background configuration
background:
# Background opacity to use. A value of 1.0 means fully opaque whereas 0.0 means fully
# transparent. Only values between 0.0 and 1.0 are allowed.
opacity: 1.0
# Some platforms can blur the transparent background (currently only Windows 10 is supported).
blur: false
# Specifies a colorscheme to use (alternatively the colors can be inlined).
colors: "selenized_black"
# Hyperlinks (via OSC-8) can be stylized and colorized on hover.
hyperlink_decoration:
normal: dotted
hover: underline
# Color Profiles
# --------------
#
# Here you can configure your color profiles, wereas a color can be expressed in standard web format,
# with a leading # followed by red/green/blue values, 7 characters in total.
# You may alternatively use 0x as prefix instead of #.
# For example 0x102030 is equal to '#102030'.
color_schemes:
selenized_black:
default:
background: '0x181818'
foreground: '0xb9b9b9'
normal:
black: '0x252525'
red: '0xed4a46'
green: '0x70b433'
yellow: '0xdbb32d'
blue: '0x368aeb'
magenta: '0xeb6eb7'
cyan: '0x3fc5b7'
white: '0x777777'
bright:
black: '0x3b3b3b'
red: '0xff5e56'
green: '0x83c746'
yellow: '0xefc541'
blue: '0x4f9cfe'
magenta: '0xff81ca'
cyan: '0x56d8c9'
white: '0xdedede'
default:
# Default colors
default:
# Default background color (this can be made transparent, see above).
background: '#1d1f21'
# Default foreground text color.
foreground: '#d5d8d6'
# Mandates the color of the cursor.
cursor: '#b0b030'
# color to pick for hyperlinks decoration, when hovering
hyperlink_decoration:
normal: '#f0f000'
hover: '#ff0000'
# The text selection color can be customized here.
# Leaving a value empty will default to the inverse of the content's color values.
# selection:
# foreground: '#c0c0c0'
# background: '#a000a0'
# Normal colors
normal:
black: '#1d1f21'
red: '#cc342b'
green: '#198844'
yellow: '#fba922'
blue: '#3971ed'
magenta: '#a36ac7'
cyan: '#3971ed'
white: '#c5c8c6'
# Bright colors
bright:
black: '#969896'
red: '#cc342b'
green: '#198844'
yellow: '#fba922'
blue: '#3971ed'
magenta: '#a36ac7'
cyan: '#3971ed'
white: '#ffffff'
# Key Bindings
# ------------
#
# In this section you can customize key bindings.
# Each array element in `input_mapping` represents one key binding,
# whereas `mods` represents an array of keyboard modifiers that must be pressed - as well as
# the `key` or `mouse` - in order to activate the corresponding action,
#
# Additionally one can filter input mappings based on special terminal modes using the `modes` option:
# - Alt : The terminal is currently in alternate screen buffer, otherwise it is in primary screen buffer.
# - AppCursor : The application key cursor mode is enabled (otherwise it's normal cursor mode).
# - AppKeypad : The application keypad mode is enabled (otherwise it's the numeric keypad mode).
# - Select : The terminal has currently an active grid cell selection (such as selected text).
#
# You can combine these modes by concatenating them via | and negate a single one
# by prefixing with ~.
#
# The `modes` option defaults to no filter at all (the input mappings always
# match based on modifier and key press / mouse event).
#
# `key` represents keys on your keyboard, and `mouse` represents buttons
# as well as the scroll wheel.
#
# Modifiers:
# - Alt
# - Control
# - Shift
# - Meta (this is the Windows key on Windows OS, and the Command key on OS/X, and Meta on anything else)
#
# Keys can be expressed case-insensitively symbolic:
# APOSTROPHE, ADD, BACKSLASH, COMMA, DECIMAL, DIVIDE, EQUAL, LEFT_BRACKET,
# MINUS, MULTIPLY, PERIOD, RIGHT_BRACKET, SEMICOLON, SLASH, SUBTRACT, SPACE
# Enter, Backspace, Tab, Escape, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
# DownArrow, LeftArrow, RightArrow, UpArrow, Insert, Delete, Home, End, PageUp, PageDown,
# Numpad_NumLock, Numpad_Divide, Numpad_Multiply, Numpad_Subtract, Numpad_CapsLock,
# Numpad_Add, Numpad_Decimal, Numpad_Enter, Numpad_Equal,
# Numpad_0, Numpad_1, Numpad_2, Numpad_3, Numpad_4,
# Numpad_5, Numpad_6, Numpad_7, Numpad_8, Numpad_9
# or in case of standard characters, just the character.
#
# Mouse buttons can be one of the following self-explanary ones:
# Left, Middle, Right, WheelUp, WheelDown
#
# Actions:
# - CancelSelection Cancels currently active selection, if any.
# - ChangeProfile Changes the profile to the given profile `name`.
# - ClearHistoryAndReset Clears the history, performs a terminal hard reset and attempts to force a redraw of the currently running application.
# - CopyPreviousMarkRange Copies the most recent range that is delimited by vertical line marks into clipboard.
# - CopySelection Copies the current selection into the clipboard buffer.
# - DecreaseFontSize Decreases the font size by 1 pixel.
# - DecreaseOpacity Decreases the default-background opacity by 5%.
# - FollowHyperlink Follows the hyperlink that is exposed via OSC 8 under the current cursor position.
# - IncreaseFontSize Increases the font size by 1 pixel.
# - IncreaseOpacity Increases the default-background opacity by 5%.
# - NewTerminal Spawns a new terminal at the current terminals current working directory.
# - OpenConfiguration Opens the configuration file.
# - OpenFileManager Opens the current working directory in a system file manager.
# - PasteClipboard Pastes clipboard to standard input.
# - PasteSelection Pastes current selection to standard input.
# - Quit Quits the application.
# - ReloadConfig Forces a configuration reload.
# - ResetConfig Overwrites current configuration with builtin default configuration and loads it. Attention, all your current configuration will be lost due to overwrite!
# - ResetFontSize Resets font size to what is configured in the config file.
# - ScreenshotVT Takes a screenshot in form of VT escape sequences.
# - ScrollDown Scrolls down by the multiplier factor.
# - ScrollMarkDown Scrolls one mark down (if none present, bottom of the screen)
# - ScrollMarkUp Scrolls one mark up
# - ScrollOneDown Scrolls down by exactly one line.
# - ScrollOneUp Scrolls up by exactly one line.
# - ScrollPageDown Scrolls a page down.
# - ScrollPageUp Scrolls a page up.
# - ScrollToBottom Scrolls to the bottom of the screen buffer.
# - ScrollToTop Scrolls to the top of the screen buffer.
# - ScrollUp Scrolls up by the multiplier factor.
# - SendChars Writes given characters in `chars` member to the applications input.
# - ToggleAllKeyMaps Disables/enables responding to all keybinds (this keybind will be preserved when disabling all others).
# - ToggleFullScreen Enables/disables full screen mode.
# - WriteScreen Writes VT sequence in `chars` member to the screen (bypassing the application).
input_mapping:
- { mods: [Control], mouse: Left, action: FollowHyperlink }
- { mods: [], mouse: Middle, action: PasteSelection }
- { mods: [], mouse: WheelDown, action: ScrollDown }
- { mods: [], mouse: WheelUp, action: ScrollUp }
- { mods: [Alt], key: Enter, action: ToggleFullscreen }
- { mods: [Alt], mouse: WheelDown, action: DecreaseOpacity }
- { mods: [Alt], mouse: WheelUp, action: IncreaseOpacity }
- { mods: [Control, Alt], key: S, action: ScreenshotVT }
- { mods: [Control, Shift], key: Plus, action: IncreaseFontSize }
- { mods: [Control], key: '0', action: ResetFontSize }
- { mods: [Control, Shift], key: Minus, action: DecreaseFontSize }
- { mods: [Control, Shift], key: '_', action: DecreaseFontSize }
- { mods: [Control, Shift], key: N, action: NewTerminal }
- { mods: [Control, Shift], key: C, action: CopySelection }
- { mods: [Control, Shift], key: V, action: PasteClipboard }
- { mods: [Control], key: C, action: CopySelection, mode: 'Select' }
- { mods: [Control], key: V, action: PasteClipboard, mode: 'Select' }
- { mods: [Control], key: V, action: CancelSelection, mode: 'Select' }
- { mods: [], key: Escape, action: CancelSelection, mode: 'Select' }
- { mods: [Control, Shift], key: Comma, action: OpenConfiguration }
- { mods: [Control, Shift], key: W, action: Quit }
- { mods: [Control], mouse: WheelDown, action: DecreaseFontSize }
- { mods: [Control], mouse: WheelUp, action: IncreaseFontSize }
- { mods: [Shift], key: DownArrow, action: ScrollOneDown }
- { mods: [Shift], key: End, action: ScrollToBottom }
- { mods: [Shift], key: Home, action: ScrollToTop }
- { mods: [Shift], key: PageDown, action: ScrollPageDown }
- { mods: [Shift], key: PageUp, action: ScrollPageUp }
- { mods: [Shift], key: UpArrow, action: ScrollOneUp }
- { mods: [Shift], key: '{', action: ScrollMarkUp, mode: "~Alt"}
- { mods: [Shift], key: '}', action: ScrollMarkDown, mode: "~Alt"}
- { mods: [Shift], mouse: WheelDown, action: ScrollPageDown }
- { mods: [Shift], mouse: WheelUp, action: ScrollPageUp }
- { mods: [Control], key: O, action: OpenFileManager }
- { mods: [Alt], key: f2, action: OpenConfiguration}
- TERM environment variable: contour
- Compiler version: g++ (GCC) 11.2.1 20210728 (Red Hat 11.2.1-1)
Steps to Reproduce
Open contour and put cursor on title-bar buttons.
Hey. Many thanks for your report, interest, and most importantly: patience :-)
I am wondering, you are using Wayland as display server, aren't you?
From the application point of view, Contour is simply an OpenGL application, so I have to see if at all I can reproduce this behaviour. It certainly must be fixed, I absolutely agree, but maybe in the meantime you could try some.
What is the value of the environment variable QT_QPA_PLATFORM
? And if not set to anything, you could try setting it to xcb
before starting Contour.
Contour though also supports setting the platform plugin via CLI arg (not yet as config entry, would make sense, too - now since I'm writing about it here).
Thanks for such quick reply.
I am wondering, you are using Wayland as display server, aren't you?
Yes I am using Wayland display server
What is the value of the environment variable
QT_QPA_PLATFORM
? And if not set to anything, you could try setting it toxcb
before starting Contour.
Thank you for this suggestion, launching contour with contour platform xcb
fixes the issue. It also fixed an issue with full screen mode, that I was having.
I still need to fix this for using Wayland via the official display protocol, and probably (for easier use for people that need it) make the platform a config setting. I'm glad it worked out however ;)
Still an issue. Setting QT_QPA_PLATFORM
to xcb
makes it so that contour will use Xwayland. Why is this closed ?
I do not mind reopening this issue.
So for you however setting the protocol to use to xcb
does fix it?
That was there reason why we closed it back then, IIRC.
At Contour we do not do any X11 or Wayland specific calls, it simply used Qt, and history has shown that Wayland kept being problematic whilst perfectly working on X11/Windows/Mac. We have to see what we can generally do to improve the situation on Wayland side though. I am not sure however if the bug is actually in Contour or not.
I do not mind reopening this issue.
So for you however setting the protocol to use to
xcb
does fix it?
It does.
That was there reason why we closed it back then, IIRC.
I mean, it's just a workaround at best.
At Contour we do not do any X11 or Wayland specific calls, it simply used Qt, and history has shown that Wayland kept being problematic whilst perfectly working on X11/Windows/Mac. We have to see what we can generally do to improve the situation on Wayland side though. I am not sure however if the bug is actually in Contour or not.
As an example, OBS does use QT and does not have such problem when using Wayland. So I'm guessing the bug is in Contour.
While OBS does indeed use Qt, keep in mind that their source code is riddled with wayland stuff https://github.com/obsproject/obs-studio/search?p=2&q=wayland
@Utkarsh-khambra can you please check if this bug is still present?
yeah, i also think there's nothing we can do about it, since the frontend is target platform independant. meaning, if at most, it'll be a bug in Qt's wayland plugin (wayland QPA). It is likely that this was addressed already.
It's still present on master in Fedora 38, Gnome 44.2.
If I disable xcb in my Wayland compositor, contour won't launch and it throws this:
Failed to create wl_display (No such file or directory).
qt.qpa.plugin: Could not load the Qt platform plugin "wayland" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized.
wl_display - Represents a connection to the compositor and acts as a proxy to the wl_display singleton object. https://wayland.freedesktop.org/docs/html/apb.html#Client-classwl__display
I guess that wl_display is missing here.
Hey @Aqa-Ib. This sounds like a different issue, however, what Contour version are you running on which distro, and what does your configuration key look like for the key platform_plugin
? This key should be pretty much on the top of your configuration file. It should be set to auto
, which should work, or to wayland
if you want to have it explicitly set to Wayland support (but then it would not run on X11/xcb). If it was set to xcb
, this would explain why it won't start up when you disable Xwayland.
However, disabling Xwayland is generally not recommended, because there are too many applications not yet Wayland compatible.
Contour supports Wayland as much as the Qt framework provides support for it, through the QPA (platform) plugin. We do not (yet) do anything special, depending on what platform you are running on (X11, Wayland, MacOS, Windows). If you have further questions, feel free to join our Discord. :)
I am running the flathub version (0.3.12) on archlinux.
I have been playing with the platform_plugin key, tried on auto, wayland and xcb. It does not matter what key I assign to it, it will always only work on the X server, never on Wayland.
If I set the environment variable QT_QPA_PLATFORM to wayland;xcb (meaning that it will try first to run on wayland and if it s not possible, fallback to xcb), then it will run on the X server, even if I set the platform_plugin key to wayland.
If i set the variable QT_QPA_PLATFORM to wayland only (I do not let it fallback to xcb), it will try to execute on wayland, fail, and then try to execute on the X server and fail too, thus failing to start contour.
Thanks for your attention.
I am running the flathub version (0.3.12) on archlinux.
I have been playing with the platform_plugin key, tried on auto, wayland and xcb. It does not matter what key I assign to it, it will always only work on the X server, never on Wayland.
If I set the environment variable QT_QPA_PLATFORM to wayland;xcb (meaning that it will try first to run on wayland and if it s not possible, fallback to xcb), then it will run on the X server, even if I set the platform_plugin key to wayland.
If i set the variable QT_QPA_PLATFORM to wayland only (I do not let it fallback to xcb), it will try to execute on wayland, fail, and then try to execute on the X server and fail too, thus failing to start contour.
Thanks for your attention.
Does it happen for aur package as well?
AUR packages do not run: Fatal: Cannot mix incompatible Qt library (6.5.2) with this library (6.5.3).
AUR packages do not run: Fatal: Cannot mix incompatible Qt library (6.5.2) with this library (6.5.3).
I think that current qt version is 6.5.3 ( https://archlinux.org/packages/extra/x86_64/qt6-base/) so just update with pacman packages
While I do agree that updating one's OS is offtopic, however, you hijacked this issue with your own, which are not related at all...
You basically have issue which can be loosely titled Contour won't start on wayland
... Additionally while we do try to have some support for wayland (through QT only), we don't actively support it
@Yaraslaut can you check whether there is some QML thing we need to add for Wayland (if this is even QML related issue)?
I think that what I posted first is totally related to this issue. I guess that OP problems come from contour being executed under Xwayland. Contour is not able to execute under Wayland, so graphical glitches might appear as OP showed.
Regards.
We will look into it nonetheless, I am just stating how I perceived it.
Main issue here is that we don't have Wayland specific code in the codebase, the support mainly comes from Qt, so we will look into it if there is any way for us to provide a fix.
Additional issue is that none of us use Wayland if I remember correctly, maybe we can check it through some VM
In the recent releases, I can't repro this issue anymore.