Mercurial > emacs
annotate lisp/flow-ctrl.el @ 660:08eb386dd0f3
*** empty log message ***
| author | Eric S. Raymond <esr@snark.thyrsus.com> |
|---|---|
| date | Sat, 30 May 1992 23:12:08 +0000 |
| parents | 4cd7543be581 |
| children | 4c64c671426f |
| rev | line source |
|---|---|
|
660
08eb386dd0f3
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
1 ;;; flow-ctrl.el --- help for lusers on cu(1) or terminals with wired-in ^S/^Q flow control |
|
08eb386dd0f3
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
2 |
| 541 | 3 ;;; Copyright (C) 1990 Free Software Foundation, Inc. |
| 4 ;;; Copyright (C) 1991 Kevin Gallagher | |
| 5 ;;; Adapted for Emacs 19 by Eric S. Raymond <eric@snark.thyrsus.com> | |
| 6 ;;; | |
| 7 ;;; GNU Emacs is distributed in the hope that it will be useful, but | |
| 8 ;;; WITHOUT ANY WARRANTY. No author or distributor accepts | |
| 9 ;;; RESPONSIBILITY TO anyone for the consequences of using it or for | |
| 10 ;;; whether it serves any particular purpose or works at all, unless | |
| 11 ;;; he says so in writing. Refer to the GNU Emacs General Public | |
| 12 ;;; License for full details. | |
| 13 ;;; | |
| 14 ;;; Everyone is granted permission to copy, modify and redistribute | |
| 15 ;;; GNU Emacs, but only under the conditions described in the GNU | |
| 16 ;;; Emacs General Public License. A copy of this license is supposed | |
| 17 ;;; to have been given to you along with GNU Emacs so you can know | |
| 18 ;;; your rights and responsibilities. It should be in a file named | |
| 19 ;;; COPYING. Among other things, the Copyright notice and this notice | |
| 20 ;;; must be preserved on all copies. | |
| 21 ;;; | |
| 22 | |
| 23 ;;;; Terminals that use XON/XOFF flow control can cause problems with | |
| 24 ;;;; GNU Emacs users. This file contains elisp code that makes it | |
| 25 ;;;; easy for a user to deal with this problem, when using such a | |
| 26 ;;;; terminal. | |
| 27 ;;;; | |
| 28 ;;;; To invoke these adjustments, a user need only invoke the function | |
| 29 ;;;; evade-flow-control-on with a list of terminal types in his/her own | |
| 30 ;;;; .emacs file. As arguments, give it the names of one or more terminal | |
| 31 ;;;; types in use by that user which require flow control adjustments. | |
| 32 ;;;; Here's an example: | |
| 33 ;;;; | |
| 34 ;;;; (evade-flow-control-on "vt200" "vt300" "vt101" "vt131") | |
| 35 | |
| 36 ;;; Portability note: This uses (getenv "TERM"), and therefore probably | |
| 37 ;;; won't work outside of UNIX-like environments. | |
| 38 | |
| 39 (defun evade-flow-control () | |
| 40 "Replace C-s with C-\ and C-q with C-^ and tell emacs to pass C-s | |
| 41 and C-q characters to OS." | |
| 42 (interactive) | |
| 43 ;; Tell emacs to pass C-s and C-q to OS. | |
| 44 (set-input-mode nil t) | |
| 45 ;; Initialize translate table, saving previous mappings, if any. | |
| 46 (let ((the-table (make-string 128 0))) | |
| 47 (let ((i 0) | |
| 48 (j (length keyboard-translate-table))) | |
| 49 (while (< i j) | |
| 50 (aset the-table i (elt keyboard-translate-table i)) | |
| 51 (setq i (1+ i))) | |
| 52 (while (< i 128) | |
| 53 (aset the-table i i) | |
| 54 (setq i (1+ i)))) | |
| 55 (setq keyboard-translate-table the-table)) | |
| 56 ;; Swap C-s and C-\ | |
| 57 (aset keyboard-translate-table ?\034 ?\^s) | |
| 58 (aset keyboard-translate-table ?\^s ?\034) | |
| 59 ;; Swap C-q and C-^ | |
| 60 (aset keyboard-translate-table ?\036 ?\^q) | |
| 61 (aset keyboard-translate-table ?\^q ?\036) | |
| 62 (message (concat | |
| 63 "XON/XOFF adjustment for " | |
| 64 (getenv "TERM") | |
| 65 ": use C-\\ for C-s and use C-^ for C-q.")) | |
| 66 (sleep-for 2)) ; Give user a chance to see message. | |
| 67 | |
| 68 (defun memstr= (e s) | |
| 69 (cond ((null s) nil) | |
| 70 ((string= e (car s)) t) | |
| 71 (t (memstr= e (cdr s))))) | |
| 72 | |
| 73 ;;;###autoload | |
| 74 (defun evade-flow-control-on (&rest losing-terminal-types) | |
| 75 (let ((term (getenv "TERM")) | |
| 76 hyphend) | |
| 77 ;; Strip off hyphen and what follows | |
| 78 (while (setq hyphend (string-match "[-_][^-_]+$" term)) | |
| 79 (setq term (substring term 0 hyphend))) | |
| 80 (and (memstr= term losing-terminal-types) (evade-flow-control))) | |
| 81 ) | |
| 82 | |
| 83 (provide 'flow-ctrl) | |
| 84 | |
|
660
08eb386dd0f3
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
85 ;;; flow-ctrl.el ends here |
