Skip to content

xenodium/shell-maker

Repository files navigation

shell-maker

shell-maker is a convenience wrapper around comint mode.

For related packages, see:

A basic shell implementation looks as follows:

(require 'map)
(require 'shell-maker)

(defvar greeter-shell--config
  (make-shell-maker-config
   :name "Greeter"
   :execute-command
   (lambda (command shell)
     (funcall (map-elt shell :write-output)
              (format "Hello \"%s\"." command))
     (funcall (map-elt shell :finish-output) t))))

(shell-maker-define-major-mode greeter-shell--config)

(defun greeter-shell ()
  "Start a Greeter shell."
  (interactive)
  (shell-maker-start greeter-shell--config))

Image

Invoke shell’s :write-output as many times as needed to stream responses.

(require 'map)
(require 'shell-maker)

(defvar greeter-shell--config
  (make-shell-maker-config
   :name "Greeter"
   :execute-command
   (lambda (command shell)
     (mapc (lambda (char)
             (sit-for 0.008)
             (funcall (map-elt shell :write-output)
                      (format "%c" char)))
           (format "Hello \"%s\". Nice to see you again!

It's been %d days since I last saw you."
                   command (random 30)))
     (funcall (map-elt shell :finish-output) t))))

(shell-maker-define-major-mode greeter-shell--config)

(defun greeter-shell ()
  "Start a Greeter shell."
  (interactive)
  (shell-maker-start greeter-shell--config))

Image

Support my work

👉 Find my work useful? Support this work via GitHub Sponsors or buy my iOS apps.

My other utilities, packages, apps, writing…

About

Create Emacs shells backed by either local or cloud services.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors