From 9e6bca0b2fadeb55d55a27329a72e03b31d9998d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haoran=20S=2E=20Diao=20=28=E5=88=81=E6=B5=A9=E7=84=B6=29?= <0@hairydiode.xyz> Date: Sat, 6 Sep 2025 16:37:54 -0700 Subject: All the sites --- ptyim.html | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 ptyim.html (limited to 'ptyim.html') diff --git a/ptyim.html b/ptyim.html new file mode 100644 index 0000000..c16dc79 --- /dev/null +++ b/ptyim.html @@ -0,0 +1,72 @@ + + +Non-Janky Input Method for the Linux Console (and other Terminals) + + + + + +
+
+--------------------------------------------------------------------------------
+
+>HairyDiode                                             
+
+--------------------------------------------------------------------------------
+
+Non-Janky Input Method for the Linux Console (and other Terminals)    09-06-2025
+--------------------------------------------------------------------------------
+
+I've implemented boshiamy in a lot of convoluted ways so far. I've done it using
+bash scripts and using xkb compose rules.
+
+But the reason I've been trying to do this to be able to use an input method in
+the Linux Console, and eventually a physical terminal. Back in the day they had
+zhcon, which was a userspace virtual console with the input method built in, but
+it's ugly and only supports dbcs encoding.
+
+I've also been building a real world physical serial terminal, and having the
+input method implemented in software saves me the trouble of trying to fit it
+inside of microcontroller ROM.
+
+One Idea I've had for a while is to simply write an input method that sits
+between the terminal/console and whatever program is running. If tmux can do it
+so can I, right?
+
+After digging through a LOT of manpages I finally made my idea true. It's a
+program that creates a pseudoterminal with a shell (or your program of choice)
+attached to it, and routes all input through an input method before it reaches
+the pseudo terminal. 
+
+I had to mess around with a bunch of stuff like low level POSIX termios
+libraries, obscure linux system calls, session/process groups, and even terminal
+escape codes. Luckily, almost everything I needed was in the manpages.
+
+The final implementation should be encoding agnostic, although it does make some
+assumptions about the terminal you're using. All this can be changed by
+modifying some macros.
+
+Testing so far it works on st, the linux console, kmscon and other terminal
+emulators. It's compatible with pretty much every ncurses program I tried. 
+
+Special Thanks to:
+	- 何震邦(jdh8) for this ibus boshiamy implementation I based my IM table
+	off of
+	- Linux Akesson for this writeup which explained a everything 
+	about how ttys work  on linux
+
+Code and further reading are in a git repo here
+
+
+
+
+ + -- cgit v1.1