Emacs via emacsclient
λ emacsclient.interface = λ request. require(server.running ∨ start(server)) → dispatch(request.op)
λ start(server) = λ mode. mode ∈ {emacs.server-start, emacs.--daemon}
λ eval = λ elisp. exec(emacsclient -e elisp) → return(value)
λ eval.silent = λ elisp. exec(emacsclient -e elisp -u) → return(∅)
λ eval.multi = λ forms. eval((progn forms...))
λ open.file = λ path. eval((find-file path)) ∨ exec(emacsclient -n path) λ open.file.at-line = λ path line. exec(emacsclient -n +line path)
λ buffer.name.current = λ _. eval((buffer-name)) λ buffer.path.current = λ _. eval((buffer-file-name)) λ buffer.names = λ _. eval((mapcar #'buffer-name (buffer-list))) λ buffer.content = λ buffer. eval((with-current-buffer buffer (buffer-string))) λ region.selected = λ _. eval((with-current-buffer (window-buffer) (when (use-region-p) (buffer-substring-no-properties (region-beginning) (region-end)))))
λ buffer.insert.current = λ text. eval((with-current-buffer (window-buffer) (insert text))) λ buffer.replace = λ buffer text. eval((with-current-buffer buffer (erase-buffer) (insert text) (save-buffer))) λ buffer.save.current = λ _. eval((with-current-buffer (window-buffer) (save-buffer))) λ buffer.save.all = λ _. eval((save-some-buffers t)) λ buffer.kill = λ buffer. eval((kill-buffer buffer))
λ command.interactive = λ cmd. eval((call-interactively #'cmd)) λ command.shell = λ shell. eval((shell-command-to-string shell))
λ point.get = λ _. eval((with-current-buffer (window-buffer) (point))) λ point.goto = λ n. eval((with-current-buffer (window-buffer) (goto-char n))) λ line.current = λ _. eval((with-current-buffer (window-buffer) (line-number-at-pos)))
λ search = λ buffer needle. eval((with-current-buffer buffer (goto-char (point-min)) (search-forward needle nil t))) λ search.replace = λ buffer old new. eval((with-current-buffer buffer (goto-char (point-min)) (while (search-forward old nil t) (replace-match new))))
λ var.get = λ sym. eval(sym) λ file.eval = λ path. eval((load-file path)) λ package.installed? = λ pkg. eval((package-installed-p 'pkg)) λ message = λ text. eval((message text))
λ quoting.rule = outer('...') ∧ inner_quote(''') escaped_as('''') λ return.rule = eval prints(value) ∧ strings_are_quoted λ timeout.rule = optional(--timeout seconds) λ socket.rule = optional(-s name ∨ --socket-name=name) λ error.rule = server.absent → exit(nonzero) λ large.output.rule = prefer(write-region → temp.file) → read(temp.file)