dotfiles/sbcl/.quicklisp/dists/quicklisp/software/croatoan-20191227-git/src/inopts.lisp
2020-02-18 14:21:14 -05:00

82 lines
2.7 KiB
Common Lisp

(in-package :de.anvi.croatoan)
;; nodelay FALSE = getch blocking
;; nodelay TRUE = getch non-blocking.
;; halfdelay 5 = waits for 5/10 seconds.
;; halfdelay is turned off by nocbreak.
;; terminal input modes:
;;
;; canonical non canonical
;; line buffered character based
;; ctrl chars processed ^C,^S,^Q,^D processed no ctrl chars processed
;; cooked cbreak raw
;;
;; buffering t nil nil
;; control t t nil
;; | cooked | cbreak | raw
;; ----------+--------+--------+-----
;; buffering | t | nil | nil
;; ----------+--------+--------+-----
;; control | t | t | nil
;; The combination echo+getch should not be used during buffered input
(defun set-input-mode (input-buffering process-control-chars)
(if input-buffering
;; to turn on buffering, turn off cbreak or raw
(if process-control-chars (%nocbreak) (%noraw))
;; to turn off buffering, turn on cbreak or raw
(if process-control-chars (%cbreak) (%raw))))
;; Ported to clos, used in clos.
(defun set-input-blocking (window status)
"Set window input blocking behavior.
Possible values are t, nil and a blocking duration in (positive integer) miliseconds."
(cond ((eq status t) (%wtimeout window -1))
((eq status nil) (%wtimeout window 0))
((and (typep status 'integer) (plusp status))
(%wtimeout window status))
(t (error "possible blocking states: t, nil, delay in miliseconds"))))
;; Not used in clos because too simple. obsolete.
(defun set-input-echoing (flag)
"Set whether chars will be echoed on input."
(if flag
(%echo)
(%noecho)))
;; Not used in clos because too simple. obsolete.
(defun set-enable-fkeys (window flag)
"If flag is t, bind function keys to known codes when returned by get-char.
If flag is nil, F keys will be system-dependent multi-character escape codes."
(%keypad (winptr window) flag))
;; Obscure functions I never used before:
(defun flush-on-interrupt (window flag)
(%intrflush window flag))
(defun enable-8bit-char-input (window flag)
(%meta window flag))
(defun io-queue-flush (flag)
(if flag
(%qiflush)
(%noqiflush)))
;; if it would work at all, which it doesnt,
;; it would work only for (function-keys win t)
(defun escape-sequence-delay (window flag)
(%notimeout window flag))
(defun type-ahead-fd (fd)
(%typeahead fd))
;;; TODOs
;; [X] do not mix cbreak and raw. use either the one or the other.
;; [ ] for now, we consider only global optins. work in a window parameter as well.