hyper icon indicating copy to clipboard operation
hyper copied to clipboard

`ioctl` system call returning the wrong result

Open sxyazi opened this issue 2 years ago • 6 comments

  • [x] Your Hyper.app version is 3.4.1. Please verify you're using the latest Hyper.app version
  • [x] I have searched the issues of this repo and believe that this is not a duplicate

  • Any relevant information from devtools? (CMD+OPTION+I on macOS, CTRL+SHIFT+I elsewhere):

No

  • Is the issue reproducible in vanilla Hyper.app?

Yes

Issue

Can't use ioctl to get the correct value of xpixel and ypixel:

let s = unsafe {
	let s: winsize = std::mem::zeroed();
	ioctl(STDOUT_FILENO, TIOCGWINSZ, &s);
	s
};
dbg!(s.ws_col, s.ws_row, s.ws_xpixel, s.ws_ypixel);
image

There are both zero, which causes some apps don't work.


  • Hyper version: undefined "3.4.1"
  • OS ARCH VERSION: darwin arm64 22.5.0
  • Electron: 20.3.6 LANG: undefined
  • SHELL: /opt/homebrew/bin/zsh TERM: undefined
.hyper.js contents
{
  "updateChannel": "stable",
  "fontSize": 12,
  "fontFamily": "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": "",
  "workingDirectory": "",
  "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",
    "limeGreen": "#32CD32",
    "lightCoral": "#F08080"
  },
  "shell": "",
  "shellArgs": [
    "--login"
  ],
  "env": {},
  "bell": "SOUND",
  "copyOnSelect": false,
  "defaultSSHApp": true,
  "quickEdit": false,
  "macOptionSelectionMode": "vertical",
  "webGLRenderer": true,
  "webLinksActivationKey": "",
  "disableLigatures": true,
  "disableAutoUpdates": false,
  "screenReaderMode": false,
  "preserveCWD": true
}
plugins
{
  "plugins": [],
  "localPlugins": []
}

sxyazi avatar Jul 30 '23 21:07 sxyazi

There are both zero, which causes some apps don't work.

Apps must not rely on correct pixel propagation by TIOCGWINSZ. These values are intended to be 0 as a fallback Even worse - there are systems, that cannot tell a pixel size at all.

So its not returning a wrong result here, but telling you - "dont know the right value". Would be nice to see this getting fixed yes, but imho thats an issue with node-pty.

jerch avatar Aug 04 '23 11:08 jerch

there are systems, that cannot tell a pixel size at all

Is it a non-Unix system, like Windows?

I'm developing a terminal file manager, and when I test its image preview feature, I find that I can't run it in Hyper. I need to get the actual pixel size to calculate the image's width and height -- I'm not sure how else can get it done.

sxyazi avatar Aug 05 '23 02:08 sxyazi

You can also use CSI 14 t to request the current text area size in pixels.

jerch avatar Aug 05 '23 06:08 jerch

After testing, Hyper doesn't even support CSI 14 t:

image

But VSCode supports it -- which also uses node-pty and does not fully implement TIOCGWINSZ:

image

sxyazi avatar Aug 07 '23 16:08 sxyazi

Are you on latest canary? CSI 14 t gets activated by the recently added image support and prolly will not work with older versions.

jerch avatar Aug 07 '23 18:08 jerch

I did a quick test on the latest canary, it supports CSI 14 t now!

sxyazi avatar Aug 07 '23 18:08 sxyazi