Emacs Lispで socketプログラミング

http://mattn.kaoriya.net/software/vim/20160129114716.htm

Emacsが socket使えることは知っていたが, 使ったことがなかったので書いてみました.

コード

(require 'json)

(let ((proc (open-network-stream "test" (get-buffer-create "*test*") "localhost" 8888)))
  (set-process-filter proc (lambda (proc output)
                             (let ((resp (json-read-from-string output)))
                              (message "ただ今: %s" (aref resp 1)))))
  (process-send-string proc (json-encode [1 "GET"]))
  (process-send-eof proc))

open-network-streamは processオブジェクトを返します. 後は start-processみたく扱ってやればよいようです. 非同期です. set-process-filterで callback関数を指定します. process-send-stringでサーバに sendします.

サーバプログラムは上記の記事に載っているものを使っています. 無駄な処理がいくらか含まれてしまっていますが...

結果

サーバを動かし, 上記の式を評価すると以下のようになります.

f:id:syohex:20160131120830g:plain