Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
79 lines
2.0 KiB
Python
79 lines
2.0 KiB
Python
# vim:fileencoding=utf-8
|
|
|
|
import os
|
|
import vim
|
|
import socket
|
|
import struct
|
|
import contextlib
|
|
|
|
fcitxsocketfile = vim.eval('s:fcitxsocketfile')
|
|
|
|
class FcitxComm(object):
|
|
STATUS = struct.pack('i', 0)
|
|
ACTIVATE = struct.pack('i', 1 | (1 << 16))
|
|
DEACTIVATE = struct.pack('i', 1)
|
|
INT_SIZE = struct.calcsize('i')
|
|
|
|
def __init__(self, socketfile):
|
|
if socketfile[0] == '@': # abstract socket
|
|
socketfile = '\x00' + socketfile[1:]
|
|
self.socketfile = socketfile
|
|
self.sock = None
|
|
|
|
def status(self):
|
|
return self._with_socket(self._status) == 2
|
|
|
|
def activate(self):
|
|
self._with_socket(self._command, self.ACTIVATE)
|
|
|
|
def deactivate(self):
|
|
self._with_socket(self._command, self.DEACTIVATE)
|
|
|
|
def _error(self, e):
|
|
estr = str(e).replace('"', r'\"')
|
|
file = self.socketfile.replace('"', r'\"')
|
|
vim.command('echohl WarningMsg | echo "fcitx.vim: socket %s error: %s" | echohl NONE' % (file, estr))
|
|
|
|
def _connect(self):
|
|
self.sock = sock = socket.socket(socket.AF_UNIX)
|
|
sock.settimeout(0.5)
|
|
try:
|
|
sock.connect(self.socketfile)
|
|
return True
|
|
except (socket.error, socket.timeout) as e:
|
|
self._error(e)
|
|
return False
|
|
|
|
def _with_socket(self, func, *args, **kwargs):
|
|
# fcitx doesn't support connection reuse
|
|
if not self._connect():
|
|
return
|
|
|
|
with contextlib.closing(self.sock):
|
|
try:
|
|
return func(*args, **kwargs)
|
|
except (socket.error, socket.timeout, struct.error) as e:
|
|
self._error(e)
|
|
|
|
def _status(self):
|
|
self.sock.send(self.STATUS)
|
|
return struct.unpack('i', self.sock.recv(self.INT_SIZE))[0]
|
|
|
|
def _command(self, cmd):
|
|
self.sock.send(cmd)
|
|
|
|
Fcitx = FcitxComm(fcitxsocketfile)
|
|
|
|
def fcitx2en():
|
|
if Fcitx.status():
|
|
vim.command('let b:inputtoggle = 1')
|
|
Fcitx.deactivate()
|
|
|
|
def fcitx2zh():
|
|
if vim.eval('exists("b:inputtoggle")') == '1':
|
|
if vim.eval('b:inputtoggle') == '1':
|
|
Fcitx.activate()
|
|
vim.command('let b:inputtoggle = 0')
|
|
else:
|
|
vim.command('let b:inputtoggle = 0')
|