-;;; Help for lusers on cu(1) or terminals with wired-in ^S/^Q flow control
-;;;
+;;; flow-ctrl.el --- help for lusers on cu(1) or ttys with wired-in ^S/^Q flow control
+
;;; Copyright (C) 1990 Free Software Foundation, Inc.
;;; Copyright (C) 1991 Kevin Gallagher
-;;; Adapted for Emacs 19 by Eric S. Raymond <eric@snark.thyrsus.com>
+
+;; Author Kevin Gallagher
+;; Maintainer: FSF
+;; Adapted-By: ESR
+;; Keywords: hardware
+
+;;; This file is part of GNU Emacs.
;;;
;;; GNU Emacs is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY. No author or distributor accepts
;;; your rights and responsibilities. It should be in a file named
;;; COPYING. Among other things, the Copyright notice and this notice
;;; must be preserved on all copies.
-;;;
+
+;;; Commentary:
;;;; Terminals that use XON/XOFF flow control can cause problems with
-;;;; GNU Emacs users. This file contains elisp code that makes it
+;;;; GNU Emacs users. This file contains Emacs Lisp code that makes it
;;;; easy for a user to deal with this problem, when using such a
;;;; terminal.
;;;;
;;; Portability note: This uses (getenv "TERM"), and therefore probably
;;; won't work outside of UNIX-like environments.
+;;; Code:
+
(defun evade-flow-control ()
- "Replace C-s with C-\ and C-q with C-^ and tell emacs to pass C-s
-and C-q characters to OS."
+ "Enable use of flow control; let user type C-s as C-\ and C-q as C-^."
(interactive)
;; Tell emacs to pass C-s and C-q to OS.
- (set-input-mode nil t)
+ (set-input-mode nil t nil)
;; Initialize translate table, saving previous mappings, if any.
(let ((the-table (make-string 128 0)))
(let ((i 0)
": use C-\\ for C-s and use C-^ for C-q."))
(sleep-for 2)) ; Give user a chance to see message.
-(defun memstr= (e s)
+(defun evade-flow-control-memstr= (e s)
(cond ((null s) nil)
((string= e (car s)) t)
- (t (memstr= e (cdr s)))))
+ (t (evade-flow-control-memstr= e (cdr s)))))
;;;###autoload
(defun evade-flow-control-on (&rest losing-terminal-types)
+ "Enable flow control if using one of a specified set of terminal types.
+Use `(evade-flow-control-on \"vt100\" \"h19\")' to enable flow control
+on VT-100 and H19 terminals. When flow control is enabled,
+you must type C-\\ to get the effect of a C-s, and type C-^
+to get the effect of a C-q."
(let ((term (getenv "TERM"))
hyphend)
;; Strip off hyphen and what follows
(while (setq hyphend (string-match "[-_][^-_]+$" term))
(setq term (substring term 0 hyphend)))
- (and (memstr= term losing-terminal-types) (evade-flow-control)))
+ (and (evade-flow-control-memstr= term losing-terminal-types) (evade-flow-control)))
)
(provide 'flow-ctrl)
;;; flow-ctrl.el ends here
-