用安卓 HTTP Shortcuts 分享文字到 Emacs

https://http-shortcuts.rmy.ch/ 这个安卓软件可以发送 HTTP 请求,利用它可以从手机分享文字到 Emacs,图片应该也行,但以前用过 web-server.el 发现它太慢了,图片几个 MB 也不行。


前提条件:手机要能访问 Emacs 服务器,比如一个局域网下,或者使用隧道把 Emacs 暴露在公网下。

设置方法:

  1. M-x send-to-emacs-start 启动服务器
  2. HTTP Shortcuts 配置 http://your-ip:8080/?message={message},大括号里是变量,定义成文字输入,可分享

使用的话:选中文字,点分享,一切正常的话,Emacs 就会插入文字。

(require 'web-server)

(defun send-to-emacs-handler (req)
  (pcase-let (((eieio process headers body) req))
    ;; (message "[DEBUG] HEADERS: %S" headers)
    ;; (message "[DEBUG] BODY: %S" body)
    (let ((code 200)
          (body "OK"))
      (if-let ((message (assoc-default "message" headers)))
          (insert
           (decode-coding-string message 'utf-8))
        (setq code 400
              body "Missing message argument"))
      (ws-response-header
       process code
       (cons "Content-Type" "text/plain; charset=utf-8")
       (cons "Content-Length" (string-bytes body)))
      (ws-send process body))))

(defvar send-to-emacs-server nil)

(defun send-to-emacs-stop ()
  (interactive)
  (when send-to-emacs-server
    (message "Close old server")
    (ws-stop send-to-emacs-server)
    (setq send-to-emacs-server nil)))

(defun send-to-emacs-start ()
  (interactive)
  (send-to-emacs-stop)
  (message "Start server")
  (setq send-to-emacs-server
        (ws-start #'send-to-emacs-handler 8080
                  nil :host "0.0.0.0")))
4 个赞

好东西啊。。。。有搞头