macvim-dev / macvim-dev/macvim

Terminal mode buffers do not implement Xterm control sequences to change cursor shape correctly

Abierto
#1,215 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Vim Script
Estrellas
7.9k
Forks
691
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

Describe the bug
According to the VIM documentation in terminal.txt under terminal-cursor-style:

By default the cursor in the terminal window uses a not blinking block. The
normal xterm escape sequences can be used to change the blinking state and the
shape. Once focus leaves the terminal window Vim will restore the original
cursor.

These control sequences are defined as follows (source: XTerm Control Sequences ):

CSI Ps SP q
          Set cursor style (DECSCUSR), VT520.
            Ps = 0  ⇒  blinking block.
            Ps = 1  ⇒  blinking block (default).
            Ps = 2  ⇒  steady block.
            Ps = 3  ⇒  blinking underline.
            Ps = 4  ⇒  steady underline.
            Ps = 5  ⇒  blinking bar, xterm.
            Ps = 6  ⇒  steady bar, xterm.

However, trying these in a terminal inside the GUI of MacVim does not work.

To Reproduce
Detailed steps to reproduce the behavior:

  1. Run mvim --clean
  2. Type :terminal to create a new terminal emulator buffer
  3. Type any of the following commands and press enter:
    • printf '\e[1 q' should turn the cursor into a blinking block, which works;
    • printf '\e[2 q' should turn the cursor into a steady block, which works;
    • printf '\e[3 q' should turn the cursor into a blinking underline, instead the cursor turns invisible;
    • printf '\e[4 q' should turn the cursor into a steady underline, instead the cursor turns invisible;
    • printf '\e[5 q' should turn the cursor into a blinking bar, instead the cursor turns invisible;
    • printf '\e[6 q' should turn the cursor into a steady bar, instead the cursor turns invisible.

Expected behavior
The same steps executed in gvim on Kubuntu 18.04 all work as expected, changing the cursor shapes as prescribed by the definition of the control sequences cited above.

Environment (please complete the following information):

  • Vim version

    :version
    VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Sep 24 2021 14:13:28)
    macOS version - x86_64
    Included patches: 1-3455
    Compiled by GitHub Actions
    Huge version with MacVim GUI.  Features included (+) or not (-):
    +acl               +file_in_path      -mouse_sysmouse    +tag_binary
    +arabic            +find_in_path      +mouse_urxvt       -tag_old_static
    +autocmd           +float             +mouse_xterm       -tag_any_white
    +autochdir         +folding           +multi_byte        -tcl
    -autoservername    -footer            +multi_lang        +termguicolors
    +balloon_eval      +fork()            -mzscheme          +terminal
    +balloon_eval_term +fullscreen        +netbeans_intg     +terminfo
    +browse            +gettext           +num64             +termresponse
    ++builtin_terms    -hangul_input      +odbeditor         +textobjects
    +byte_offset       +iconv             +packages          +textprop
    +channel           +insert_expand     +path_extra        +timers
    +cindent           +ipv6              +perl/dyn          +title
    +clientserver      +job               +persistent_undo   +toolbar
    +clipboard         +jumplist          +popupwin          +transparency
    +cmdline_compl     +keymap            +postscript        +user_commands
    +cmdline_hist      +lambda            +printer           +vartabs
    +cmdline_info      +langmap           +profile           +vertsplit
    +comments          +libcall           +python/dyn        +virtualedit
    +conceal           +linebreak         +python3/dyn       +visual
    +cryptv            +lispindent        +quickfix          +visualextra
    +cscope            +listcmds          +reltime           +viminfo
    +cursorbind        +localmap          +rightleft         +vreplace
    +cursorshape       +lua/dyn           +ruby/dyn          +wildignore
    +dialog_con_gui    +menu              +scrollbind        +wildmenu
    +diff              +mksession         +signs             +windows
    +digraphs          +modify_fname      +smartindent       +writebackup
    +dnd               +mouse             -sodium            -X11
    -ebcdic            +mouseshape        -sound             -xfontset
    +emacs_tags        +mouse_dec         +spell             +xim
    +eval              -mouse_gpm         +startuptime       -xpm
    +ex_extra          -mouse_jsbterm     +statusline        -xsmp
    +extra_search      +mouse_netterm     -sun_workshop      -xterm_clipboard
    -farsi             +mouse_sgr         +syntax            -xterm_save
       system vimrc file: "$VIM/vimrc"
         user vimrc file: "$HOME/.vimrc"
     2nd user vimrc file: "~/.vim/vimrc"
          user exrc file: "$HOME/.exrc"
      system gvimrc file: "$VIM/gvimrc"
        user gvimrc file: "$HOME/.gvimrc"
    2nd user gvimrc file: "~/.vim/gvimrc"
           defaults file: "$VIMRUNTIME/defaults.vim"
        system menu file: "$VIMRUNTIME/menu.vim"
      fall-back for $VIM: "/Applications/MacVim.app/Contents/Resources/vim"
    Compilation: clang -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_MACVIM -Wall -Wno-u
    nknown-pragmas -pipe -DMACOS_X -DMACOS_X_DARWIN -g -O2 -arch x86_64 -arch arm64
    -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -Wall -Wextra -Wshadow -Werro
    r -Wno-error=missing-field-initializers -Wno-error=deprecated-declarations -Wno-
    error=unused-function
    Linking: clang -L. -fstack-protector-strong -L/usr/local/lib -L/usr/local/opt/li
    byaml/lib -L/usr/local/opt/openssl@1.1/lib -L/usr/local/opt/readline/lib -L. -fs
    tack-protector-strong -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local
    /opt/openssl@1.1/lib -L/usr/local/opt/readline/lib -arch x86_64 -arch arm64 -L/u
    sr/local/lib -o Vim -lm -lncurses -liconv /usr/local/lib/libintl.a -framework Ap
    pKit -fstack-protector -L/System/Library/Perl/5.18/darwin-thread-multi-2level/CO
    RE
    
  • OS: macOS Catalina 10.15.7

  • Terminal: GUI

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Reproduce el problema con mvim --clean y luego compara el comportamiento de las secuencias CSI Ps SP q indicadas con gvim en un búfer de terminal. Rastrea cómo MacVim gestiona las secuencias del estilo del cursor del terminal, centrándote en por qué los valores 3–6 se vuelven invisibles mientras que 1–2 funcionan. Se considerará terminado cuando los estilos de subrayado y barra, tanto parpadeantes como fijos, se rendericen correctamente sin hacer regresiones en los estilos de bloque.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
vim
Área
desktop
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.