Nexoniarz
91a6d440d6
tty: Alt+1..6 switches terminals, and AltGr is left alone
...
Alt+F1..F6 was wrong in three separate ways, and the third is the one that
matters most here.
Alt+F4 the host window manager closes the QEMU window
Alt+F2 GNOME and KDE open a run dialog
Ctrl+Alt+F1..F6 the host switches its *own* virtual terminals
AltGr+anything Polish diacritics -- a c e l n o s x z with their marks --
and on some setups AltGr is delivered as Ctrl+Alt
Ctrl+Shift+key widely bound inside applications
Scroll Lock not present on many keyboards
Alt+1..6 survives all of it: the number row, so no function key is involved,
and left Alt, so AltGr is untouched.
Right Alt is tracked as its own modifier bit now. It used to share ALT, which
is harmless for typing -- neither is used to look up a character -- and wrong
for chords, because it made AltGr indistinguishable from Alt.
And the test is an equality rather than a mask:
if ((shift & (CTL | SHIFT | ALT | RALT)) == ALT && ...)
`shift & ALT` fired on Ctrl+Alt+1 and AltGr+1 as well, so a chord aimed at the
host -- or an ordinary Polish keystroke -- would have switched terminals
behind your back. That was a real bug in what shipped yesterday.
Verified with QEMU's sendkey, comparing screendump hashes:
start (tty1) 86cee2284878
Ctrl+Alt+2 86cee2284878 identical -- did not fire
AltGr+2 86cee2284878 identical -- did not fire
Alt+2 114562804a78 switched
Alt+1 86cee2284878 back, pixel-identical to the start
schfs-check passes.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VQ7Qx8E1q1M1bbCq8QLHS2
2026-09-13 12:56:34 +02:00
..
asm.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
buf.h
Raise the disk ceiling: 64-bit blocks, no FSSIZE panic, LBA48
2026-08-10 18:50:31 +02:00
config_sinit.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
date.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
defs.h
tty: six virtual terminals, and the plumbing that makes them terminals
2026-09-13 00:08:00 +02:00
device.h
docs: four directories, and a rule for when a thing leaves the roadmap
2026-09-12 17:13:35 +02:00
display.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
dma.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
elf.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
errno.h
schfs: a format version policy, and refusing is not falling back
2026-09-12 17:13:59 +02:00
fb.h
Rename Schunix to SchOS; the kernel becomes SchIFT
2026-08-09 14:09:59 +02:00
fcntl.h
Rename Schunix to SchOS; the kernel becomes SchIFT
2026-08-09 14:09:59 +02:00
file.h
fs: devtmpfs, so /dev is generated rather than written to a disk
2026-09-12 20:18:30 +02:00
font.h
Rename Schunix to SchOS; the kernel becomes SchIFT
2026-08-09 14:09:59 +02:00
fs.h
init survives stray signals; commands are 4-34x faster
2026-08-09 15:54:05 +02:00
fsstat.h
fs: timestamps come from the clock, and /proc/fsstat says how full the tables are
2026-09-12 17:14:14 +02:00
gfx.h
tty: six virtual terminals, and the plumbing that makes them terminals
2026-09-13 00:08:00 +02:00
input.h
usb-hid: bind an absolute pointer, and plumb EV_ABS through
2026-08-10 18:27:01 +02:00
irq.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
kbd.h
tty: Alt+1..6 switches terminals, and AltGr is left alone
2026-09-13 12:56:34 +02:00
logo.h
docs: a branding folder, and the three marks are not interchangeable
2026-09-12 18:19:09 +02:00
memlayout.h
Free every usable memory region, not one contiguous run
2026-08-09 20:03:51 +02:00
mmu.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
mp.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
netdev.h
net: a frame wakes the stack, instead of waiting for the clock
2026-09-12 17:23:46 +02:00
param.h
kernel: processes have an environment now, and zsh is the shell
2026-09-12 23:26:50 +02:00
pci.h
net: a network *class*, so the stack stops knowing what an e1000 is
2026-08-15 16:42:34 +02:00
posix.h
tty: six virtual terminals, and the plumbing that makes them terminals
2026-09-13 00:08:00 +02:00
proc.h
tty: six virtual terminals, and the plumbing that makes them terminals
2026-09-13 00:08:00 +02:00
qr.h
docs: four directories, and a rule for when a thing leaves the roadmap
2026-09-12 17:13:35 +02:00
schboot.h
boot/uefi: the memory map the kernel gets is the one the firmware agreed to
2026-08-11 11:42:22 +02:00
schfs.h
schfs: records at arbitrary offsets are packed, and the compiler is told
2026-09-12 17:56:36 +02:00
sleeplock.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
socket.h
net: AF_NETLINK, so getifaddrs() works for everything and not just one program
2026-09-12 19:23:34 +02:00
spinlock.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
stat.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
syscall.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
text.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
theme.h
gfx: the console and the crash screen stop drawing on a driver by name
2026-08-15 17:04:10 +02:00
traps.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
ttf.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
types.h
Initial commit: Schunix as it stands before the SchOS rename
2026-08-09 13:47:01 +02:00
uaccess.h
Rename Schunix to SchOS; the kernel becomes SchIFT
2026-08-09 14:09:59 +02:00
usb.h
usb-hid: bind an absolute pointer, and plumb EV_ABS through
2026-08-10 18:27:01 +02:00
user.h
kernel: processes have an environment now, and zsh is the shell
2026-09-12 23:26:50 +02:00
vt.h
tty: Alt+1..6 switches terminals, and AltGr is left alone
2026-09-13 12:56:34 +02:00
x86.h
schfs: the commit barrier, reflink, and attributes with an index over them
2026-08-15 16:02:02 +02:00