Input method in FreeBSD virtual terminal (Week4)

Date: 06/27-07/04

Python Bindings

This week I decided to replace SWIG with ctypes. The reason is that I found it's quite complicated to return a void pointer or a C-style string in SWIG. While in ctypes I can set a functions's return type to c_void_p to return a void pointer, and one can even cast it into c_char_p to convert it into a Python string.

Take function rime_wrapper_get_input_str() as an example:

rime_wrapper_get_input_str.restype = c_void_p

Then convert the type to char pointer, copy the string and free the origin pointer:

_input_str = rime_wrapper_get_input_str(self.rime_wrapper_ptr)
input_str = cast(_input_str, c_char_p).value.decode('utf-8')
rime_wrapper_free_str(_input_str)
return input_str

Moreover, I found it's not as difficult as I thought few weeks ago to define the contents of a C struct in Python, and it turned out that it paid off since I could directly access the members in a structure in Python without processing them in C.

Tmux-rime

The origin idea of the server is acted as a rime session manager, which can handle multiple sessions and send different actions to different sessions depending on the session_id sent by the client. Later I found RimeAPI only can be initialized once during the program runtime, so the server can no longer handle multiple sessions simultaneously. Therefore I modified both client and server such that only when the user presses the tmux-rime prefix key do the server start.

I also had established and implemented the six basic commands for the server:

As for the tmux part, I had implemented these two functions:

SummerOfCode2021Projects/InputMethodInFreeBSDVirtualTerminal/Week4 (last edited 2021-07-31T09:39:52+0000 by FanChung)