ale icon indicating copy to clipboard operation
ale copied to clipboard

Virtualtext at the end of a line not showing as comment after colorscheme reload

Open esan0 opened this issue 2 years ago • 3 comments

Information

VIM version VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Oct 01 2023 12:12:50) Included patches: 1-1968

Operating System: $ uname -r 6.5.5-arch1-1

What went wrong

When the colorscheme gets reloaded, virtualtext loses its "comment" highlighting.

Clean vim loaded: virtualtext_1

reload colorscheme virtualtext_2

I was able to get around this partially by adding the following to the function that manually toggles background (and thus reloads the colorscheme):

function! s:TogBG()
    let &background = ( &background == "dark"? "light" : "dark" )
    highlight link ALEVirtualTextError Comment
    highlight link ALEVirtualTextStyleError ALEVirtualTextError
    highlight link ALEVirtualTextWarning Comment
    highlight link ALEVirtualTextStyleWarning ALEVirtualTextWarning
    highlight link ALEVirtualTextInfo ALEVirtualTextWarning
    hi ALEError cterm=undercurl
    hi ALEWarning cterm=undercurl
endfunction

However, this doesn't solve the problem when the colorscheme is reloaded automatically, for example, when my terminal background gets changed and vim follows that change.

I'm also suspicious that if these highlight groups get somehow reset, then other non-visible items may also silently reset. In fact, I also have to add ALEError and ALEWarning cterm=undercurl in the manual function, too, because they get reset to underline.

Reproducing the bug

  • open vim (if the terminal background is light)
  • set background=dark
  • or the other way around (if the background is dark, set it to light)

And the virtualtext at the end of the cursor is no longer italic and light (see figures above)

:ALEInfo

Current Filetype: python Available Linters: ['bandit', 'cspell', 'flake8', 'flakehell', 'jedils', 'mypy', 'prospector', 'pycln', 'pycodestyle', 'pydocstyle', 'pyflakes', ...] Linter Aliases: 'jedils' -> ['jedi_language_server'] Enabled Linters: ['mypy', 'pyright', 'ruff'] Ignored Linters: [] Suggested Fixers: 'add_blank_lines_for_python_control_statements' - Add blank lines before control statements. 'autoflake' - Fix flake issues with autoflake. 'autoimport' - Fix import issues with autoimport. 'autopep8' - Fix PEP8 issues with autopep8. 'black' - Fix PEP8 issues with black. 'isort' - Sort Python imports with isort. 'pycln' - remove unused python import statements 'pyflyby' - Tidy Python imports with pyflyby. 'remove_trailing_lines' - Remove all blank lines at the end of a file. 'reorder-python-imports' - Sort Python imports with reorder-python-imports. 'ruff' - A python linter/fixer for Python written in Rust 'trim_whitespace' - Remove all trailing whitespace characters at the end of every line. 'yapf' - Fix Python files with yapf.

Linter Variables: " Press Space to read :help for a setting let g:ale_python_auto_pipenv = 0 let g:ale_python_auto_poetry = 0 let g:ale_python_auto_virtualenv = 0 let g:ale_python_mypy_auto_pipenv = 0 let g:ale_python_mypy_auto_poetry = 0 let g:ale_python_mypy_executable = 'mypy' let g:ale_python_mypy_ignore_invalid_syntax = 0 let g:ale_python_mypy_options = '' let g:ale_python_mypy_show_notes = 1 let g:ale_python_mypy_use_global = 0 let g:ale_python_pyright_auto_pipenv = 0 let g:ale_python_pyright_auto_poetry = 0 let g:ale_python_pyright_config = {} let g:ale_python_pyright_executable = 'pyright-langserver' let g:ale_python_pyright_use_global = 0 let g:ale_python_ruff_auto_pipenv = 0 let g:ale_python_ruff_auto_poetry = 0 let g:ale_python_ruff_change_directory = 1 let g:ale_python_ruff_executable = 'ruff' let g:ale_python_ruff_options = '' let g:ale_python_ruff_use_global = 0

Global Variables: " Press Space to read :help for a setting let g:ale_cache_executable_check_failures = v:null let g:ale_change_sign_column_color = 0 let g:ale_command_wrapper = '' let g:ale_completion_delay = 100 let g:ale_completion_enabled = 1 let g:ale_completion_max_suggestions = 50 let g:ale_disable_lsp = 'auto' let g:ale_echo_cursor = 1 let g:ale_echo_msg_error_str = 'Error' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' let g:ale_echo_msg_info_str = 'Info' let g:ale_echo_msg_warning_str = 'Warning' let g:ale_enabled = 1 let g:ale_fix_on_save = 1 let g:ale_fixers = {} let b:ale_fixers = ['black', 'ruff', 'isort'] let g:ale_history_enabled = 1 let g:ale_info_default_mode = 'preview' let g:ale_history_log_output = 1 let g:ale_keep_list_window_open = 0 let g:ale_lint_delay = 200 let g:ale_lint_on_enter = 1 let g:ale_lint_on_filetype_changed = 1 let g:ale_lint_on_insert_leave = 1 let g:ale_lint_on_save = 1 let g:ale_lint_on_text_changed = 'normal' let g:ale_linter_aliases = {} let g:ale_linters = {} let b:ale_linters = ['mypy', 'ruff', 'pyright'] let g:ale_linters_explicit = 0 let g:ale_linters_ignore = {} let g:ale_list_vertical = 0 let g:ale_list_window_size = 10 let g:ale_loclist_msg_format = '[%linter%] %s [%severity%]' let g:ale_max_buffer_history_size = 20 let g:ale_max_signs = -1 let g:ale_maximum_file_size = v:null let g:ale_open_list = 0 let g:ale_pattern_options = v:null let g:ale_pattern_options_enabled = v:null let g:ale_root = {} let g:ale_set_balloons = 0 let g:ale_set_highlights = 1 let g:ale_set_loclist = 1 let g:ale_set_quickfix = 0 let g:ale_set_signs = 1 let g:ale_sign_column_always = 0 let g:ale_sign_error = 'E' let g:ale_sign_info = 'I' let g:ale_sign_offset = 1000000 let g:ale_sign_style_error = 'E' let g:ale_sign_style_warning = 'W' let g:ale_sign_warning = 'W' let g:ale_sign_highlight_linenrs = 0 let g:ale_type_map = {} let g:ale_use_neovim_diagnostics_api = 0 let g:ale_use_global_executables = v:null let g:ale_virtualtext_cursor = 'current' let g:ale_warn_about_trailing_blank_lines = 1 let g:ale_warn_about_trailing_whitespace = 1

esan0 avatar Oct 03 '23 05:10 esan0

I would like to fix this, but I'm not sure how to fix it.

w0rp avatar Oct 16 '23 05:10 w0rp

Maybe something to look into? image

From here.

egorbn avatar Jan 09 '24 04:01 egorbn

Confirming that adding the following to vimrc seems to do the trick:

function! TogBG() abort
    highlight link ALEVirtualTextError Comment
    highlight link ALEVirtualTextStyleError ALEVirtualTextError
    highlight link ALEVirtualTextWarning Comment
    highlight link ALEVirtualTextStyleWarning ALEVirtualTextWarning
    highlight link ALEVirtualTextInfo ALEVirtualTextWarning
endfunction
autocmd ColorScheme * call TogBG()

egorbn avatar Jan 09 '24 17:01 egorbn