Mercurial > emacs
annotate lisp/flow-ctrl.el @ 112119:48f5ac42611a
Reconcile with changes in line movement behavior for long text lines
that cross more than a single physical window line, ie when truncate-lines
is nil.
(allout-next-visible-heading): Provide for change in line-move behavior on
long lines when truncate-lines is nil. In that case, line-move can wind up
on the same textual line when it moves to the next window line, and moving
to the bullet position after the move yields zero advancement. Add logic
to detect and compensate for the lack of progress.
(allout-current-topic-collapsed-p): move-end-of-line respect for field
boundaries is different when operating with body lines shorter than window
width versus ones greater than window width, which can yield false
negatives in this function. Avoid difference by applying move-end-of-line
while field-text-motion is inhibited.
author | Ken Manheimer <ken.manheimer@gmail.com> |
---|---|
date | Tue, 04 Jan 2011 14:44:10 -0500 |
parents | 1d1d5d9bd884 |
children | 376148b31b5e |
rev | line source |
---|---|
793
6fb68a1460a6
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
792
diff
changeset
|
1 ;;; flow-ctrl.el --- help for lusers on cu(1) or ttys with wired-in ^S/^Q flow control |
6fb68a1460a6
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
792
diff
changeset
|
2 |
101098 | 3 ;; Copyright (C) 1990, 1991, 1994, 2001, 2002, 2003, 2004, 2005, 2006, |
106815 | 4 ;; 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
846
20674ae6bf52
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
844
diff
changeset
|
5 |
101098 | 6 ;; Author: Kevin Gallagher |
793
6fb68a1460a6
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
792
diff
changeset
|
7 ;; Maintainer: FSF |
6fb68a1460a6
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
792
diff
changeset
|
8 ;; Adapted-By: ESR |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
793
diff
changeset
|
9 ;; Keywords: hardware |
660
08eb386dd0f3
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
10 |
6736
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
5643
diff
changeset
|
11 ;; This file is part of GNU Emacs. |
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
5643
diff
changeset
|
12 |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
13 ;; GNU Emacs is free software: you can redistribute it and/or modify |
6736
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
5643
diff
changeset
|
14 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
15 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
16 ;; (at your option) any later version. |
6736
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
5643
diff
changeset
|
17 |
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
5643
diff
changeset
|
18 ;; GNU Emacs is distributed in the hope that it will be useful, |
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
5643
diff
changeset
|
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
5643
diff
changeset
|
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
5643
diff
changeset
|
21 ;; GNU General Public License for more details. |
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
5643
diff
changeset
|
22 |
3e1323443b1a
Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents:
5643
diff
changeset
|
23 ;; You should have received a copy of the GNU General Public License |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
793
6fb68a1460a6
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
792
diff
changeset
|
25 |
6fb68a1460a6
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
792
diff
changeset
|
26 ;;; Commentary: |
541 | 27 |
14169 | 28 ;; Terminals that use XON/XOFF flow control can cause problems with |
29 ;; GNU Emacs users. This file contains Emacs Lisp code that makes it | |
30 ;; easy for a user to deal with this problem, when using such a | |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
14314
diff
changeset
|
31 ;; terminal. |
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
14314
diff
changeset
|
32 ;; |
14169 | 33 ;; To invoke these adjustments, a user need only invoke the function |
34 ;; enable-flow-control-on with a list of terminal types in his/her own | |
35 ;; .emacs file. As arguments, give it the names of one or more terminal | |
36 ;; types in use by that user which require flow control adjustments. | |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
14314
diff
changeset
|
37 ;; Here's an example: |
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
14314
diff
changeset
|
38 ;; |
14169 | 39 ;; (enable-flow-control-on "vt200" "vt300" "vt101" "vt131") |
541 | 40 |
14169 | 41 ;; Portability note: This uses (getenv "TERM"), and therefore probably |
42 ;; won't work outside of UNIX-like environments. | |
541 | 43 |
793
6fb68a1460a6
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
792
diff
changeset
|
44 ;;; Code: |
6fb68a1460a6
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
792
diff
changeset
|
45 |
5506
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
46 (defvar flow-control-c-s-replacement ?\034 |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
47 "Character that replaces C-s, when flow control handling is enabled.") |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
48 (defvar flow-control-c-q-replacement ?\036 |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
49 "Character that replaces C-q, when flow control handling is enabled.") |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
50 |
13272
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
51 (put 'keyboard-translate-table 'char-table-extra-slots 0) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
52 |
1855
80c1064620a8
(enable-flow-control...): Renamed from evade...
Richard M. Stallman <rms@gnu.org>
parents:
1848
diff
changeset
|
53 ;;;###autoload |
5506
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
54 (defun enable-flow-control (&optional argument) |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
55 "Toggle flow control handling. |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
56 When handling is enabled, user can type C-s as C-\\, and C-q as C-^. |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
57 With arg, enable flow control mode if arg is positive, otherwise disable." |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
58 (interactive "P") |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
59 (if (if argument |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
60 ;; Argument means enable if arg is positive. |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
61 (<= (prefix-numeric-value argument) 0) |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
62 ;; No arg means toggle. |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
63 (nth 1 (current-input-mode))) |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
64 (progn |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
65 ;; Turn flow control off, and stop exchanging chars. |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
66 (set-input-mode t nil (nth 2 (current-input-mode))) |
7731
3cfe5791ddfb
(enable-flow-control): Fix bugs turning off flow ctrl.
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
67 (if keyboard-translate-table |
3cfe5791ddfb
(enable-flow-control): Fix bugs turning off flow ctrl.
Richard M. Stallman <rms@gnu.org>
parents:
7298
diff
changeset
|
68 (progn |
13272
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
69 (aset keyboard-translate-table flow-control-c-s-replacement nil) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
70 (aset keyboard-translate-table ?\^s nil) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
71 (aset keyboard-translate-table flow-control-c-q-replacement nil) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
72 (aset keyboard-translate-table ?\^q nil)))) |
5506
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
73 ;; Turn flow control on. |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
74 ;; Tell emacs to pass C-s and C-q to OS. |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
75 (set-input-mode nil t (nth 2 (current-input-mode))) |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
76 ;; Initialize translate table, saving previous mappings, if any. |
13272
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
77 (cond ((null keyboard-translate-table) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
78 (setq keyboard-translate-table |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
79 (make-char-table 'keyboard-translate-table nil))) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
80 ((char-table-p keyboard-translate-table) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
81 (setq keyboard-translate-table |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
82 (copy-sequence keyboard-translate-table))) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
83 (t |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
84 (let ((the-table (make-char-table 'keyboard-translate-table nil))) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
85 (let ((i 0) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
86 (j (length keyboard-translate-table))) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
87 (while (< i j) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
88 (aset the-table i (elt keyboard-translate-table i)) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
89 (setq i (1+ i)))) |
7ee88c335076
(enable-flow-control): Use a char-table.
Richard M. Stallman <rms@gnu.org>
parents:
9716
diff
changeset
|
90 (setq keyboard-translate-table the-table)))) |
5506
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
91 ;; Swap C-s and C-\ |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
92 (aset keyboard-translate-table flow-control-c-s-replacement ?\^s) |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
93 (aset keyboard-translate-table ?\^s flow-control-c-s-replacement) |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
94 ;; Swap C-q and C-^ |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
95 (aset keyboard-translate-table flow-control-c-q-replacement ?\^q) |
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
96 (aset keyboard-translate-table ?\^q flow-control-c-q-replacement) |
14314
b04d97d778f6
(enable-flow-control): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
97 (message "XON/XOFF adjustment for %s: use %s for C-s, and use %s for C-q" |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
14314
diff
changeset
|
98 (getenv "TERM") |
14314
b04d97d778f6
(enable-flow-control): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
99 (single-key-description flow-control-c-s-replacement) |
b04d97d778f6
(enable-flow-control): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents:
14169
diff
changeset
|
100 (single-key-description flow-control-c-q-replacement)) |
5506
9b694015caec
(enable-flow-control): Use prefix argument like minor modes.
Richard M. Stallman <rms@gnu.org>
parents:
3660
diff
changeset
|
101 (sleep-for 2))) ; Give user a chance to see message. |
541 | 102 |
103 ;;;###autoload | |
1855
80c1064620a8
(enable-flow-control...): Renamed from evade...
Richard M. Stallman <rms@gnu.org>
parents:
1848
diff
changeset
|
104 (defun enable-flow-control-on (&rest losing-terminal-types) |
669
4c64c671426f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
660
diff
changeset
|
105 "Enable flow control if using one of a specified set of terminal types. |
1855
80c1064620a8
(enable-flow-control...): Renamed from evade...
Richard M. Stallman <rms@gnu.org>
parents:
1848
diff
changeset
|
106 Use `(enable-flow-control-on \"vt100\" \"h19\")' to enable flow control |
669
4c64c671426f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
660
diff
changeset
|
107 on VT-100 and H19 terminals. When flow control is enabled, |
677
7a9b4ea68565
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
669
diff
changeset
|
108 you must type C-\\ to get the effect of a C-s, and type C-^ |
669
4c64c671426f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
660
diff
changeset
|
109 to get the effect of a C-q." |
541 | 110 (let ((term (getenv "TERM")) |
111 hyphend) | |
13796
116a22176b36
(enable-flow-control-on): Try the whole TERM name
Karl Heuer <kwzh@gnu.org>
parents:
13272
diff
changeset
|
112 ;; Look for TERM in LOSING-TERMINAL-TYPES. |
116a22176b36
(enable-flow-control-on): Try the whole TERM name
Karl Heuer <kwzh@gnu.org>
parents:
13272
diff
changeset
|
113 ;; If we don't find it literally, try stripping off words |
116a22176b36
(enable-flow-control-on): Try the whole TERM name
Karl Heuer <kwzh@gnu.org>
parents:
13272
diff
changeset
|
114 ;; from the end, one by one. |
116a22176b36
(enable-flow-control-on): Try the whole TERM name
Karl Heuer <kwzh@gnu.org>
parents:
13272
diff
changeset
|
115 (while (and term (not (member term losing-terminal-types))) |
116a22176b36
(enable-flow-control-on): Try the whole TERM name
Karl Heuer <kwzh@gnu.org>
parents:
13272
diff
changeset
|
116 ;; Strip off last hyphen and what follows, then try again. |
116a22176b36
(enable-flow-control-on): Try the whole TERM name
Karl Heuer <kwzh@gnu.org>
parents:
13272
diff
changeset
|
117 (if (setq hyphend (string-match "[-_][^-_]+$" term)) |
116a22176b36
(enable-flow-control-on): Try the whole TERM name
Karl Heuer <kwzh@gnu.org>
parents:
13272
diff
changeset
|
118 (setq term (substring term 0 hyphend)) |
116a22176b36
(enable-flow-control-on): Try the whole TERM name
Karl Heuer <kwzh@gnu.org>
parents:
13272
diff
changeset
|
119 (setq term nil))) |
5643
860d91d72063
(enable-flow-control-on): Do nothing if no TERM.
Richard M. Stallman <rms@gnu.org>
parents:
5506
diff
changeset
|
120 (if term |
13796
116a22176b36
(enable-flow-control-on): Try the whole TERM name
Karl Heuer <kwzh@gnu.org>
parents:
13272
diff
changeset
|
121 (enable-flow-control)))) |
541 | 122 |
123 (provide 'flow-ctrl) | |
124 | |
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
79721
diff
changeset
|
125 ;; arch-tag: 0eb7b19e-0d93-4e0b-9ea2-72b574076a56 |
660
08eb386dd0f3
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
584
diff
changeset
|
126 ;;; flow-ctrl.el ends here |