Hyper: Text rendering overlap on scroll in a terminal editor

Created on 5 Jan 2019  ·  44Comments  ·  Source: vercel/hyper

  • [x] I am on the latest Hyper.app version
  • OS version and name: Ubuntu 18.04.1 LTS
  • Hyper.app version: 2.1.0

Issue


I noticed if i use a terminal editor like nano, when i scroll down and happen to scroll back up the texts overlap

Before Scroll
before

After Scroll
after

Most helpful comment

As a workaround, you can hit ^L to tell Nano to redraw the entire display.

All 44 comments

As a workaround, you can hit ^L to tell Nano to redraw the entire display.

Getting the same on Ubuntu 18.04.1 and Hyper 3.0.0-canary.4

The same behaviour occurs in htop when data is refreshing.

Same behaviour happens at times in MacOS

Same issue.
Hyper 2.1.2 (stable) with no extensions
Ubuntu 18.04 + KDE

Can confirm. Linux Mint 19, hyper 2.1.2.

Same here, happens every time I use nano.
MacOS Mojave, version 2.1.2 (stable).

Still an issue, happens when paging up/down in nano. Repainting with Ctrl+L fixes the screen until you scroll again, as @j-f1 mentions.
Hyper.app 3.0.0, no plugins, macOS 10.14.4

Happens for me too on macOS 10.14.5 with Hyper v3.0.2 (stable).

Many resources online said that you should set the TERM env variable. The default for Terminal.app is xterm-256color which works fine when using it. But when I set it in Hyper.app (both through the .hyper.js config and as an export in the .bashrc), it still breaks.

I've seen multiple issues on GitHub that mention this including #3629, #3491, #3142, #3664, #3596. If there are that many people mentioning this issue, I think that it's a pretty important bug.

