hyper
hyper copied to clipboard
`ioctl` system call returning the wrong result
- [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);
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": []
}
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.
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.
You can also use CSI 14 t to request the current text area size in pixels.
After testing, Hyper doesn't even support CSI 14 t:
But VSCode supports it -- which also uses node-pty and does not fully implement TIOCGWINSZ:
Are you on latest canary? CSI 14 t gets activated by the recently added image support and prolly will not work with older versions.
I did a quick test on the latest canary, it supports CSI 14 t now!