summaryrefslogtreecommitdiff
path: root/jankime.html
diff options
context:
space:
mode:
Diffstat (limited to 'jankime.html')
-rw-r--r--jankime.html117
1 files changed, 117 insertions, 0 deletions
diff --git a/jankime.html b/jankime.html
new file mode 100644
index 0000000..3c54176
--- /dev/null
+++ b/jankime.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html>
+<head>
+<title>Janky IME</title>
+<meta charset="utf-8"/>
+<link rel="stylesheet" href="https://hairydiode.xyz/style.css"/>
+<link rel="icon" type="image/png" href="https://hairydiode.xyz/img/fav/logo.png"/>
+</head>
+<body>
+<div class="content">
+<pre>
+<!--
+123456789-223456789-323456789-423456789-523456789-623456789-723456789-8234567890
+一二三四
+-->--------------------------------------------------------------------------------
+
+<a href="https://hairydiode.xyz">>HairyDiode</a>
+
+--------------------------------------------------------------------------------
+<!--
+123456789-223456789-323456789-423456789-523456789-623456789-723456789-8234567890
+一二三四-->Janky IME 6-29-2023
+--------------------------------------------------------------------------------
+UPDATE: This IME is now tmux based, old xdotool version is still <a href="https://hairydiode.xyz/cgit/bim.git/tree/ims">here</a>
+
+UPDATE2: I have created the most cursed thing in existance. Full unicode display
+and input support in the linux console using only userland bash/busybox and
+tmux. See <a href="https://hairydiode.xyz/unihome.html">we have unicode at home</a>
+
+A new python version came out, so of course that means every python package on
+my rolling-release system has broken. This includes ibus, which I need for my
+input method. I'm currently running some web-crawling scripts that I don't want
+to stop, so while I wait for my machine to finish downloading all of <a href="https://www.rcsb.org/">PDB</a>, I decided
+to write a janky bashscript implementation of ibus table so that I can still use
+嘸蝦米.
+
+Background:
+ 嘸蝦米 (EN: Boshiamy) is a proprietary component-based input method for
+ Chinese. They offer paid software on iOS, Android, and Windows, but no
+ Linux version is available. On my phone I gladly pay for a Boshiamy
+ license, but on Linux I use this implementation of Boshiamy using ibus
+ table from <a href="https://github.com/jdh8/ibus-boshiamy">here</a>.
+
+ However, I urge that people pay for the license anyways as most of the
+ actual work in creating an IME is organizational. The technical aspects
+ of IMEs are fairly trivial as you'll see here.
+
+ In technical terms, it's just a very large TSV file with the first
+ column being the input code, the 2nd being the character, and the 3rd
+ being a ranking for ordering which character comes first when selecting
+ them.
+
+ EX:
+ typing wso[SPACE] or wso1 inputs 浩, typing wso2 inputs 澢
+ wso 浩 100
+ wso 澢 99
+
+ It can also be used for non-chinese characters such as è
+ ,ne è 100
+
+The Implementation:
+ I want this to work in the terminal, and I want it to only require bash,
+ and tmux, and it needs to work on all programs running in the terminal
+ regardless of whether they use cooked input(bash) or raw input(vim).
+
+ So what I ended up on is a bash script that runs in a seperate tmux
+ panel and sends input to the previously active panel
+
+ Input is read with read in a loop
+
+ <a href="https://hairydiode.xyz/cgit/bim.git/tree/imt">CODE:</a>
+ OIFS=$IFS
+ export IFS=""; read -rsn1 i
+ IFS=$OIFS
+
+ IFS="" is done to make it read spaces as input, but this makes this
+ implementation very brittle and probably not portable depending on bash
+ versions. This also passes along control and special characters such as
+ delete and move left, and it seems tmux handles most of the differences
+ between terminals. An older version of this ime using xdotool did not
+ handle these control characters well.
+
+ I then simply run grep ^$code\s, rearrange the columns with awk and sort,
+ then take out the ranking column
+
+ <a href="https://hairydiode.xyz/cgit/bim.git/tree/imt">CODE:</a>
+ opt=$(grep "^$code\s" ~/lang/zh/boshiamy/ibus-boshiamy/boshiamy.txt |\
+ #remove simplfied
+ grep -v 98|\
+ awk '{print $3" "$2}' |\
+ sort -nr|\
+ awk '{print $2}')
+
+ finally, it inputs the selected character into tmux if the ime input is
+ 1-9 or Space. NOTE: bash variables don't store newlines, so the
+ conversion of the input characters from line seperated to space
+ seperated was done for free. However this makes the code less portable
+
+ <a href="https://hairydiode.xyz/cgit/bim.git/tree/imt">CODE:</a>
+ char=$(echo $opt | awk "{print \$1}")
+ ...
+ tmux send-key -t "!" "$char"
+
+Downsides/The Future:
+ This works in the linux console but obviously the linux console has
+ limitations on what text it can display(by default the linux console can
+ not display fonts with more than 512 characters). I think I'm gonna
+ write a bash based cbrll implemntation and a character displayer as well
+ so that I can get full userland unicode display and input support.
+</pre>
+</div>
+<br>
+<br>
+</body>
+<!--
+if you're digging in the src you might be interested in how this site works
+here: https://hairydiode.xyz/meta2
+-->