Note: This is not a bug specific to nano since other issues (#3629) seem to be mentioning vim.

Yup would be nice if this is addressed. Had this issue for 6 months now and it can be incredibly frustrating.

For me, it seems if you set TERM to screen the issue does not occur.

For example, the issue occurs with:

TERM=xterm nano ~/.bashrc

But not with:

TERM=screen nano ~/.bashrc

Anyone else able to check if this does the same for them?

Possibly narrows the issue down a bit.

its happen with me , no idea how to fix this!

TERM=screen nano foo

Still leaves garbage on the screen: https://i.imgur.com/gLfLkRZ.png

Im having the same problem on Ubuntu 18.04.3 LTS, nano 2.9.3 and Hyper 3.0.2 (stable).

Workaround for macos + zsh users:
Add the line export TERM=screen to ~/.zshrc

TERM=screen nano foo

Still leaves garbage on the screen: https://i.imgur.com/gLfLkRZ.png

I think this could be a different issue with the screen not clearing on change rather than specifically with scrolling. Are you able to get any issues to occur when scrolling with TERM set to screen?

@stu177 Oh, nevermind then. I don't think I've noticed that specific issue. Is there another ticket for what I'm describing? It doesn't happen in bash.exe https://i.imgur.com/Dd5owMn.png Perhaps https://github.com/zeit/hyper/issues/3792

Same issue here

Opening file in nano (no issues)

image

Paging down to bottom, artifacts left behind

image

Exiting nano, artifacts are still there

image

Can you try with a CI build of current canary or maybe compile one yourself? Or setting webGLRenderer: false, in the config.

Can you try with a CI build of current canary or maybe compile one yourself? Or setting webGLRenderer: false, in the config.

Tried with canary 3.0.2 and webGL off, the issue still occurs.

No, I meant a CI build of the canary branch

Thanks for help @Stanzilla , how do I find the CI build? I also have this issue and would like to help.

Thanks, this fixed it!

From the last comment it seems like this is fixed, maybe it was an issue with the old xterm?
A new canary for Mac(use dmg) and Linux was released (Windows users can try it out from here)
Can you all please give it a try and confirm if this issue is still there.

Fixed for me 👍
Tested on 3.1.0-canary.4 (MacOSX 10.13.6)

Fixed for me 👍
Tested on 3.1.0-canary.4 (MacOSX 10.13.6)

Without the export TERM=screen workaround?

Yes, I've removed the workaround before my test.
Works with TERM=xterm-256color

@Stanzilla perhaps I'm confused, but the official version is still at 3.0.2 some 6 months after the build... and the CircleCI build page to which you linked no longer has the official download, so I'm unsure how to acquire v3.1.0...

edit releases page _facepalm_

edit 2 Well, after upgrading, Hyper is totally borked. Can't get any key input or anything else to work:
Screen Shot 2020-05-04 at 3 10 43 PM

Can you try without any plugins installed?

Commented out all plugins from the config and restarted. No change, except the theme looks different.
Screen Shot 2020-05-04 at 3 20 04 PM
Downgraded back to 3.0.2 and everything worked fine. Changed the TERM=screen and the original bug went away.

Interesting, do you have webGL enabled or disabled? Should be an option in the file as well if you don't have it, it's off.

Disabled, AFAICT. Here's my full config with superfluous comments removed & plugins re-enabled:

module.exports = {
  config: {
    updateChannel: 'stable',
    fontSize: 18,
    fontFamily: '"Inconsolata Nerd Font", Menlo, "DejaVu Sans Mono", Consolas, "Lucida Console", monospace',
    fontWeight: 'normal',
    fontWeightBold: 'bold',
    lineHeight: 1,
    letterSpacing: 0,
    cursorColor: 'rgba(248,28,229,0.8)',
    cursorAccentColor: '#000',
    cursorShape: 'BLOCK',
    cursorBlink: false,
    foregroundColor: '#fff',
    backgroundColor: '#000',
    selectionColor: 'rgba(248,28,229,0.3)',
    borderColor: '#333',
    css: '',
    termCSS: '',
    showHamburgerMenu: '',
    showWindowControls: '',
    padding: '12px 14px',
    colors: {
      black: '#000000',
      red: '#C51E14',
      green: '#1DC121',
      yellow: '#C7C329',
      blue: '#0A2FC4',
      magenta: '#C839C5',
      cyan: '#20C5C6',
      white: '#C7C7C7',
      lightBlack: '#686868',
      lightRed: '#FD6F6B',
      lightGreen: '#67F86F',
      lightYellow: '#FFFA72',
      lightBlue: '#6A76FB',
      lightMagenta: '#FD7CFC',
      lightCyan: '#68FDFE',
      lightWhite: '#FFFFFF',
    },

    shell: '',
    shellArgs: ['--login'],
    env: {},
    bell: 'SOUND',

    visor: {
      hotkey: 'Cmd+\\',
      position: 'right', // or left, right, bottom
    },

    paneNavigation: {
      debug: false,
      hotkeys: {
        navigation: {
          up: 'cmd+shift+up',
          down: 'cmd+shift+down',
          left: 'cmd+shift+left',
          right: 'cmd+shift+right'
        },
        jump_prefix: 'cmd+alt', // completed with 1-9 digits
        permutation_modifier: 'shift', // Added to jump and navigation hotkeys for pane permutation
        maximize: 'meta+enter'
      },
      showIndicators: true, // Show pane number
      indicatorPrefix: '^⌥', // Will be completed with pane number
      indicatorStyle: { // Added to indicator <div>
        position: 'absolute',
        top: 0,
        left: 0,
        fontSize: '10px'
      },
      focusOnMouseHover: false,
      inactivePaneOpacity: 0.3 // Set to 1 to disable inactive panes dimming
    },
  },

  opacity: 0.85,

  plugins: [
    "hyper-pane",
    "hyper-materialshell",
    "hyperterm-visor"
  ],

  localPlugins: [],

  // OSX SPECIFIC
  modifierKeys: {
    cmdIsMeta: false, // default
    altIsMeta: true // default
  },

  // DVORAK Keymap
  keymaps: {
    'tab:new': 'cmd+t',
    'tab:close': 'cmd+shift+w',
    'tab:next': 'cmd+e',
    'tab:prev': 'cmd+shift+e',
    'pane:splitHorizontal': 'cmd+shift+n',
    'pane:splitVertical': 'cmd+n',
    'pane:close': 'cmd+w',
    'editor:undo': 'cmd+z',
    'editor:redo': 'cmd+shift+z',
    'editor:cut': 'cmd+x',
    'editor:copy': 'cmd+c',
    'editor:paste': 'cmd+v',
    'editor:break': 'meta+c',
    'window:close': 'cmd+q',
    'editor:reload': 'cmd+r',
    'pane:next': 'cmd+d',
    'pane:prev': 'cmd+shift+d',

    "editor:break": "cmd+esc",
    "editor:movePreviousWord": "cmd+left",
    "editor:moveNextWord": "cmd+right",
    "editor:moveBeginningLine": "alt+left",
    "editor:moveEndLine": "alt+right",
    "editor:deletePreviousWord": "cmd+backspace",
    "editor:deleteNextWord": "cmd+delete",
    "editor:deleteBeginningLine": "alt+backspace",
    "editor:deleteEndLine": "alt+delete",
  },
};

And ~/.zshrc too fwiw:

export ZSH="$HOME/.oh-my-zsh"

ZSH_THEME="powerlevel9k/powerlevel9k"
ZSH_DISABLE_COMPFIX=false

POWERLEVEL9K_MODE='nerdfont-complete'
POWERLEVEL9K_STATUS_VERBOSE=false
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(ssh context dir status) # os_icon
POWERLEVEL9K_SHORTEN_STRATEGY='truncate_from_right'
POWERLEVEL9K_SHORTEN_DIR_LENGTH=10
POWERLEVEL9K_CONTEXT_TEMPLATE="`hostname -f | sed "s/.local//" | sed "s/.airgc.net//"`"
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(os_icon vcs root_indicator) # context
POWERLEVEL9K_VCS_GIT_HOOKS=(git-remotebranch)

plugins=(
  git
  sublime
  history
  kubectl
  colorize
  colored-man-pages
  zsh-syntax-highlighting
  zsh-autosuggestions
)

source $ZSH/oh-my-zsh.sh

# FZF
if [[ ! -f ~/.fzf.zsh ]]; then
  echo "Installing fzf..."
  git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
  ~/.fzf/install
fi
source ~/.fzf.zsh

Can you try just removing/renaming your config and see if it works with the default one?

Still no go.

See 3.0.2 running on the right side (second screenshot), and note the commands I ran in order to remove ~/.hyper.js. The left window, 3.1.0, was opened after that was ran. Also, note that the display bug does not happen right away. It appears to boot fine, including the prompt (first screenshot). It even renders the nerdfonts correctly, with the Mac icon on the right. The bug happens _as soon as I press a key or tab away from the window._
Screen Shot 2020-05-04 at 4 46 21 PM

Screen Shot 2020-05-04 at 4 43 32 PM

@zaneclaes instead of the releases page get the latest build from the most recent run in this page https://github.com/zeit/hyper/actions?query=event%3Apush+branch%3Acanary

The build on the releases page still had some issues iirc, which've been fixed in the ci build

Okay, I downloaded build #95769080. This version works with the default config file, but did not work with my config file. So I removed everything one at a time and isolated the problem to the nerdfonts. Specifically, the fontFamily line in the config causes the bug.

Screen Shot 2020-05-05 at 8 14 50 AM

module.exports = {
  config: {
    fontFamily: '"Inconsolata Nerd Font", Menlo, "DejaVu Sans Mono", Consolas, "Lucida Console", monospace',
  },
};

@zaneclaes Can you also try once with ligatures disabled, set disableLigatures: true in config.

That fixed it! Thanks @LabhanshAgrawal — fyi the nano pagination bug is confirmed fixed with this too (I disabled the TERM=screen export).

This should make it for 3.1.0 release?

@zaneclaes Can you reply with the link from where you downloaded the font, I want to try and reproduce the issue, so that we might not need to disable ligatures for it.

It's part of the Nerd Fonts Package. IIRC I may have built it from source, but the first URL appears to have a much more modular user-friendly approach than when I first started using Nerd Fonts years ago.

Is this fixed and live?

You can download a ci build , it isn't released yet.

I was able to fix this!

I just compiled the source code from scratch. I cloned the canary branch and followed the instructions on the github readme: https://github.com/vercel/hyper

I believe the problem was with the xterm.js npm package and has been fixed there but because Hyper has not been re-compiled and released since May 2019, the fix has not been distributed.

My working build is 3.1.0-canary.4.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

mofux picture mofux  ·  68Comments

silvenon picture silvenon  ·  94Comments

rauchg picture rauchg  ·  67Comments

fabdelgado picture fabdelgado  ·  102Comments

BrysonR picture BrysonR  ·  91Comments