58 lines
2.2 KiB
Plaintext
Executable File
58 lines
2.2 KiB
Plaintext
Executable File
#!/usr/bin/env -S emacs -x
|
|
;; -*- mode: emacs-lisp; lexical-binding: t -*-
|
|
(require 'cl-lib)
|
|
(require 'server)
|
|
(require 'dbus)
|
|
|
|
(defun cmdline-for-pid (pid)
|
|
"Return the command line arguments passed to PID.
|
|
PID can be a string or a number."
|
|
(butlast (string-split
|
|
(with-temp-buffer
|
|
(insert-file-contents-literally
|
|
(format "/proc/%s/cmdline" pid))
|
|
(buffer-substring-no-properties (point-min)
|
|
(point-max)))
|
|
"\0")))
|
|
(defun current-eww-config-dir ()
|
|
"Return the configuration directory for a currently running eww process."
|
|
;; This probably only works on Linux
|
|
(catch 'found
|
|
(dolist (subdir (directory-files "/proc"))
|
|
(when (string-match-p (rx bos (+ num) eos) subdir)
|
|
(ignore-error permission-denied
|
|
(let* ((attrs (file-attributes (format "/proc/%s/exe" subdir)))
|
|
(type (file-attribute-type attrs)))
|
|
(when (and (stringp type)
|
|
(string-match-p (rx (or bos "/") "eww") type))
|
|
(cl-maplist (lambda (tail)
|
|
(when (equal (car tail) "-c")
|
|
(throw 'found (cl-second tail))))
|
|
(cmdline-for-pid subdir)))))))))
|
|
|
|
(defun set-eww-fcitx-state (state)
|
|
"Set the Fcitx state for Eww to STATE."
|
|
(let ((args (list "update" (format "fcitx5-state=%s" state)))
|
|
(cfg-dir (current-eww-config-dir)))
|
|
(when cfg-dir
|
|
(setq args (nconc (list "-c" cfg-dir) args)))
|
|
(apply 'call-process "eww" nil 0 nil args)))
|
|
|
|
(cl-defun has-focused-window-p (&optional (server "server"))
|
|
"Return non-nil if SERVER has at least one focused window.
|
|
SERVER defaults to \"server\"."
|
|
(server-eval-at
|
|
server '(cl-some 'frame-focus-state (frame-list))))
|
|
|
|
(if (has-focused-window-p)
|
|
(server-eval-at "server" '(my/global-toggle-mozc))
|
|
(dbus-call-method :session "org.fcitx.Fcitx5" "/controller"
|
|
"org.fcitx.Fcitx.Controller1" "Toggle")
|
|
(let ((state (dbus-call-method :session "org.fcitx.Fcitx5" "/controller"
|
|
"org.fcitx.Fcitx.Controller1" "State")))
|
|
(set-eww-fcitx-state state)))
|
|
|
|
;; Local Variables:
|
|
;; flycheck-disabled-checkers: (emacs-lisp-checkdoc)
|
|
;; End:
|