@@ 0,0 1,51 @@
+(require 'server)
+
+(server-eval-at "server" '(let
+ ((frame (make-frame-command))
+ (buffer (generate-new-buffer "*emacs-anywhere*")))
+
+ (defun my-emacs-anywhere-capture ()
+ "Open a buffer called *emacs-anywhere*, wait for user input, and return the buffer content when C-c C-c is pressed."
+ (interactive)
+ (let ((buffer-name "*emacs-anywhere*"))
+ (with-current-buffer (get-buffer-create buffer-name)
+ (erase-buffer)
+ (local-set-key (kbd "C-c C-c") 'my-emacs-anywhere-finish-capture)
+ (local-set-key (kbd "C-c C-k") 'my-emacs-anywhere-abort-capture)
+ (message "Type your input. Press C-c C-c to finish.")
+ (switch-to-buffer buffer-name))))
+
+
+ (defvar my-emacs-anywhere-content nil
+ "Variable to store the content captured from *emacs-anywhere* buffer.")
+
+ (defun my-emacs-anywhere-finish-capture ()
+ "Finish capturing input and return the content of the *emacs-anywhere* buffer."
+ (interactive)
+ (let ((content (buffer-string)))
+ (setq my-emacs-anywhere-content content)
+ (kill-buffer buffer)
+ (delete-frame frame)))
+
+ (defun my-emacs-anywhere-abort-capture ()
+ "Finish capturing input and return the content of the *emacs-anywhere* buffer."
+ (interactive)
+ (setq my-emacs-anywhere-content t)
+ (kill-buffer buffer)
+ (delete-frame frame))
+
+ (select-frame frame)
+ (switch-to-buffer buffer)
+ (erase-buffer)
+ (my-emacs-anywhere-capture)
+ (setq my-emacs-anywhere-content nil)
+ t))
+
+(while (let ((my-emacs-anywhere-content (server-eval-at "server" 'my-emacs-anywhere-content)))
+ (or (not my-emacs-anywhere-content)
+ (and
+ (with-temp-buffer
+ (insert my-emacs-anywhere-content)
+ (write-region (point-min) (point-max) "/dev/stdout"))
+ f)))
+ (sit-for 0.1))