annotate src/term.c @ 91229:e2f99a24f1e6

(handle_auto_composed_prop): Use Fget_text_property instead of get_property_and_range.
author Kenichi Handa <handa@m17n.org>
date Thu, 13 Dec 2007 01:32:44 +0000
parents 53108e6cea98
children 606f2d163a64
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
1 /* Terminal control module for terminals described by TERMCAP
64770
a0d1312ede66 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64084
diff changeset
2 Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1998, 2000, 2001,
75348
3d45362f1d38 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 73864
diff changeset
3 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
78260
922696f363b0 Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 76627
diff changeset
9 the Free Software Foundation; either version 3, or (at your option)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
64084
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63880
diff changeset
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63880
diff changeset
20 Boston, MA 02110-1301, USA. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
22 /* New redisplay, TTY faces by Gerd Moellmann <gerd@gnu.org>. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23
7900
60795e826dad Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents: 7649
diff changeset
24 #include <config.h>
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include <stdio.h>
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 #include <ctype.h>
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
27 #include <string.h>
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
28 #include <errno.h>
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
29 #include <sys/file.h>
83644
0ece58f6e0aa Merge from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83635 81817
diff changeset
30
81817
e6ed0991129c Include unistd.h only if HAVE_UNISTD_H.
Richard M. Stallman <rms@gnu.org>
parents: 81811
diff changeset
31 #ifdef HAVE_UNISTD_H
81811
c10410a3aa36 Include unistd.h for ttyname, used in handle_one_term_event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81308
diff changeset
32 #include <unistd.h>
81817
e6ed0991129c Include unistd.h only if HAVE_UNISTD_H.
Richard M. Stallman <rms@gnu.org>
parents: 81811
diff changeset
33 #endif
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39914
diff changeset
34
83095
b448166f5664 Fix #include errors for FreeBSD (Frank Ruell)
Karoly Lorentey <lorentey@elte.hu>
parents: 83086
diff changeset
35 #if HAVE_TERMIOS_H
b448166f5664 Fix #include errors for FreeBSD (Frank Ruell)
Karoly Lorentey <lorentey@elte.hu>
parents: 83086
diff changeset
36 #include <termios.h> /* For TIOCNOTTY. */
b448166f5664 Fix #include errors for FreeBSD (Frank Ruell)
Karoly Lorentey <lorentey@elte.hu>
parents: 83086
diff changeset
37 #endif
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
38
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
39 #include <signal.h>
86288
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
40 #include <stdarg.h>
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
41
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 53227
diff changeset
42 #include "lisp.h"
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 #include "termchar.h"
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 #include "termopts.h"
88391
1953d0d56cd7 Include "buffer.h" and "character.h".
Kenichi Handa <handa@m17n.org>
parents: 43073
diff changeset
45 #include "buffer.h"
1953d0d56cd7 Include "buffer.h" and "character.h".
Kenichi Handa <handa@m17n.org>
parents: 43073
diff changeset
46 #include "character.h"
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
47 #include "charset.h"
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
48 #include "coding.h"
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
49 #include "composite.h"
31102
6a0caa788013 Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents: 30848
diff changeset
50 #include "keyboard.h"
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
51 #include "frame.h"
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 #include "disptab.h"
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 #include "termhooks.h"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
54 #include "dispextern.h"
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
55 #include "window.h"
39697
0b986bb45526 Include keymap.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
56 #include "keymap.h"
76627
c53e7d075f1a Include blockinput.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 75348
diff changeset
57 #include "blockinput.h"
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
58 #include "syssignal.h"
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
59 #include "systty.h"
81308
16181a4d64bf Include intervals.h to declare Fget_text_property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81127
diff changeset
60 #include "intervals.h"
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
61
33672
a94852aef620 Don't try to include termcap.h; see comment there.
Gerd Moellmann <gerd@gnu.org>
parents: 33006
diff changeset
62 /* For now, don't try to include termcap.h. On some systems,
a94852aef620 Don't try to include termcap.h; see comment there.
Gerd Moellmann <gerd@gnu.org>
parents: 33006
diff changeset
63 configure finds a non-standard termcap.h that the main build
a94852aef620 Don't try to include termcap.h; see comment there.
Gerd Moellmann <gerd@gnu.org>
parents: 33006
diff changeset
64 won't find. */
a94852aef620 Don't try to include termcap.h; see comment there.
Gerd Moellmann <gerd@gnu.org>
parents: 33006
diff changeset
65
a94852aef620 Don't try to include termcap.h; see comment there.
Gerd Moellmann <gerd@gnu.org>
parents: 33006
diff changeset
66 #if defined HAVE_TERMCAP_H && 0
25727
46fe79182b54 (OUTPUT_IF, OUTPUT1_IF): Use do-while.
Gerd Moellmann <gerd@gnu.org>
parents: 25675
diff changeset
67 #include <termcap.h>
29929
bb7557f86f5b [!HAVE_TERMCAP_H]: Declare tputs, tgetent, tgetflag, tgetnum.
Dave Love <fx@gnu.org>
parents: 29462
diff changeset
68 #else
bb7557f86f5b [!HAVE_TERMCAP_H]: Declare tputs, tgetent, tgetflag, tgetnum.
Dave Love <fx@gnu.org>
parents: 29462
diff changeset
69 extern void tputs P_ ((const char *, int, int (*)(int)));
bb7557f86f5b [!HAVE_TERMCAP_H]: Declare tputs, tgetent, tgetflag, tgetnum.
Dave Love <fx@gnu.org>
parents: 29462
diff changeset
70 extern int tgetent P_ ((char *, const char *));
bb7557f86f5b [!HAVE_TERMCAP_H]: Declare tputs, tgetent, tgetflag, tgetnum.
Dave Love <fx@gnu.org>
parents: 29462
diff changeset
71 extern int tgetflag P_ ((char *id));
bb7557f86f5b [!HAVE_TERMCAP_H]: Declare tputs, tgetent, tgetflag, tgetnum.
Dave Love <fx@gnu.org>
parents: 29462
diff changeset
72 extern int tgetnum P_ ((char *id));
25727
46fe79182b54 (OUTPUT_IF, OUTPUT1_IF): Use do-while.
Gerd Moellmann <gerd@gnu.org>
parents: 25675
diff changeset
73 #endif
46fe79182b54 (OUTPUT_IF, OUTPUT1_IF): Use do-while.
Gerd Moellmann <gerd@gnu.org>
parents: 25675
diff changeset
74
21827
87c7f4bd99da Include cm.h after dispextern.h to avoid name conflicts
Geoff Voelker <voelker@cs.washington.edu>
parents: 21624
diff changeset
75 #include "cm.h"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
76 #ifdef HAVE_X_WINDOWS
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
77 #include "xterm.h"
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
78 #endif
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents: 44372
diff changeset
79 #ifdef MAC_OS
32752
923b8d6d8277 Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents: 31829
diff changeset
80 #include "macterm.h"
923b8d6d8277 Initial check-in: changes for building Emacs under Mac OS.
Andrew Choi <akochoi@shaw.ca>
parents: 31829
diff changeset
81 #endif
8898
07bca49c7f84 Declare Fmake_sparse_keymap.
Karl Heuer <kwzh@gnu.org>
parents: 8806
diff changeset
82
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
83 #ifndef O_RDWR
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
84 #define O_RDWR 2
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
85 #endif
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
86
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
87 #ifndef O_NOCTTY
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
88 #define O_NOCTTY 0
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
89 #endif
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
90
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
91 /* The name of the default console device. */
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
92 #ifdef WINDOWSNT
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
93 #define DEV_TTY "CONOUT$"
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
94 #else
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
95 #define DEV_TTY "/dev/tty"
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
96 #endif
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
97
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
98 static void tty_set_scroll_region P_ ((struct frame *f, int start, int stop));
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
99 static void turn_on_face P_ ((struct frame *, int face_id));
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
100 static void turn_off_face P_ ((struct frame *, int face_id));
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
101 static void tty_show_cursor P_ ((struct tty_display_info *));
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
102 static void tty_hide_cursor P_ ((struct tty_display_info *));
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
103 static void tty_background_highlight P_ ((struct tty_display_info *tty));
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
104 static void clear_tty_hooks P_ ((struct terminal *terminal));
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
105 static void set_tty_hooks P_ ((struct terminal *terminal));
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
106 static void dissociate_if_controlling_tty P_ ((int fd));
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
107 static void delete_tty P_ ((struct terminal *));
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
108
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
109 #define OUTPUT(tty, a) \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
110 emacs_tputs ((tty), a, \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
111 (int) (FRAME_LINES (XFRAME (selected_frame)) \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
112 - curY (tty)), \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
113 cmputc)
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
114
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
115 #define OUTPUT1(tty, a) emacs_tputs ((tty), a, 1, cmputc)
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
116 #define OUTPUTL(tty, a, lines) emacs_tputs ((tty), a, lines, cmputc)
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
117
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
118 #define OUTPUT_IF(tty, a) \
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
119 do { \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
120 if (a) \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
121 emacs_tputs ((tty), a, \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
122 (int) (FRAME_LINES (XFRAME (selected_frame)) \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
123 - curY (tty) ), \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
124 cmputc); \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
125 } while (0)
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
126
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
127 #define OUTPUT1_IF(tty, a) do { if (a) emacs_tputs ((tty), a, 1, cmputc); } while (0)
15974
61249a8fe735 (Vring_bell_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15094
diff changeset
128
67935
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
129 /* If true, use "vs", otherwise use "ve" to make the cursor visible. */
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
130
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
131 static int visible_cursor;
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
132
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
133 /* Display space properties */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
134
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
135 extern Lisp_Object Qspace, QCalign_to, QCwidth;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
136
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
137 /* Functions to call after suspending a tty. */
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
138 Lisp_Object Vsuspend_tty_functions;
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
139
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
140 /* Functions to call after resuming a tty. */
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
141 Lisp_Object Vresume_tty_functions;
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
142
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
143 /* Chain of all tty device parameters. */
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
144 struct tty_display_info *tty_list;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
146 /* Nonzero means no need to redraw the entire frame on resuming a
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
147 suspended Emacs. This is useful on terminals with multiple
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
148 pages, where one page is used for Emacs and another for all
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
149 else. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 int no_redraw_on_reenter;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
152 /* Meaning of bits in no_color_video. Each bit set means that the
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
153 corresponding attribute cannot be combined with colors. */
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
154
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
155 enum no_color_bit
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
156 {
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
157 NC_STANDOUT = 1 << 0,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
158 NC_UNDERLINE = 1 << 1,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
159 NC_REVERSE = 1 << 2,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
160 NC_BLINK = 1 << 3,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
161 NC_DIM = 1 << 4,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
162 NC_BOLD = 1 << 5,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
163 NC_INVIS = 1 << 6,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
164 NC_PROTECT = 1 << 7,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
165 NC_ALT_CHARSET = 1 << 8
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
166 };
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
167
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 /* internal state */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169
10771
d564078d10c6 (calculate_costs): Update max_frame_height, max_frame_width.
Richard M. Stallman <rms@gnu.org>
parents: 10481
diff changeset
170 /* The largest frame width in any call to calculate_costs. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
171
51212
332134065648 Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50227
diff changeset
172 int max_frame_cols;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
173
10771
d564078d10c6 (calculate_costs): Update max_frame_height, max_frame_width.
Richard M. Stallman <rms@gnu.org>
parents: 10481
diff changeset
174 /* The largest frame height in any call to calculate_costs. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
175
51212
332134065648 Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50227
diff changeset
176 int max_frame_lines;
10771
d564078d10c6 (calculate_costs): Update max_frame_height, max_frame_width.
Richard M. Stallman <rms@gnu.org>
parents: 10481
diff changeset
177
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
178 /* Non-zero if we have dropped our controlling tty and therefore
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
179 should not open a frame on stdout. */
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
180 static int no_controlling_tty;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
182 /* Provided for lisp packages. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
183
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
184 static int system_uses_terminfo;
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
185
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 char *tparam ();
8612
86065bec6fc9 (term_init): Added missing argument to tgetstr.
Richard M. Stallman <rms@gnu.org>
parents: 8027
diff changeset
187
86065bec6fc9 (term_init): Added missing argument to tgetstr.
Richard M. Stallman <rms@gnu.org>
parents: 8027
diff changeset
188 extern char *tgetstr ();
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
190
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
191 #ifdef HAVE_GPM
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
192 #include <sys/fcntl.h>
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
193
84981
a35153116cd0 (term_clear_mouse_face, term_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84969
diff changeset
194 static void term_clear_mouse_face ();
a35153116cd0 (term_clear_mouse_face, term_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84969
diff changeset
195 static void term_mouse_highlight (struct frame *f, int x, int y);
a35153116cd0 (term_clear_mouse_face, term_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84969
diff changeset
196
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
197 /* The device for which we have enabled gpm support (or NULL). */
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
198 struct tty_display_info *gpm_tty = NULL;
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
199
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
200 /* These variables describe the range of text currently shown in its
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
201 mouse-face, together with the window they apply to. As long as
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
202 the mouse stays within this range, we need not redraw anything on
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
203 its account. Rows and columns are glyph matrix positions in
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
204 MOUSE_FACE_WINDOW. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
205 static int mouse_face_beg_row, mouse_face_beg_col;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
206 static int mouse_face_end_row, mouse_face_end_col;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
207 static int mouse_face_past_end;
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
208 static Lisp_Object mouse_face_window;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
209 static int mouse_face_face_id;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
210
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
211 static int pos_x, pos_y;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
212 static int last_mouse_x, last_mouse_y;
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
213 #endif /* HAVE_GPM */
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
214
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
215 /* Ring the bell on a tty. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
216
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
217 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
218 tty_ring_bell (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
220 struct tty_display_info *tty = FRAME_TTY (f);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
221
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
222 if (tty->output)
15974
61249a8fe735 (Vring_bell_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15094
diff changeset
223 {
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
224 OUTPUT (tty, (tty->TS_visible_bell && visible_bell
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
225 ? tty->TS_visible_bell
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
226 : tty->TS_bell));
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
227 fflush (tty->output);
15974
61249a8fe735 (Vring_bell_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15094
diff changeset
228 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
231 /* Set up termcap modes for Emacs. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
232
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
233 void
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
234 tty_set_terminal_modes (struct terminal *terminal)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
236 struct tty_display_info *tty = terminal->display_info.tty;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
237
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
238 if (tty->output)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 {
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
240 if (tty->TS_termcap_modes)
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
241 OUTPUT (tty, tty->TS_termcap_modes);
64773
aebbf7125281 (set_terminal_modes): If no TS_termcap_modes string,
Richard M. Stallman <rms@gnu.org>
parents: 64770
diff changeset
242 else
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
243 {
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
244 /* Output enough newlines to scroll all the old screen contents
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
245 off the screen, so it won't be overwritten and lost. */
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
246 int i;
83382
7a3090aca393 Fix hardcoded stdout usage in term.c. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83370
diff changeset
247 current_tty = tty;
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
248 for (i = 0; i < FRAME_LINES (XFRAME (selected_frame)); i++)
83382
7a3090aca393 Fix hardcoded stdout usage in term.c. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83370
diff changeset
249 cmputc ('\n');
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
250 }
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
251
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
252 OUTPUT_IF (tty, tty->TS_termcap_modes);
83450
c69d44922688 Merged from miles@gnu.org--gnu-2005 (patch 682)
Karoly Lorentey <lorentey@elte.hu>
parents: 83431 67935
diff changeset
253 OUTPUT_IF (tty, visible_cursor ? tty->TS_cursor_visible : tty->TS_cursor_normal);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
254 OUTPUT_IF (tty, tty->TS_keypad_mode);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
255 losecursor (tty);
83330
233c9974025b Fix the original cause of the "arrow keys don't work on screen" bug.
Karoly Lorentey <lorentey@elte.hu>
parents: 83323
diff changeset
256 fflush (tty->output);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
260 /* Reset termcap modes before exiting Emacs. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
261
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
262 void
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
263 tty_reset_terminal_modes (struct terminal *terminal)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
265 struct tty_display_info *tty = terminal->display_info.tty;
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
266
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
267 if (tty->output)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
269 tty_turn_off_highlight (tty);
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
270 tty_turn_off_insert (tty);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
271 OUTPUT_IF (tty, tty->TS_end_keypad_mode);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
272 OUTPUT_IF (tty, tty->TS_cursor_normal);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
273 OUTPUT_IF (tty, tty->TS_end_termcap_modes);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
274 OUTPUT_IF (tty, tty->TS_orig_pair);
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
275 /* Output raw CR so kernel can track the cursor hpos. */
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
276 current_tty = tty;
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
277 cmputc ('\r');
83330
233c9974025b Fix the original cause of the "arrow keys don't work on screen" bug.
Karoly Lorentey <lorentey@elte.hu>
parents: 83323
diff changeset
278 fflush (tty->output);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
282 /* Flag the end of a display update on a termcap terminal. */
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
283
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
284 static void
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
285 tty_update_end (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
287 struct tty_display_info *tty = FRAME_TTY (f);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
288
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
289 if (!XWINDOW (selected_window)->cursor_off_p)
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
290 tty_show_cursor (tty);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
291 tty_turn_off_insert (tty);
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
292 tty_background_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
295 /* The implementation of set_terminal_window for termcap frames. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
296
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
297 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
298 tty_set_terminal_window (struct frame *f, int size)
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
299 {
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
300 struct tty_display_info *tty = FRAME_TTY (f);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
301
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
302 tty->specified_window = size ? size : FRAME_LINES (f);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
303 if (FRAME_SCROLL_REGION_OK (f))
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
304 tty_set_scroll_region (f, 0, tty->specified_window);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
307 static void
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
308 tty_set_scroll_region (struct frame *f, int start, int stop)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 char *buf;
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
311 struct tty_display_info *tty = FRAME_TTY (f);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
312
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
313 if (tty->TS_set_scroll_region)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
314 buf = tparam (tty->TS_set_scroll_region, 0, 0, start, stop - 1);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
315 else if (tty->TS_set_scroll_region_1)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
316 buf = tparam (tty->TS_set_scroll_region_1, 0, 0,
53227
1595c5e1e9bb Updating_frame vs. selected_frame in term.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 53226
diff changeset
317 FRAME_LINES (f), start,
1595c5e1e9bb Updating_frame vs. selected_frame in term.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 53226
diff changeset
318 FRAME_LINES (f) - stop,
1595c5e1e9bb Updating_frame vs. selected_frame in term.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 53226
diff changeset
319 FRAME_LINES (f));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 else
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
321 buf = tparam (tty->TS_set_window, 0, 0, start, 0, stop, FRAME_COLS (f));
53227
1595c5e1e9bb Updating_frame vs. selected_frame in term.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 53226
diff changeset
322
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
323 OUTPUT (tty, buf);
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2243
diff changeset
324 xfree (buf);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
325 losecursor (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 }
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
327
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
329 static void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
330 tty_turn_on_insert (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
332 if (!tty->insert_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
333 OUTPUT (tty, tty->TS_insert_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
334 tty->insert_mode = 1;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
337 void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
338 tty_turn_off_insert (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
340 if (tty->insert_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
341 OUTPUT (tty, tty->TS_end_insert_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
342 tty->insert_mode = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
345 /* Handle highlighting. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
347 void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
348 tty_turn_off_highlight (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
350 if (tty->standout_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
351 OUTPUT_IF (tty, tty->TS_end_standout_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
352 tty->standout_mode = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
355 static void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
356 tty_turn_on_highlight (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
358 if (!tty->standout_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
359 OUTPUT_IF (tty, tty->TS_standout_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
360 tty->standout_mode = 1;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
363 static void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
364 tty_toggle_highlight (struct tty_display_info *tty)
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
365 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
366 if (tty->standout_mode)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
367 tty_turn_off_highlight (tty);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
368 else
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
369 tty_turn_on_highlight (tty);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
370 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
371
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
372
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
373 /* Make cursor invisible. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
374
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
375 static void
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
376 tty_hide_cursor (struct tty_display_info *tty)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
377 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
378 if (tty->cursor_hidden == 0)
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
379 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
380 tty->cursor_hidden = 1;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
381 OUTPUT_IF (tty, tty->TS_cursor_invisible);
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
382 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
383 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
384
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
385
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
386 /* Ensure that cursor is visible. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
387
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
388 static void
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
389 tty_show_cursor (struct tty_display_info *tty)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
390 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
391 if (tty->cursor_hidden)
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
392 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
393 tty->cursor_hidden = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
394 OUTPUT_IF (tty, tty->TS_cursor_normal);
67935
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
395 if (visible_cursor)
83450
c69d44922688 Merged from miles@gnu.org--gnu-2005 (patch 682)
Karoly Lorentey <lorentey@elte.hu>
parents: 83431 67935
diff changeset
396 OUTPUT_IF (tty, tty->TS_cursor_visible);
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
397 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
398 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
399
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
400
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401 /* Set standout mode to the state it should be in for
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 empty space inside windows. What this is,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 depends on the user option inverse-video. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
405 static void
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
406 tty_background_highlight (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 if (inverse_video)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
409 tty_turn_on_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 else
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
411 tty_turn_off_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 /* Set standout mode to the mode specified for the text to be output. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
416 static void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
417 tty_highlight_if_desired (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 {
40081
07d7dbf18784 (reassert_line_highlight_hook, change_line_highlight_hook): Variables removed.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
419 if (inverse_video)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
420 tty_turn_on_highlight (tty);
40081
07d7dbf18784 (reassert_line_highlight_hook, change_line_highlight_hook): Variables removed.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
421 else
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
422 tty_turn_off_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
426 /* Move cursor to row/column position VPOS/HPOS. HPOS/VPOS are
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
427 frame-relative coordinates. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
429 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
430 tty_cursor_to (struct frame *f, int vpos, int hpos)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
432 struct tty_display_info *tty = FRAME_TTY (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433
12071
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
434 /* Detect the case where we are called from reset_sys_modes
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
435 and the costs have never been calculated. Do nothing. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
436 if (! tty->costs_set)
12071
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
437 return;
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
438
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
439 if (curY (tty) == vpos
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
440 && curX (tty) == hpos)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 return;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
442 if (!tty->TF_standout_motion)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
443 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
444 if (!tty->TF_insmode_motion)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
445 tty_turn_off_insert (tty);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
446 cmgoto (tty, vpos, hpos);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 /* Similar but don't take any account of the wasted characters. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
451 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
452 tty_raw_cursor_to (struct frame *f, int row, int col)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
454 struct tty_display_info *tty = FRAME_TTY (f);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
455
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
456 if (curY (tty) == row
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
457 && curX (tty) == col)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 return;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
459 if (!tty->TF_standout_motion)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
460 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
461 if (!tty->TF_insmode_motion)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
462 tty_turn_off_insert (tty);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
463 cmgoto (tty, row, col);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 /* Erase operations */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
468 /* Clear from cursor to end of frame on a termcap device. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
469
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
470 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
471 tty_clear_to_end (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 register int i;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
474 struct tty_display_info *tty = FRAME_TTY (f);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
475
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
476 if (tty->TS_clr_to_bottom)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
478 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
479 OUTPUT (tty, tty->TS_clr_to_bottom);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 {
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
483 for (i = curY (tty); i < FRAME_LINES (f); i++)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 {
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
485 cursor_to (f, i, 0);
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
486 clear_end_of_line (f, FRAME_COLS (f));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
491 /* Clear an entire termcap frame. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
492
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
493 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
494 tty_clear_frame (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
496 struct tty_display_info *tty = FRAME_TTY (f);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
497
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
498 if (tty->TS_clr_frame)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
500 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
501 OUTPUT (tty, tty->TS_clr_frame);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
502 cmat (tty, 0, 0);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 {
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
506 cursor_to (f, 0, 0);
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
507 clear_to_end (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
511 /* An implementation of clear_end_of_line for termcap frames.
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 Note that the cursor may be moved, on terminals lacking a `ce' string. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
515 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
516 tty_clear_end_of_line (struct frame *f, int first_unused_hpos)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 register int i;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
519 struct tty_display_info *tty = FRAME_TTY (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520
12071
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
521 /* Detect the case where we are called from reset_sys_modes
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
522 and the costs have never been calculated. Do nothing. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
523 if (! tty->costs_set)
12071
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
524 return;
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
525
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
526 if (curX (tty) >= first_unused_hpos)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 return;
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
528 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
529 if (tty->TS_clr_line)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
531 OUTPUT1 (tty, tty->TS_clr_line);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 { /* have to do it the hard way */
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
535 tty_turn_off_insert (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
537 /* Do not write in last row last col with Auto-wrap on. */
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
538 if (AutoWrap (tty)
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
539 && curY (tty) == FrameRows (tty) - 1
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
540 && first_unused_hpos == FrameCols (tty))
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 first_unused_hpos--;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
543 for (i = curX (tty); i < first_unused_hpos; i++)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544 {
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
545 if (tty->termscript)
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
546 fputc (' ', tty->termscript);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
547 fputc (' ', tty->output);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 }
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
549 cmplus (tty, first_unused_hpos - curX (tty));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
553 /* Buffers to store the source and result of code conversion for terminal. */
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
554 static unsigned char *encode_terminal_src;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
555 static unsigned char *encode_terminal_dst;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
556 /* Allocated sizes of the above buffers. */
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
557 static int encode_terminal_src_size;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
558 static int encode_terminal_dst_size;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
559
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
560 /* Encode SRC_LEN glyphs starting at SRC to terminal output codes.
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
561 Set CODING->produced to the byte-length of the resulting byte
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
562 sequence, and return a pointer to that byte sequence. */
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
563
58701
24c51e9d8586 (encode_terminal_code): Don't make it "static".
Kenichi Handa <handa@m17n.org>
parents: 58638
diff changeset
564 unsigned char *
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
565 encode_terminal_code (src, src_len, coding)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
566 struct glyph *src;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
567 int src_len;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
568 struct coding_system *coding;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
569 {
66238
d3f5aa0f18c4 (encode_terminal_code): Remove unused var src_start.
Kim F. Storm <storm@cua.dk>
parents: 65795
diff changeset
570 struct glyph *src_end = src + src_len;
17180
364327df6e7c (encode_terminal_code): Check validity of character code.
Kenichi Handa <handa@m17n.org>
parents: 17046
diff changeset
571 register GLYPH g;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
572 unsigned char *buf;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
573 int nchars, nbytes, required;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
574 register int tlen = GLYPH_TABLE_LENGTH;
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
575 register Lisp_Object *tbase = GLYPH_TABLE_BASE;
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
576 Lisp_Object charset_list;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
577
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
578 /* Allocate sufficient size of buffer to store all characters in
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
579 multibyte-form. But, it may be enlarged on demand if
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
580 Vglyph_table contains a string or a composite glyph is
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
581 encountered. */
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
582 required = MAX_MULTIBYTE_LENGTH * src_len;
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
583 if (encode_terminal_src_size < required)
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
584 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
585 if (encode_terminal_src_size == 0)
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
586 encode_terminal_src = xmalloc (required);
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
587 else
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
588 encode_terminal_src = xrealloc (encode_terminal_src, required);
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
589 encode_terminal_src_size = required;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
590 }
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
591
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
592 charset_list = coding_charset_list (coding);
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
593
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
594 buf = encode_terminal_src;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
595 nchars = 0;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
596 while (src < src_end)
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
597 {
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
598 if (src->type == COMPOSITE_GLYPH)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
599 {
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
600 struct composition *cmp = composition_table[src->u.cmp_id];
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
601 int i;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
602
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
603 nbytes = buf - encode_terminal_src;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
604 required = MAX_MULTIBYTE_LENGTH * cmp->glyph_len;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
605
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
606 if (encode_terminal_src_size < nbytes + required)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
607 {
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
608 encode_terminal_src_size = nbytes + required;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
609 encode_terminal_src = xrealloc (encode_terminal_src,
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
610 encode_terminal_src_size);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
611 buf = encode_terminal_src + nbytes;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
612 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
613
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
614 for (i = 0; i < cmp->glyph_len; i++)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
615 {
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
616 int c = COMPOSITION_GLYPH (cmp, i);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
617
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
618 if (! char_charset (c, charset_list, NULL))
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
619 break;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
620 buf += CHAR_STRING (c, buf);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
621 nchars++;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
622 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
623 if (i == 0)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
624 {
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
625 /* The first character of the composition is not encodable. */
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
626 *buf++ = '?';
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
627 nchars++;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
628 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
629 }
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
630 /* We must skip glyphs to be padded for a wide character. */
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
631 else if (! CHAR_GLYPH_PADDING_P (*src))
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
632 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
633 int c;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
634 Lisp_Object string;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
635
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
636 string = Qnil;
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
637 g = GLYPH_FROM_CHAR_GLYPH (src[0]);
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
638
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
639 if (g < 0 || g >= tlen)
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
640 {
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
641 /* This glyph doesn't has an entry in Vglyph_table. */
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
642 c = src->u.ch;
26871
aaf45e665b14 (encode_terminal_code): Delete codes for a composite
Kenichi Handa <handa@m17n.org>
parents: 26425
diff changeset
643 }
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
644 else
19035
0b4c1d43cb95 Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 18058
diff changeset
645 {
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
646 /* This glyph has an entry in Vglyph_table,
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
647 so process any alias before testing for simpleness. */
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
648 GLYPH_FOLLOW_ALIASES (tbase, tlen, g);
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
649
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
650 if (GLYPH_SIMPLE_P (tbase, tlen, g))
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
651 /* We set the multi-byte form of a character in G
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
652 (that should be an ASCII character) at WORKBUF. */
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
653 c = FAST_GLYPH_CHAR (g);
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
654 else
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
655 /* We have a string in Vglyph_table. */
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
656 string = tbase[g];
19035
0b4c1d43cb95 Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 18058
diff changeset
657 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
658
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
659 if (NILP (string))
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
660 {
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
661 nbytes = buf - encode_terminal_src;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
662 if (encode_terminal_src_size < nbytes + MAX_MULTIBYTE_LENGTH)
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
663 {
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
664 encode_terminal_src_size = nbytes + MAX_MULTIBYTE_LENGTH;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
665 encode_terminal_src = xrealloc (encode_terminal_src,
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
666 encode_terminal_src_size);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
667 buf = encode_terminal_src + nbytes;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
668 }
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
669 if (char_charset (c, charset_list, NULL))
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
670 {
89566
86c0ff434620 (encode_terminal_code): Don't handle glyph-table. Check
Kenichi Handa <handa@m17n.org>
parents: 89563
diff changeset
671 /* Store the multibyte form of C at BUF. */
86c0ff434620 (encode_terminal_code): Don't handle glyph-table. Check
Kenichi Handa <handa@m17n.org>
parents: 89563
diff changeset
672 buf += CHAR_STRING (c, buf);
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
673 nchars++;
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
674 }
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
675 else
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
676 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
677 /* C is not encodable. */
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
678 *buf++ = '?';
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
679 nchars++;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
680 while (src + 1 < src_end && CHAR_GLYPH_PADDING_P (src[1]))
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
681 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
682 *buf++ = '?';
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
683 nchars++;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
684 src++;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
685 }
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
686 }
19035
0b4c1d43cb95 Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 18058
diff changeset
687 }
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
688 else
23338
0a2b76b09162 (encode_terminal_code): Handle raw 8-bit codes correctly.
Kenichi Handa <handa@m17n.org>
parents: 23066
diff changeset
689 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
690 unsigned char *p = SDATA (string), *pend = p + SBYTES (string);
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
691
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
692 if (! STRING_MULTIBYTE (string))
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
693 string = string_to_multibyte (string);
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
694 nbytes = buf - encode_terminal_src;
90072
cb67264d6096 Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-2
Miles Bader <miles@gnu.org>
parents: 90059 59382
diff changeset
695 if (encode_terminal_src_size < nbytes + SBYTES (string))
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
696 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
697 encode_terminal_src_size = nbytes + SBYTES (string);
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
698 encode_terminal_src = xrealloc (encode_terminal_src,
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
699 encode_terminal_src_size);
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
700 buf = encode_terminal_src + nbytes;
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
701 }
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
702 bcopy (SDATA (string), buf, SBYTES (string));
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
703 buf += SBYTES (string);
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
704 nchars += SCHARS (string);
23338
0a2b76b09162 (encode_terminal_code): Handle raw 8-bit codes correctly.
Kenichi Handa <handa@m17n.org>
parents: 23066
diff changeset
705 }
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
706 }
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
707 src++;
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
708 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
709
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
710 if (nchars == 0)
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
711 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
712 coding->produced = 0;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
713 return NULL;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
714 }
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
715
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
716 nbytes = buf - encode_terminal_src;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
717 coding->source = encode_terminal_src;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
718 if (encode_terminal_dst_size == 0)
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
719 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
720 encode_terminal_dst_size = encode_terminal_src_size;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
721 encode_terminal_dst = xmalloc (encode_terminal_dst_size);
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
722 }
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
723 coding->destination = encode_terminal_dst;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
724 coding->dst_bytes = encode_terminal_dst_size;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
725 encode_coding_object (coding, Qnil, 0, 0, nchars, nbytes, Qnil);
89566
86c0ff434620 (encode_terminal_code): Don't handle glyph-table. Check
Kenichi Handa <handa@m17n.org>
parents: 89563
diff changeset
726 /* coding->destination may have been reallocated. */
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
727 encode_terminal_dst = coding->destination;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
728 encode_terminal_dst_size = coding->dst_bytes;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
729
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
730 return (encode_terminal_dst);
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
731 }
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
732
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733
91041
bdb3fe0ba9fa Merge from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 91010 85106
diff changeset
734
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
735 /* An implementation of write_glyphs for termcap frames. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
736
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
737 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
738 tty_write_glyphs (struct frame *f, struct glyph *string, int len)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 {
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
740 unsigned char *conversion_buffer;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
741 struct coding_system *coding;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
743 struct tty_display_info *tty = FRAME_TTY (f);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
744
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
745 tty_turn_off_insert (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
746 tty_hide_cursor (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
748 /* Don't dare write in last column of bottom line, if Auto-Wrap,
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
749 since that would scroll the whole frame on some terminals. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
751 if (AutoWrap (tty)
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
752 && curY (tty) + 1 == FRAME_LINES (f)
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
753 && (curX (tty) + len) == FRAME_COLS (f))
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 len --;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
755 if (len <= 0)
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
756 return;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
758 cmplus (tty, len);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
759
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
760 /* If terminal_coding does any conversion, use it, otherwise use
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
761 safe_terminal_coding. We can't use CODING_REQUIRE_ENCODING here
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
762 because it always return 1 if the member src_multibyte is 1. */
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
763 coding = (FRAME_TERMINAL_CODING (f)->common_flags & CODING_REQUIRE_ENCODING_MASK
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
764 ? FRAME_TERMINAL_CODING (f) : &safe_terminal_coding);
20711
9ab8e061c0bf (encode_terminal_code): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 20223
diff changeset
765 /* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at
9ab8e061c0bf (encode_terminal_code): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 20223
diff changeset
766 the tail. */
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
767 coding->mode &= ~CODING_MODE_LAST_BLOCK;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
768
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
769 while (len > 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
770 {
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
771 /* Identify a run of glyphs with the same face. */
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
772 int face_id = string->face_id;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
773 int n;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
774
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
775 for (n = 1; n < len; ++n)
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
776 if (string[n].face_id != face_id)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
777 break;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
778
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
779 /* Turn appearance modes of the face of the run on. */
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
780 tty_highlight_if_desired (tty);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
781 turn_on_face (f, face_id);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
782
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
783 if (n == len)
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
784 /* This is the last run. */
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
785 coding->mode |= CODING_MODE_LAST_BLOCK;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
786 conversion_buffer = encode_terminal_code (string, n, coding);
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
787 if (coding->produced > 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788 {
76627
c53e7d075f1a Include blockinput.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 75348
diff changeset
789 BLOCK_INPUT;
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
790 fwrite (conversion_buffer, 1, coding->produced, tty->output);
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
791 if (ferror (tty->output))
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
792 clearerr (tty->output);
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
793 if (tty->termscript)
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
794 fwrite (conversion_buffer, 1, coding->produced, tty->termscript);
76627
c53e7d075f1a Include blockinput.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 75348
diff changeset
795 UNBLOCK_INPUT;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
796 }
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
797 len -= n;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
798 string += n;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
799
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
800 /* Turn appearance modes off. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
801 turn_off_face (f, face_id);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
802 tty_turn_off_highlight (tty);
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
803 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
804
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
805 cmcheckmagic (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807
84981
a35153116cd0 (term_clear_mouse_face, term_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84969
diff changeset
808 #ifdef HAVE_GPM /* Only used by GPM code. */
a35153116cd0 (term_clear_mouse_face, term_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84969
diff changeset
809
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
810 static void
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
811 tty_write_glyphs_with_face (f, string, len, face_id)
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
812 register struct frame *f;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
813 register struct glyph *string;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
814 register int len, face_id;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
815 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
816 unsigned char *conversion_buffer;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
817 struct coding_system *coding;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
818
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
819 struct tty_display_info *tty = FRAME_TTY (f);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
820
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
821 tty_turn_off_insert (tty);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
822 tty_hide_cursor (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
823
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
824 /* Don't dare write in last column of bottom line, if Auto-Wrap,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
825 since that would scroll the whole frame on some terminals. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
826
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
827 if (AutoWrap (tty)
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
828 && curY (tty) + 1 == FRAME_LINES (f)
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
829 && (curX (tty) + len) == FRAME_COLS (f))
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
830 len --;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
831 if (len <= 0)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
832 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
833
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
834 cmplus (tty, len);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
835
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
836 /* If terminal_coding does any conversion, use it, otherwise use
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
837 safe_terminal_coding. We can't use CODING_REQUIRE_ENCODING here
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
838 because it always return 1 if the member src_multibyte is 1. */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
839 coding = (FRAME_TERMINAL_CODING (f)->common_flags & CODING_REQUIRE_ENCODING_MASK
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
840 ? FRAME_TERMINAL_CODING (f) : &safe_terminal_coding);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
841 /* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
842 the tail. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
843 coding->mode &= ~CODING_MODE_LAST_BLOCK;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
844
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
845 /* Turn appearance modes of the face. */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
846 tty_highlight_if_desired (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
847 turn_on_face (f, face_id);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
848
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
849 coding->mode |= CODING_MODE_LAST_BLOCK;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
850 conversion_buffer = encode_terminal_code (string, len, coding);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
851 if (coding->produced > 0)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
852 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
853 BLOCK_INPUT;
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
854 fwrite (conversion_buffer, 1, coding->produced, tty->output);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
855 if (ferror (tty->output))
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
856 clearerr (tty->output);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
857 if (tty->termscript)
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
858 fwrite (conversion_buffer, 1, coding->produced, tty->termscript);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
859 UNBLOCK_INPUT;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
860 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
861
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
862 /* Turn appearance modes off. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
863 turn_off_face (f, face_id);
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
864 tty_turn_off_highlight (tty);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
865
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
866 cmcheckmagic (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
867 }
84981
a35153116cd0 (term_clear_mouse_face, term_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84969
diff changeset
868 #endif
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
869
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
870 /* An implementation of insert_glyphs for termcap frames. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
871
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
872 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
873 tty_insert_glyphs (struct frame *f, struct glyph *start, int len)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875 char *buf;
31829
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31102
diff changeset
876 struct glyph *glyph = NULL;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
877 unsigned char *conversion_buffer;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
878 unsigned char space[1];
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
879 struct coding_system *coding;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
880
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
881 struct tty_display_info *tty = FRAME_TTY (f);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
882
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
883 if (tty->TS_ins_multi_chars)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
885 buf = tparam (tty->TS_ins_multi_chars, 0, 0, len);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
886 OUTPUT1 (tty, buf);
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2243
diff changeset
887 xfree (buf);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 if (start)
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
889 write_glyphs (f, start, len);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890 return;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
892
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
893 tty_turn_on_insert (tty);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
894 cmplus (tty, len);
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
895
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
896 if (! start)
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
897 space[0] = SPACEGLYPH;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
898
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
899 /* If terminal_coding does any conversion, use it, otherwise use
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
900 safe_terminal_coding. We can't use CODING_REQUIRE_ENCODING here
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
901 because it always return 1 if the member src_multibyte is 1. */
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
902 coding = (FRAME_TERMINAL_CODING (f)->common_flags & CODING_REQUIRE_ENCODING_MASK
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
903 ? FRAME_TERMINAL_CODING (f) : &safe_terminal_coding);
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
904 /* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
905 the tail. */
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
906 coding->mode &= ~CODING_MODE_LAST_BLOCK;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
907
17191
36caec9c2e52 (insert_glyphs): Fix a bug which turns up when
Kenichi Handa <handa@m17n.org>
parents: 17180
diff changeset
908 while (len-- > 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
910 OUTPUT1_IF (tty, tty->TS_ins_char);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 if (!start)
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
912 {
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
913 conversion_buffer = space;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
914 coding->produced = 1;
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
915 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
916 else
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
917 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
918 tty_highlight_if_desired (tty);
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
919 turn_on_face (f, start->face_id);
27085
59913a531d4e (insert_glyphs): Pass glyph, not &glyph, to
Eli Zaretskii <eliz@gnu.org>
parents: 26999
diff changeset
920 glyph = start;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
921 ++start;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
922 /* We must open sufficient space for a character which
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
923 occupies more than one column. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
924 while (len && CHAR_GLYPH_PADDING_P (*start))
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
925 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
926 OUTPUT1_IF (tty, tty->TS_ins_char);
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
927 start++, len--;
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
928 }
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
929
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
930 if (len <= 0)
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
931 /* This is the last glyph. */
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
932 coding->mode |= CODING_MODE_LAST_BLOCK;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
933
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
934 conversion_buffer = encode_terminal_code (glyph, 1, coding);
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
935 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
937 if (coding->produced > 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
938 {
76627
c53e7d075f1a Include blockinput.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 75348
diff changeset
939 BLOCK_INPUT;
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
940 fwrite (conversion_buffer, 1, coding->produced, tty->output);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
941 if (ferror (tty->output))
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
942 clearerr (tty->output);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
943 if (tty->termscript)
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
944 fwrite (conversion_buffer, 1, coding->produced, tty->termscript);
76627
c53e7d075f1a Include blockinput.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 75348
diff changeset
945 UNBLOCK_INPUT;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
948 OUTPUT1_IF (tty, tty->TS_pad_inserted_char);
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
949 if (start)
30848
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
950 {
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
951 turn_off_face (f, glyph->face_id);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
952 tty_turn_off_highlight (tty);
30848
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
953 }
10439
1fcbeb4410f6 (write_glyphs, insert_glyphs): Call checkmagic.
Karl Heuer <kwzh@gnu.org>
parents: 10332
diff changeset
954 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
955
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
956 cmcheckmagic (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
959 /* An implementation of delete_glyphs for termcap frames. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
960
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
961 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
962 tty_delete_glyphs (struct frame *f, int n)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
963 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
964 char *buf;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
965 register int i;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
966
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
967 struct tty_display_info *tty = FRAME_TTY (f);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
968
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
969 if (tty->delete_in_insert_mode)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
970 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
971 tty_turn_on_insert (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
973 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
974 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
975 tty_turn_off_insert (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
976 OUTPUT_IF (tty, tty->TS_delete_mode);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
977 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
978
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
979 if (tty->TS_del_multi_chars)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
980 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
981 buf = tparam (tty->TS_del_multi_chars, 0, 0, n);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
982 OUTPUT1 (tty, buf);
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2243
diff changeset
983 xfree (buf);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986 for (i = 0; i < n; i++)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
987 OUTPUT1 (tty, tty->TS_del_char);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
988 if (!tty->delete_in_insert_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
989 OUTPUT_IF (tty, tty->TS_end_delete_mode);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
992 /* An implementation of ins_del_lines for termcap frames. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
993
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
994 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
995 tty_ins_del_lines (struct frame *f, int vpos, int n)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
997 struct tty_display_info *tty = FRAME_TTY (f);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
998 char *multi = n > 0 ? tty->TS_ins_multi_lines : tty->TS_del_multi_lines;
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
999 char *single = n > 0 ? tty->TS_ins_line : tty->TS_del_line;
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1000 char *scroll = n > 0 ? tty->TS_rev_scroll : tty->TS_fwd_scroll;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 register int i = n > 0 ? n : -n;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 register char *buf;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 /* If the lines below the insertion are being pushed
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 into the end of the window, this is the same as clearing;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 and we know the lines are already clear, since the matching
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 deletion has already been done. So can ignore this. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 /* If the lines below the deletion are blank lines coming
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 out of the end of the window, don't bother,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 as there will be a matching inslines later that will flush them. */
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1012 if (FRAME_SCROLL_REGION_OK (f)
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1013 && vpos + i >= tty->specified_window)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 return;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1015 if (!FRAME_MEMORY_BELOW_FRAME (f)
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1016 && vpos + i >= FRAME_LINES (f))
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 return;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1018
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 if (multi)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 {
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1021 raw_cursor_to (f, vpos, 0);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1022 tty_background_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 buf = tparam (multi, 0, 0, i);
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1024 OUTPUT (tty, buf);
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2243
diff changeset
1025 xfree (buf);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 else if (single)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 {
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1029 raw_cursor_to (f, vpos, 0);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1030 tty_background_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 while (--i >= 0)
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1032 OUTPUT (tty, single);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1033 if (tty->TF_teleray)
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1034 curX (tty) = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1038 tty_set_scroll_region (f, vpos, tty->specified_window);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 if (n < 0)
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1040 raw_cursor_to (f, tty->specified_window - 1, 0);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 else
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1042 raw_cursor_to (f, vpos, 0);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1043 tty_background_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 while (--i >= 0)
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1045 OUTPUTL (tty, scroll, tty->specified_window - vpos);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1046 tty_set_scroll_region (f, 0, tty->specified_window);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1047 }
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1048
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1049 if (!FRAME_SCROLL_REGION_OK (f)
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1050 && FRAME_MEMORY_BELOW_FRAME (f)
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1051 && n < 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 {
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
1053 cursor_to (f, FRAME_LINES (f) + n, 0);
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
1054 clear_to_end (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1055 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1056 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1057
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1058 /* Compute cost of sending "str", in characters,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1059 not counting any line-dependent padding. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 int
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1062 string_cost (char *str)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 cost = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1065 if (str)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066 tputs (str, 0, evalcost);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 return cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 /* Compute cost of sending "str", in characters,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 counting any line-dependent padding at one line. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073 static int
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1074 string_cost_one_line (char *str)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 cost = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 if (str)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078 tputs (str, 1, evalcost);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079 return cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082 /* Compute per line amount of line-dependent padding,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 in tenths of characters. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085 int
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1086 per_line_cost (char *str)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088 cost = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 if (str)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090 tputs (str, 0, evalcost);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 cost = - cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 if (str)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 tputs (str, 10, evalcost);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094 return cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1096
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097 #ifndef old
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 /* char_ins_del_cost[n] is cost of inserting N characters.
10771
d564078d10c6 (calculate_costs): Update max_frame_height, max_frame_width.
Richard M. Stallman <rms@gnu.org>
parents: 10481
diff changeset
1099 char_ins_del_cost[-n] is cost of deleting N characters.
51212
332134065648 Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50227
diff changeset
1100 The length of this vector is based on max_frame_cols. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 int *char_ins_del_vector;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103
51212
332134065648 Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50227
diff changeset
1104 #define char_ins_del_cost(f) (&char_ins_del_vector[FRAME_COLS ((f))])
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 #endif
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 /* ARGSUSED */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 static void
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1109 calculate_ins_del_char_costs (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 {
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
1111 struct tty_display_info *tty = FRAME_TTY (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 int ins_startup_cost, del_startup_cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 int ins_cost_per_char, del_cost_per_char;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 register int i;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 register int *p;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1117 if (tty->TS_ins_multi_chars)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 ins_cost_per_char = 0;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1120 ins_startup_cost = string_cost_one_line (tty->TS_ins_multi_chars);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 }
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1122 else if (tty->TS_ins_char || tty->TS_pad_inserted_char
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1123 || (tty->TS_insert_mode && tty->TS_end_insert_mode))
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1125 ins_startup_cost = (30 * (string_cost (tty->TS_insert_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1126 + string_cost (tty->TS_end_insert_mode))) / 100;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1127 ins_cost_per_char = (string_cost_one_line (tty->TS_ins_char)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1128 + string_cost_one_line (tty->TS_pad_inserted_char));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 ins_startup_cost = 9999;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 ins_cost_per_char = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1136 if (tty->TS_del_multi_chars)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 del_cost_per_char = 0;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1139 del_startup_cost = string_cost_one_line (tty->TS_del_multi_chars);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 }
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1141 else if (tty->TS_del_char)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1143 del_startup_cost = (string_cost (tty->TS_delete_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1144 + string_cost (tty->TS_end_delete_mode));
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1145 if (tty->delete_in_insert_mode)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1146 del_startup_cost /= 2;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1147 del_cost_per_char = string_cost_one_line (tty->TS_del_char);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1149 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 del_startup_cost = 9999;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 del_cost_per_char = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 /* Delete costs are at negative offsets */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1156 p = &char_ins_del_cost (f)[0];
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1157 for (i = FRAME_COLS (f); --i >= 0;)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1158 *--p = (del_startup_cost += del_cost_per_char);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160 /* Doing nothing is free */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1161 p = &char_ins_del_cost (f)[0];
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1162 *p++ = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164 /* Insert costs are at positive offsets */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1165 for (i = FRAME_COLS (f); --i >= 0;)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166 *p++ = (ins_startup_cost += ins_cost_per_char);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
1169 void
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1170 calculate_costs (struct frame *frame)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171 {
10121
3f9f77a9488d (calculate_costs): Set FRAME_COST_BAUD_RATE.
Richard M. Stallman <rms@gnu.org>
parents: 9797
diff changeset
1172 FRAME_COST_BAUD_RATE (frame) = baud_rate;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
1174 if (FRAME_TERMCAP_P (frame))
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1175 {
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1176 struct tty_display_info *tty = FRAME_TTY (frame);
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1177 register char *f = (tty->TS_set_scroll_region
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1178 ? tty->TS_set_scroll_region
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1179 : tty->TS_set_scroll_region_1);
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1180
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1181 FRAME_SCROLL_REGION_COST (frame) = string_cost (f);
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1182
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1183 tty->costs_set = 1;
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1184
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1185 /* These variables are only used for terminal stuff. They are
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1186 allocated once for the terminal frame of X-windows emacs, but not
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1187 used afterwards.
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1188
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1189 char_ins_del_vector (i.e., char_ins_del_cost) isn't used because
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1190 X turns off char_ins_del_ok. */
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1191
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1192 max_frame_lines = max (max_frame_lines, FRAME_LINES (frame));
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1193 max_frame_cols = max (max_frame_cols, FRAME_COLS (frame));
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1194
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1195 if (char_ins_del_vector != 0)
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1196 char_ins_del_vector
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1197 = (int *) xrealloc (char_ins_del_vector,
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1198 (sizeof (int)
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1199 + 2 * max_frame_cols * sizeof (int)));
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1200 else
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1201 char_ins_del_vector
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1202 = (int *) xmalloc (sizeof (int)
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1203 + 2 * max_frame_cols * sizeof (int));
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1204
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1205 bzero (char_ins_del_vector, (sizeof (int)
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1206 + 2 * max_frame_cols * sizeof (int)));
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1207
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1208
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1209 if (f && (!tty->TS_ins_line && !tty->TS_del_line))
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1210 do_line_insertion_deletion_costs (frame,
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1211 tty->TS_rev_scroll, tty->TS_ins_multi_lines,
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1212 tty->TS_fwd_scroll, tty->TS_del_multi_lines,
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1213 f, f, 1);
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1214 else
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1215 do_line_insertion_deletion_costs (frame,
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1216 tty->TS_ins_line, tty->TS_ins_multi_lines,
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1217 tty->TS_del_line, tty->TS_del_multi_lines,
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1218 0, 0, 1);
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1219
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1220 calculate_ins_del_char_costs (frame);
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1221
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1222 /* Don't use TS_repeat if its padding is worse than sending the chars */
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1223 if (tty->TS_repeat && per_line_cost (tty->TS_repeat) * baud_rate < 9000)
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1224 tty->RPov = string_cost (tty->TS_repeat);
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1225 else
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1226 tty->RPov = FRAME_COLS (frame) * 2;
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1227
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1228 cmcostinit (FRAME_TTY (frame)); /* set up cursor motion costs */
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1229 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231
1015
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1232 struct fkey_table {
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1233 char *cap, *name;
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1234 };
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1235
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1236 /* Termcap capability names that correspond directly to X keysyms.
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1237 Some of these (marked "terminfo") aren't supplied by old-style
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1238 (Berkeley) termcap entries. They're listed in X keysym order;
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1239 except we put the keypad keys first, so that if they clash with
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1240 other keys (as on the IBM PC keyboard) they get overridden.
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1241 */
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1242
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1243 static struct fkey_table keys[] =
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1244 {
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1245 {"kh", "home"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1246 {"kl", "left"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1247 {"ku", "up"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1248 {"kr", "right"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1249 {"kd", "down"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1250 {"%8", "prior"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1251 {"%5", "next"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1252 {"@7", "end"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1253 {"@1", "begin"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1254 {"*6", "select"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1255 {"%9", "print"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1256 {"@4", "execute"}, /* terminfo --- actually the `command' key */
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1257 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1258 * "insert" --- see below
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1259 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1260 {"&8", "undo"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1261 {"%0", "redo"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1262 {"%7", "menu"}, /* terminfo --- actually the `options' key */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1263 {"@0", "find"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1264 {"@2", "cancel"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1265 {"%1", "help"}, /* terminfo */
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1266 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1267 * "break" goes here, but can't be reliably intercepted with termcap
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1268 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1269 {"&4", "reset"}, /* terminfo --- actually `restart' */
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1270 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1271 * "system" and "user" --- no termcaps
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1272 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1273 {"kE", "clearline"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1274 {"kA", "insertline"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1275 {"kL", "deleteline"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1276 {"kI", "insertchar"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1277 {"kD", "deletechar"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1278 {"kB", "backtab"}, /* terminfo */
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1279 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1280 * "kp_backtab", "kp-space", "kp-tab" --- no termcaps
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1281 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1282 {"@8", "kp-enter"}, /* terminfo */
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1283 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1284 * "kp-f1", "kp-f2", "kp-f3" "kp-f4",
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1285 * "kp-multiply", "kp-add", "kp-separator",
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1286 * "kp-subtract", "kp-decimal", "kp-divide", "kp-0";
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1287 * --- no termcaps for any of these.
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1288 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1289 {"K4", "kp-1"}, /* terminfo */
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1290 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1291 * "kp-2" --- no termcap
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1292 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1293 {"K5", "kp-3"}, /* terminfo */
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1294 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1295 * "kp-4" --- no termcap
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1296 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1297 {"K2", "kp-5"}, /* terminfo */
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1298 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1299 * "kp-6" --- no termcap
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1300 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1301 {"K1", "kp-7"}, /* terminfo */
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1302 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1303 * "kp-8" --- no termcap
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1304 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1305 {"K3", "kp-9"}, /* terminfo */
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1306 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1307 * "kp-equal" --- no termcap
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1308 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1309 {"k1", "f1"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1310 {"k2", "f2"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1311 {"k3", "f3"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1312 {"k4", "f4"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1313 {"k5", "f5"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1314 {"k6", "f6"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1315 {"k7", "f7"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1316 {"k8", "f8"},
61591
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1317 {"k9", "f9"},
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1318
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1319 {"&0", "S-cancel"}, /*shifted cancel key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1320 {"&9", "S-begin"}, /*shifted begin key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1321 {"*0", "S-find"}, /*shifted find key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1322 {"*1", "S-execute"}, /*shifted execute? actually shifted command key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1323 {"*4", "S-delete"}, /*shifted delete-character key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1324 {"*7", "S-end"}, /*shifted end key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1325 {"*8", "S-clearline"}, /*shifted clear-to end-of-line key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1326 {"#1", "S-help"}, /*shifted help key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1327 {"#2", "S-home"}, /*shifted home key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1328 {"#3", "S-insert"}, /*shifted insert-character key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1329 {"#4", "S-left"}, /*shifted left-arrow key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1330 {"%d", "S-menu"}, /*shifted menu? actually shifted options key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1331 {"%c", "S-next"}, /*shifted next key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1332 {"%e", "S-prior"}, /*shifted previous key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1333 {"%f", "S-print"}, /*shifted print key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1334 {"%g", "S-redo"}, /*shifted redo key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1335 {"%i", "S-right"}, /*shifted right-arrow key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1336 {"!3", "S-undo"} /*shifted undo key*/
1015
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1337 };
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1338
83317
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
1339 static char **term_get_fkeys_address;
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
1340 static KBOARD *term_get_fkeys_kboard;
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1341 static Lisp_Object term_get_fkeys_1 ();
4543
929e4c850e76 (term_get_fkeys_define_1, term_get_fkeys_define): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 4499
diff changeset
1342
85106
fd282fb888de Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84981
diff changeset
1343 /* Find the escape codes sent by the function keys for Vinput_decode_map.
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1344 This function scans the termcap function key sequence entries, and
85106
fd282fb888de Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84981
diff changeset
1345 adds entries to Vinput_decode_map for each function key it finds. */
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1346
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1347 static void
83317
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
1348 term_get_fkeys (address, kboard)
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1349 char **address;
83317
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
1350 KBOARD *kboard;
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1351 {
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1352 /* We run the body of the function (term_get_fkeys_1) and ignore all Lisp
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1353 errors during the call. The only errors should be from Fdefine_key
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1354 when given a key sequence containing an invalid prefix key. If the
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1355 termcap defines function keys which use a prefix that is already bound
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1356 to a command by the default bindings, we should silently ignore that
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1357 function key specification, rather than giving the user an error and
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1358 refusing to run at all on such a terminal. */
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1359
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1360 extern Lisp_Object Fidentity ();
83317
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
1361 term_get_fkeys_address = address;
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
1362 term_get_fkeys_kboard = kboard;
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1363 internal_condition_case (term_get_fkeys_1, Qerror, Fidentity);
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1364 }
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1365
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1366 static Lisp_Object
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1367 term_get_fkeys_1 ()
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1368 {
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1369 int i;
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1370
83317
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
1371 char **address = term_get_fkeys_address;
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
1372 KBOARD *kboard = term_get_fkeys_kboard;
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
1373
3359
ef29e2a4fc46 (term_get_fkeys): If not initialized, init Vfunction_key_map.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
1374 /* This can happen if CANNOT_DUMP or with strange options. */
85106
fd282fb888de Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84981
diff changeset
1375 if (!KEYMAPP (kboard->Vinput_decode_map))
fd282fb888de Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84981
diff changeset
1376 kboard->Vinput_decode_map = Fmake_sparse_keymap (Qnil);
3359
ef29e2a4fc46 (term_get_fkeys): If not initialized, init Vfunction_key_map.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
1377
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1378 for (i = 0; i < (sizeof (keys)/sizeof (keys[0])); i++)
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1379 {
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1380 char *sequence = tgetstr (keys[i].cap, address);
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1381 if (sequence)
85106
fd282fb888de Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84981
diff changeset
1382 Fdefine_key (kboard->Vinput_decode_map, build_string (sequence),
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1383 Fmake_vector (make_number (1),
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1384 intern (keys[i].name)));
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1385 }
1015
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1386
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1387 /* The uses of the "k0" capability are inconsistent; sometimes it
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1388 describes F10, whereas othertimes it describes F0 and "k;" describes F10.
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3489
diff changeset
1389 We will attempt to politely accommodate both systems by testing for
1015
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1390 "k;", and if it is present, assuming that "k0" denotes F0, otherwise F10.
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1391 */
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1392 {
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1393 char *k_semi = tgetstr ("k;", address);
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1394 char *k0 = tgetstr ("k0", address);
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1395 char *k0_name = "f10";
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1396
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1397 if (k_semi)
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1398 {
43073
c9baf4b00820 (term_get_fkeys_1): If `k0' and `k;' are both specified and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42959
diff changeset
1399 if (k0)
c9baf4b00820 (term_get_fkeys_1): If `k0' and `k;' are both specified and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42959
diff changeset
1400 /* Define f0 first, so that f10 takes precedence in case the
c9baf4b00820 (term_get_fkeys_1): If `k0' and `k;' are both specified and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42959
diff changeset
1401 key sequences happens to be the same. */
85106
fd282fb888de Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84981
diff changeset
1402 Fdefine_key (kboard->Vinput_decode_map, build_string (k0),
43073
c9baf4b00820 (term_get_fkeys_1): If `k0' and `k;' are both specified and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42959
diff changeset
1403 Fmake_vector (make_number (1), intern ("f0")));
85106
fd282fb888de Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84981
diff changeset
1404 Fdefine_key (kboard->Vinput_decode_map, build_string (k_semi),
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1405 Fmake_vector (make_number (1), intern ("f10")));
1015
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1406 }
43073
c9baf4b00820 (term_get_fkeys_1): If `k0' and `k;' are both specified and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42959
diff changeset
1407 else if (k0)
85106
fd282fb888de Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84981
diff changeset
1408 Fdefine_key (kboard->Vinput_decode_map, build_string (k0),
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1409 Fmake_vector (make_number (1), intern (k0_name)));
1015
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1410 }
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1411
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1412 /* Set up cookies for numbered function keys above f10. */
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1413 {
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1414 char fcap[3], fkey[4];
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1415
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1416 fcap[0] = 'F'; fcap[2] = '\0';
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1417 for (i = 11; i < 64; i++)
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1418 {
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1419 if (i <= 19)
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1420 fcap[1] = '1' + i - 11;
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1421 else if (i <= 45)
10481
24756aef26e3 (term_get_fkeys_1): Bug fix for function key above f19.
Richard M. Stallman <rms@gnu.org>
parents: 10439
diff changeset
1422 fcap[1] = 'A' + i - 20;
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1423 else
10481
24756aef26e3 (term_get_fkeys_1): Bug fix for function key above f19.
Richard M. Stallman <rms@gnu.org>
parents: 10439
diff changeset
1424 fcap[1] = 'a' + i - 46;
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1425
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1426 {
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1427 char *sequence = tgetstr (fcap, address);
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1428 if (sequence)
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1429 {
4543
929e4c850e76 (term_get_fkeys_define_1, term_get_fkeys_define): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 4499
diff changeset
1430 sprintf (fkey, "f%d", i);
85106
fd282fb888de Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84981
diff changeset
1431 Fdefine_key (kboard->Vinput_decode_map, build_string (sequence),
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1432 Fmake_vector (make_number (1),
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1433 intern (fkey)));
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1434 }
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1435 }
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1436 }
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1437 }
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1438
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1439 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1440 * Various mappings to try and get a better fit.
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1441 */
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1442 {
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1443 #define CONDITIONAL_REASSIGN(cap1, cap2, sym) \
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1444 if (!tgetstr (cap1, address)) \
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1445 { \
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1446 char *sequence = tgetstr (cap2, address); \
83317
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
1447 if (sequence) \
85106
fd282fb888de Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84981
diff changeset
1448 Fdefine_key (kboard->Vinput_decode_map, build_string (sequence), \
83317
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
1449 Fmake_vector (make_number (1), \
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
1450 intern (sym))); \
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1451 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1452
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1453 /* if there's no key_next keycap, map key_npage to `next' keysym */
2243
23228edebc59 Fix spacing conventions.
Richard M. Stallman <rms@gnu.org>
parents: 2239
diff changeset
1454 CONDITIONAL_REASSIGN ("%5", "kN", "next");
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1455 /* if there's no key_prev keycap, map key_ppage to `previous' keysym */
3706
5a563b062c0d (term_get_fkeys): Use `prior', not `previous', for %8/kP.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
1456 CONDITIONAL_REASSIGN ("%8", "kP", "prior");
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1457 /* if there's no key_dc keycap, map key_ic to `insert' keysym */
2243
23228edebc59 Fix spacing conventions.
Richard M. Stallman <rms@gnu.org>
parents: 2239
diff changeset
1458 CONDITIONAL_REASSIGN ("kD", "kI", "insert");
19385
8f58b5d12021 (term_get_fkeys_1): Use kH as alternate for move-to-last-line.
Richard M. Stallman <rms@gnu.org>
parents: 19277
diff changeset
1459 /* if there's no key_end keycap, map key_ll to 'end' keysym */
8f58b5d12021 (term_get_fkeys_1): Use kH as alternate for move-to-last-line.
Richard M. Stallman <rms@gnu.org>
parents: 19277
diff changeset
1460 CONDITIONAL_REASSIGN ("@7", "kH", "end");
9524
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1461
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1462 /* IBM has their own non-standard dialect of terminfo.
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1463 If the standard name isn't found, try the IBM name. */
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1464 CONDITIONAL_REASSIGN ("kB", "KO", "backtab");
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1465 CONDITIONAL_REASSIGN ("@4", "kJ", "execute"); /* actually "action" */
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1466 CONDITIONAL_REASSIGN ("@4", "kc", "execute"); /* actually "command" */
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1467 CONDITIONAL_REASSIGN ("%7", "ki", "menu");
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1468 CONDITIONAL_REASSIGN ("@7", "kw", "end");
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1469 CONDITIONAL_REASSIGN ("F1", "k<", "f11");
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1470 CONDITIONAL_REASSIGN ("F2", "k>", "f12");
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1471 CONDITIONAL_REASSIGN ("%1", "kq", "help");
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1472 CONDITIONAL_REASSIGN ("*6", "kU", "select");
2224
49bda4cf498c Supply second arg for tgetstr() calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2179
diff changeset
1473 #undef CONDITIONAL_REASSIGN
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1474 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1475
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1476 return Qnil;
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1477 }
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1478
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1479
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1480 /***********************************************************************
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1481 Character Display Information
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1482 ***********************************************************************/
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1483
69637
8b3e0cacc358 Define aliases for append_glyph and produce_stretch_glyph
Kim F. Storm <storm@cua.dk>
parents: 68661
diff changeset
1484 /* Avoid name clash with functions defined in xterm.c */
8b3e0cacc358 Define aliases for append_glyph and produce_stretch_glyph
Kim F. Storm <storm@cua.dk>
parents: 68661
diff changeset
1485 #ifdef static
8b3e0cacc358 Define aliases for append_glyph and produce_stretch_glyph
Kim F. Storm <storm@cua.dk>
parents: 68661
diff changeset
1486 #define append_glyph append_glyph_term
8b3e0cacc358 Define aliases for append_glyph and produce_stretch_glyph
Kim F. Storm <storm@cua.dk>
parents: 68661
diff changeset
1487 #define produce_stretch_glyph produce_stretch_glyph_term
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1488 #define append_composite_glyph append_composite_glyph_term
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1489 #define produce_composite_glyph produce_composite_glyph_term
69637
8b3e0cacc358 Define aliases for append_glyph and produce_stretch_glyph
Kim F. Storm <storm@cua.dk>
parents: 68661
diff changeset
1490 #endif
8b3e0cacc358 Define aliases for append_glyph and produce_stretch_glyph
Kim F. Storm <storm@cua.dk>
parents: 68661
diff changeset
1491
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1492 static void append_glyph P_ ((struct it *));
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1493 static void produce_stretch_glyph P_ ((struct it *));
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1494 static void append_composite_glyph P_ ((struct it *));
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1495 static void produce_composite_glyph P_ ((struct it *));
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1496
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1497 /* Append glyphs to IT's glyph_row. Called from produce_glyphs for
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1498 terminal frames if IT->glyph_row != NULL. IT->char_to_display is
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1499 the character for which to produce glyphs; IT->face_id contains the
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1500 character's face. Padding glyphs are appended if IT->c has a
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1501 IT->pixel_width > 1. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1502
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1503 static void
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1504 append_glyph (it)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1505 struct it *it;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1506 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1507 struct glyph *glyph, *end;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1508 int i;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1509
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1510 xassert (it->glyph_row);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1511 glyph = (it->glyph_row->glyphs[it->area]
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1512 + it->glyph_row->used[it->area]);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1513 end = it->glyph_row->glyphs[1 + it->area];
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1514
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1515 for (i = 0;
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1516 i < it->pixel_width && glyph < end;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1517 ++i)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1518 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1519 glyph->type = CHAR_GLYPH;
29462
3306af2e4f3d (append_glyph): Revert change of 2000-06-06.
Gerd Moellmann <gerd@gnu.org>
parents: 29448
diff changeset
1520 glyph->pixel_width = 1;
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1521 glyph->u.ch = it->char_to_display;
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
1522 glyph->face_id = it->face_id;
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
1523 glyph->padding_p = i > 0;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1524 glyph->charpos = CHARPOS (it->position);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1525 glyph->object = it->object;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1526
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1527 ++it->glyph_row->used[it->area];
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1528 ++glyph;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1529 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1530 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1531
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1532
44372
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1533 /* Produce glyphs for the display element described by IT. *IT
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1534 specifies what we want to produce a glyph for (character, image, ...),
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1535 and where in the glyph matrix we currently are (glyph row and hpos).
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1536 produce_glyphs fills in output fields of *IT with information such as the
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1537 pixel width and height of a character, and maybe output actual glyphs at
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1538 the same time if IT->glyph_row is non-null. See the explanation of
44372
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1539 struct display_iterator in dispextern.h for an overview.
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1540
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1541 produce_glyphs also stores the result of glyph width, ascent
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1542 etc. computations in *IT.
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1543
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1544 IT->glyph_row may be null, in which case produce_glyphs does not
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1545 actually fill in the glyphs. This is used in the move_* functions
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1546 in xdisp.c for text width and height computations.
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1547
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1548 Callers usually don't call produce_glyphs directly;
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1549 instead they use the macro PRODUCE_GLYPHS. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1550
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1551 void
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1552 produce_glyphs (it)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1553 struct it *it;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1554 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1555 /* If a hook is installed, let it do the work. */
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1556
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1557 /* Nothing but characters are supported on terminal frames. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1558 xassert (it->what == IT_CHARACTER
26871
aaf45e665b14 (encode_terminal_code): Delete codes for a composite
Kenichi Handa <handa@m17n.org>
parents: 26425
diff changeset
1559 || it->what == IT_COMPOSITION
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1560 || it->what == IT_STRETCH);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1561
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1562 if (it->what == IT_STRETCH)
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1563 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1564 produce_stretch_glyph (it);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1565 goto done;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1566 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1567
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1568 if (it->what == IT_COMPOSITION)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1569 {
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1570 produce_composite_glyph (it);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1571 goto done;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1572 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1573
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1574 /* Maybe translate single-byte characters to multibyte. */
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1575 it->char_to_display = it->c;
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1576
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1577 if (it->c >= 040 && it->c < 0177)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1578 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1579 it->pixel_width = it->nglyphs = 1;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1580 if (it->glyph_row)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1581 append_glyph (it);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1582 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1583 else if (it->c == '\n')
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1584 it->pixel_width = it->nglyphs = 0;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1585 else if (it->c == '\t')
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1586 {
28685
b4310b6f3b5e (produce_glyphs): Remove reference to struct it's prompt_width.
Gerd Moellmann <gerd@gnu.org>
parents: 28507
diff changeset
1587 int absolute_x = (it->current_x
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1588 + it->continuation_lines_width);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1589 int next_tab_x
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1590 = (((1 + absolute_x + it->tab_width - 1)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1591 / it->tab_width)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1592 * it->tab_width);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1593 int nspaces;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1594
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1595 /* If part of the TAB has been displayed on the previous line
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1596 which is continued now, continuation_lines_width will have
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1597 been incremented already by the part that fitted on the
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1598 continued line. So, we will get the right number of spaces
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1599 here. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1600 nspaces = next_tab_x - absolute_x;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1601
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1602 if (it->glyph_row)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1603 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1604 int n = nspaces;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1605
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1606 it->char_to_display = ' ';
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1607 it->pixel_width = it->len = 1;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1608
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1609 while (n--)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1610 append_glyph (it);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1611 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1612
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1613 it->pixel_width = nspaces;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1614 it->nglyphs = nspaces;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1615 }
89566
86c0ff434620 (encode_terminal_code): Don't handle glyph-table. Check
Kenichi Handa <handa@m17n.org>
parents: 89563
diff changeset
1616 else if (CHAR_BYTE8_P (it->c))
29262
b7059c9f98ac (produce_glyphs): Don't treat eight-bit-* charsets as multibyte.
Eli Zaretskii <eliz@gnu.org>
parents: 29097
diff changeset
1617 {
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1618 if (unibyte_display_via_language_environment
90301
1f534e44acca (produce_glyphs): Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90294
diff changeset
1619 && (it->c >= 0240))
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1620 {
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1621 it->char_to_display = unibyte_char_to_multibyte (it->c);
90301
1f534e44acca (produce_glyphs): Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90294
diff changeset
1622 it->pixel_width = CHAR_WIDTH (it->char_to_display);
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1623 it->nglyphs = it->pixel_width;
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1624 if (it->glyph_row)
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1625 append_glyph (it);
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1626 }
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1627 else
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1628 {
90301
1f534e44acca (produce_glyphs): Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90294
diff changeset
1629 /* Coming here means that it->c is from display table, thus
1f534e44acca (produce_glyphs): Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90294
diff changeset
1630 we must send the raw 8-bit byte as is to the terminal.
1f534e44acca (produce_glyphs): Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90294
diff changeset
1631 Although there's no way to know how many columns it
1f534e44acca (produce_glyphs): Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90294
diff changeset
1632 occupies on a screen, it is a good assumption that a
1f534e44acca (produce_glyphs): Sync to HEAD.
Kenichi Handa <handa@m17n.org>
parents: 90294
diff changeset
1633 single byte code has 1-column width. */
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1634 it->pixel_width = it->nglyphs = 1;
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1635 if (it->glyph_row)
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1636 append_glyph (it);
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1637 }
29262
b7059c9f98ac (produce_glyphs): Don't treat eight-bit-* charsets as multibyte.
Eli Zaretskii <eliz@gnu.org>
parents: 29097
diff changeset
1638 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1639 else
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1640 {
88391
1953d0d56cd7 Include "buffer.h" and "character.h".
Kenichi Handa <handa@m17n.org>
parents: 43073
diff changeset
1641 it->pixel_width = CHAR_WIDTH (it->c);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1642 it->nglyphs = it->pixel_width;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1643
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1644 if (it->glyph_row)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1645 append_glyph (it);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1646 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1647
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1648 done:
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1649 /* Advance current_x by the pixel width as a convenience for
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1650 the caller. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1651 if (it->area == TEXT_AREA)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1652 it->current_x += it->pixel_width;
25187
39feb68ed3c7 (produce_glyphs): Set iterator's physical height
Gerd Moellmann <gerd@gnu.org>
parents: 25002
diff changeset
1653 it->ascent = it->max_ascent = it->phys_ascent = it->max_phys_ascent = 0;
39feb68ed3c7 (produce_glyphs): Set iterator's physical height
Gerd Moellmann <gerd@gnu.org>
parents: 25002
diff changeset
1654 it->descent = it->max_descent = it->phys_descent = it->max_phys_descent = 1;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1655 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1656
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1657
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1658 /* Produce a stretch glyph for iterator IT. IT->object is the value
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1659 of the glyph property displayed. The value must be a list
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1660 `(space KEYWORD VALUE ...)' with the following KEYWORD/VALUE pairs
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1661 being recognized:
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1662
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1663 1. `:width WIDTH' specifies that the space should be WIDTH *
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1664 canonical char width wide. WIDTH may be an integer or floating
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1665 point number.
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1666
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1667 2. `:align-to HPOS' specifies that the space should be wide enough
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1668 to reach HPOS, a value in canonical character units. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1669
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1670 static void
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1671 produce_stretch_glyph (it)
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1672 struct it *it;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1673 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1674 /* (space :width WIDTH ...) */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1675 Lisp_Object prop, plist;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1676 int width = 0, align_to = -1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1677 int zero_width_ok_p = 0;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1678 double tem;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1679
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1680 /* List should start with `space'. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1681 xassert (CONSP (it->object) && EQ (XCAR (it->object), Qspace));
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1682 plist = XCDR (it->object);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1683
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1684 /* Compute the width of the stretch. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1685 if ((prop = Fplist_get (plist, QCwidth), !NILP (prop))
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1686 && calc_pixel_width_or_height (&tem, it, prop, 0, 1, 0))
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1687 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1688 /* Absolute width `:width WIDTH' specified and valid. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1689 zero_width_ok_p = 1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1690 width = (int)(tem + 0.5);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1691 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1692 else if ((prop = Fplist_get (plist, QCalign_to), !NILP (prop))
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1693 && calc_pixel_width_or_height (&tem, it, prop, 0, 1, &align_to))
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1694 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1695 if (it->glyph_row == NULL || !it->glyph_row->mode_line_p)
66238
d3f5aa0f18c4 (encode_terminal_code): Remove unused var src_start.
Kim F. Storm <storm@cua.dk>
parents: 65795
diff changeset
1696 align_to = (align_to < 0
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1697 ? 0
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1698 : align_to - window_box_left_offset (it->w, TEXT_AREA));
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1699 else if (align_to < 0)
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1700 align_to = window_box_left_offset (it->w, TEXT_AREA);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1701 width = max (0, (int)(tem + 0.5) + align_to - it->current_x);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1702 zero_width_ok_p = 1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1703 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1704 else
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1705 /* Nothing specified -> width defaults to canonical char width. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1706 width = FRAME_COLUMN_WIDTH (it->f);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1707
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1708 if (width <= 0 && (width < 0 || !zero_width_ok_p))
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1709 width = 1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1710
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1711 if (width > 0 && it->glyph_row)
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1712 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1713 Lisp_Object o_object = it->object;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1714 Lisp_Object object = it->stack[it->sp - 1].string;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1715 int n = width;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1716
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1717 if (!STRINGP (object))
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1718 object = it->w->buffer;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1719 it->object = object;
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1720 it->char_to_display = ' ';
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1721 it->pixel_width = it->len = 1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1722 while (n--)
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1723 append_glyph (it);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1724 it->object = o_object;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1725 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1726 it->pixel_width = width;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1727 it->nglyphs = width;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1728 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1729
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1730
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1731 /* Append glyphs to IT's glyph_row for the composition IT->cmp_id.
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1732 Called from produce_composite_glyph for terminal frames if
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1733 IT->glyph_row != NULL. IT->face_id contains the character's
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1734 face. */
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1735
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1736 static void
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1737 append_composite_glyph (it)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1738 struct it *it;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1739 {
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1740 struct glyph *glyph;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1741
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1742 xassert (it->glyph_row);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1743 glyph = it->glyph_row->glyphs[it->area] + it->glyph_row->used[it->area];
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1744 if (glyph < it->glyph_row->glyphs[1 + it->area])
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1745 {
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1746 glyph->type = COMPOSITE_GLYPH;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1747 glyph->pixel_width = it->pixel_width;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1748 glyph->u.cmp_id = it->cmp_id;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1749 glyph->face_id = it->face_id;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1750 glyph->padding_p = 0;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1751 glyph->charpos = CHARPOS (it->position);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1752 glyph->object = it->object;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1753
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1754 ++it->glyph_row->used[it->area];
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1755 ++glyph;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1756 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1757 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1758
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1759
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1760 /* Produce a composite glyph for iterator IT. IT->cmp_id is the ID of
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1761 the composition. We simply produces components of the composition
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1762 assuming that that the terminal has a capability to layout/render
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1763 it correctly. */
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1764
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1765 static void
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1766 produce_composite_glyph (it)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1767 struct it *it;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1768 {
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1769 struct composition *cmp = composition_table[it->cmp_id];
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1770 int c;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1771
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1772 xassert (cmp->glyph_len > 0);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1773 c = COMPOSITION_GLYPH (cmp, 0);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1774 it->pixel_width = CHAR_WIDTH (it->c);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1775 it->nglyphs = 1;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1776
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1777 if (it->glyph_row)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1778 append_composite_glyph (it);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1779 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1780
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1781
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1782 /* Get information about special display element WHAT in an
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1783 environment described by IT. WHAT is one of IT_TRUNCATION or
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1784 IT_CONTINUATION. Maybe produce glyphs for WHAT if IT has a
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1785 non-null glyph_row member. This function ensures that fields like
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1786 face_id, c, len of IT are left untouched. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1787
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1788 void
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1789 produce_special_glyphs (it, what)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1790 struct it *it;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1791 enum display_element_type what;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1792 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1793 struct it temp_it;
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1794 GLYPH glyph;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1795
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1796 temp_it = *it;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1797 temp_it.dp = NULL;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1798 temp_it.what = IT_CHARACTER;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1799 temp_it.len = 1;
28507
b6f06a755c7d make_number/XINT/XUINT conversions; EQ/== fixes; ==Qnil -> NILP
Ken Raeburn <raeburn@raeburn.org>
parents: 28465
diff changeset
1800 temp_it.object = make_number (0);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1801 bzero (&temp_it.current, sizeof temp_it.current);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1802
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1803 if (what == IT_CONTINUATION)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1804 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1805 /* Continuation glyph. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1806 if (it->dp
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1807 && INTEGERP (DISP_CONTINUE_GLYPH (it->dp))
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1808 && GLYPH_CHAR_VALID_P (XINT (DISP_CONTINUE_GLYPH (it->dp))))
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1809 {
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1810 glyph = XINT (DISP_CONTINUE_GLYPH (it->dp));
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1811 glyph = spec_glyph_lookup_face (XWINDOW (it->window), glyph);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1812 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1813 else
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1814 glyph = '\\';
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1815 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1816 else if (what == IT_TRUNCATION)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1817 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1818 /* Truncation glyph. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1819 if (it->dp
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1820 && INTEGERP (DISP_TRUNC_GLYPH (it->dp))
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1821 && GLYPH_CHAR_VALID_P (XINT (DISP_TRUNC_GLYPH (it->dp))))
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1822 {
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1823 glyph = XINT (DISP_TRUNC_GLYPH (it->dp));
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1824 glyph = spec_glyph_lookup_face (XWINDOW (it->window), glyph);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1825 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1826 else
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1827 glyph = '$';
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1828 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1829 else
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1830 abort ();
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1831
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1832 temp_it.c = FAST_GLYPH_CHAR (glyph);
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1833 temp_it.face_id = FAST_GLYPH_FACE (glyph);
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1834 temp_it.len = CHAR_BYTES (temp_it.c);
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1835
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1836 produce_glyphs (&temp_it);
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1837 it->pixel_width = temp_it.pixel_width;
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1838 it->nglyphs = temp_it.pixel_width;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1839 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1840
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1841
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1842
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1843 /***********************************************************************
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1844 Faces
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1845 ***********************************************************************/
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1846
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1847 /* Value is non-zero if attribute ATTR may be used. ATTR should be
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1848 one of the enumerators from enum no_color_bit, or a bit set built
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1849 from them. Some display attributes may not be used together with
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1850 color; the termcap capability `NC' specifies which ones. */
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1851
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1852 #define MAY_USE_WITH_COLORS_P(tty, ATTR) \
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1853 (tty->TN_max_colors > 0 \
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1854 ? (tty->TN_no_color_video & (ATTR)) == 0 \
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1855 : 1)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1856
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1857 /* Turn appearances of face FACE_ID on tty frame F on.
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1858 FACE_ID is a realized face ID number, in the face cache. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1859
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1860 static void
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1861 turn_on_face (f, face_id)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1862 struct frame *f;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1863 int face_id;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1864 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1865 struct face *face = FACE_FROM_ID (f, face_id);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1866 long fg = face->foreground;
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1867 long bg = face->background;
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
1868 struct tty_display_info *tty = FRAME_TTY (f);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1869
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1870 /* Do this first because TS_end_standout_mode may be the same
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1871 as TS_exit_attribute_mode, which turns all appearances off. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1872 if (MAY_USE_WITH_COLORS_P (tty, NC_REVERSE))
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1873 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1874 if (tty->TN_max_colors > 0)
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1875 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1876 if (fg >= 0 && bg >= 0)
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1877 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1878 /* If the terminal supports colors, we can set them
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1879 below without using reverse video. The face's fg
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1880 and bg colors are set as they should appear on
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1881 the screen, i.e. they take the inverse-video'ness
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1882 of the face already into account. */
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1883 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1884 else if (inverse_video)
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1885 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1886 if (fg == FACE_TTY_DEFAULT_FG_COLOR
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1887 || bg == FACE_TTY_DEFAULT_BG_COLOR)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1888 tty_toggle_highlight (tty);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1889 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1890 else
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1891 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1892 if (fg == FACE_TTY_DEFAULT_BG_COLOR
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1893 || bg == FACE_TTY_DEFAULT_FG_COLOR)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1894 tty_toggle_highlight (tty);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1895 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1896 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1897 else
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1898 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1899 /* If we can't display colors, use reverse video
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1900 if the face specifies that. */
37499
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1901 if (inverse_video)
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1902 {
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1903 if (fg == FACE_TTY_DEFAULT_FG_COLOR
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1904 || bg == FACE_TTY_DEFAULT_BG_COLOR)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1905 tty_toggle_highlight (tty);
37499
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1906 }
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1907 else
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1908 {
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1909 if (fg == FACE_TTY_DEFAULT_BG_COLOR
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1910 || bg == FACE_TTY_DEFAULT_FG_COLOR)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1911 tty_toggle_highlight (tty);
37499
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1912 }
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1913 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1914 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1915
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1916 if (face->tty_bold_p)
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1917 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1918 if (MAY_USE_WITH_COLORS_P (tty, NC_BOLD))
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1919 OUTPUT1_IF (tty, tty->TS_enter_bold_mode);
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1920 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1921 else if (face->tty_dim_p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1922 if (MAY_USE_WITH_COLORS_P (tty, NC_DIM))
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1923 OUTPUT1_IF (tty, tty->TS_enter_dim_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1924
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1925 /* Alternate charset and blinking not yet used. */
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1926 if (face->tty_alt_charset_p
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1927 && MAY_USE_WITH_COLORS_P (tty, NC_ALT_CHARSET))
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1928 OUTPUT1_IF (tty, tty->TS_enter_alt_charset_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1929
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1930 if (face->tty_blinking_p
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1931 && MAY_USE_WITH_COLORS_P (tty, NC_BLINK))
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1932 OUTPUT1_IF (tty, tty->TS_enter_blink_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1933
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1934 if (face->tty_underline_p && MAY_USE_WITH_COLORS_P (tty, NC_UNDERLINE))
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1935 OUTPUT1_IF (tty, tty->TS_enter_underline_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1936
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1937 if (tty->TN_max_colors > 0)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1938 {
65072
462eb3df5c58 (turn_on_face): Check for TS_set_foreground and
Juri Linkov <juri@jurta.org>
parents: 64773
diff changeset
1939 char *ts, *p;
462eb3df5c58 (turn_on_face): Check for TS_set_foreground and
Juri Linkov <juri@jurta.org>
parents: 64773
diff changeset
1940
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
1941 ts = tty->standout_mode ? tty->TS_set_background : tty->TS_set_foreground;
65072
462eb3df5c58 (turn_on_face): Check for TS_set_foreground and
Juri Linkov <juri@jurta.org>
parents: 64773
diff changeset
1942 if (fg >= 0 && ts)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1943 {
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
1944 p = tparam (ts, NULL, 0, (int) fg);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
1945 OUTPUT (tty, p);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1946 xfree (p);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1947 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1948
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
1949 ts = tty->standout_mode ? tty->TS_set_foreground : tty->TS_set_background;
65072
462eb3df5c58 (turn_on_face): Check for TS_set_foreground and
Juri Linkov <juri@jurta.org>
parents: 64773
diff changeset
1950 if (bg >= 0 && ts)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1951 {
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
1952 p = tparam (ts, NULL, 0, (int) bg);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
1953 OUTPUT (tty, p);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1954 xfree (p);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1955 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1956 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1957 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1958
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1959
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1960 /* Turn off appearances of face FACE_ID on tty frame F. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1961
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1962 static void
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1963 turn_off_face (f, face_id)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1964 struct frame *f;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1965 int face_id;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1966 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1967 struct face *face = FACE_FROM_ID (f, face_id);
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
1968 struct tty_display_info *tty = FRAME_TTY (f);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1969
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1970 xassert (face != NULL);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1971
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1972 if (tty->TS_exit_attribute_mode)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1973 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1974 /* Capability "me" will turn off appearance modes double-bright,
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1975 half-bright, reverse-video, standout, underline. It may or
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1976 may not turn off alt-char-mode. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1977 if (face->tty_bold_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1978 || face->tty_dim_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1979 || face->tty_reverse_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1980 || face->tty_alt_charset_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1981 || face->tty_blinking_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1982 || face->tty_underline_p)
30848
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
1983 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1984 OUTPUT1_IF (tty, tty->TS_exit_attribute_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1985 if (strcmp (tty->TS_exit_attribute_mode, tty->TS_end_standout_mode) == 0)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1986 tty->standout_mode = 0;
30848
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
1987 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1988
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1989 if (face->tty_alt_charset_p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1990 OUTPUT_IF (tty, tty->TS_exit_alt_charset_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1991 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1992 else
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1993 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1994 /* If we don't have "me" we can only have those appearances
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1995 that have exit sequences defined. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1996 if (face->tty_alt_charset_p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1997 OUTPUT_IF (tty, tty->TS_exit_alt_charset_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1998
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
1999 if (face->tty_underline_p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2000 OUTPUT_IF (tty, tty->TS_exit_underline_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2001 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2003 /* Switch back to default colors. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2004 if (tty->TN_max_colors > 0
26902
264b83a3a688 Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents: 26871
diff changeset
2005 && ((face->foreground != FACE_TTY_DEFAULT_COLOR
264b83a3a688 Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents: 26871
diff changeset
2006 && face->foreground != FACE_TTY_DEFAULT_FG_COLOR)
264b83a3a688 Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents: 26871
diff changeset
2007 || (face->background != FACE_TTY_DEFAULT_COLOR
264b83a3a688 Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents: 26871
diff changeset
2008 && face->background != FACE_TTY_DEFAULT_BG_COLOR)))
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2009 OUTPUT1_IF (tty, tty->TS_orig_pair);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2010 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
2011
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
2012
45522
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2013 /* Return non-zero if the terminal on frame F supports all of the
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2014 capabilities in CAPS simultaneously, with foreground and background
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2015 colors FG and BG. */
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2016
45548
612208417377 C style fix.
Miles Bader <miles@gnu.org>
parents: 45522
diff changeset
2017 int
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2018 tty_capable_p (tty, caps, fg, bg)
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
2019 struct tty_display_info *tty;
45522
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2020 unsigned caps;
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2021 unsigned long fg, bg;
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2022 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2023 #define TTY_CAPABLE_P_TRY(tty, cap, TS, NC_bit) \
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2024 if ((caps & (cap)) && (!(TS) || !MAY_USE_WITH_COLORS_P(tty, NC_bit))) \
45522
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2025 return 0;
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2026
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2027 TTY_CAPABLE_P_TRY (tty, TTY_CAP_INVERSE, tty->TS_standout_mode, NC_REVERSE);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2028 TTY_CAPABLE_P_TRY (tty, TTY_CAP_UNDERLINE, tty->TS_enter_underline_mode, NC_UNDERLINE);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2029 TTY_CAPABLE_P_TRY (tty, TTY_CAP_BOLD, tty->TS_enter_bold_mode, NC_BOLD);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2030 TTY_CAPABLE_P_TRY (tty, TTY_CAP_DIM, tty->TS_enter_dim_mode, NC_DIM);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2031 TTY_CAPABLE_P_TRY (tty, TTY_CAP_BLINK, tty->TS_enter_blink_mode, NC_BLINK);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2032 TTY_CAPABLE_P_TRY (tty, TTY_CAP_ALT_CHARSET, tty->TS_enter_alt_charset_mode, NC_ALT_CHARSET);
45522
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2033
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2034 /* We can do it! */
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2035 return 1;
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2036 }
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2037
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2038 /* Return non-zero if the terminal is capable to display colors. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2039
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2040 DEFUN ("tty-display-color-p", Ftty_display_color_p, Stty_display_color_p,
27087
8de2d17323c2 (Ftty_display_color_p): Accept an optional argument FRAME.
Eli Zaretskii <eliz@gnu.org>
parents: 27085
diff changeset
2041 0, 1, 0,
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2042 doc: /* Return non-nil if the tty device TERMINAL can display colors.
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2043
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2044 TERMINAL can be a terminal id, a frame or nil (meaning the selected
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2045 frame's terminal). This function always returns nil if TERMINAL
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2046 is not on a tty device. */)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2047 (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2048 Lisp_Object terminal;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2049 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2050 struct terminal *t = get_tty_terminal (terminal, 0);
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2051 if (!t)
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
2052 return Qnil;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
2053 else
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2054 return t->display_info.tty->TN_max_colors > 0 ? Qt : Qnil;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2055 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2056
42954
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2057 /* Return the number of supported colors. */
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2058 DEFUN ("tty-display-color-cells", Ftty_display_color_cells,
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2059 Stty_display_color_cells, 0, 1, 0,
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2060 doc: /* Return the number of colors supported by the tty device TERMINAL.
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2061
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2062 TERMINAL can be a terminal id, a frame or nil (meaning the selected
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2063 frame's terminal). This function always returns 0 if TERMINAL
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2064 is not on a tty device. */)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2065 (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2066 Lisp_Object terminal;
42954
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2067 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2068 struct terminal *t = get_tty_terminal (terminal, 0);
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2069 if (!t)
83161
8d62eda26760 Fix byte-compile errors during bootstrap. (Reported by Juraj Kubelka.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83158
diff changeset
2070 return make_number (0);
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
2071 else
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2072 return make_number (t->display_info.tty->TN_max_colors);
42954
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2073 }
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2074
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2075 #ifndef WINDOWSNT
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2076
82410
fa95c556638e Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 82389
diff changeset
2077 /* Declare here rather than in the function, as in the rest of Emacs,
fa95c556638e Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 82389
diff changeset
2078 to work around an HPUX compiler bug (?). See
82389
1822f754a65a Comment previous change.
Glenn Morris <rgm@gnu.org>
parents: 82387
diff changeset
2079 http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg00410.html */
82410
fa95c556638e Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 82389
diff changeset
2080 static int default_max_colors;
fa95c556638e Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 82389
diff changeset
2081 static int default_max_pairs;
fa95c556638e Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 82389
diff changeset
2082 static int default_no_color_video;
fa95c556638e Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 82389
diff changeset
2083 static char *default_orig_pair;
fa95c556638e Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 82389
diff changeset
2084 static char *default_set_foreground;
fa95c556638e Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 82389
diff changeset
2085 static char *default_set_background;
82387
69bcf35b14d3 Philippe Waroquiers <philippe.waroquiers at eurocontrol.int>
Glenn Morris <rgm@gnu.org>
parents: 82140
diff changeset
2086
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2087 /* Save or restore the default color-related capabilities of this
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2088 terminal. */
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2089 static void
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
2090 tty_default_color_capabilities (struct tty_display_info *tty, int save)
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2091 {
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2092
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2093 if (save)
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2094 {
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2095 if (default_orig_pair)
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2096 xfree (default_orig_pair);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2097 default_orig_pair = tty->TS_orig_pair ? xstrdup (tty->TS_orig_pair) : NULL;
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2098
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2099 if (default_set_foreground)
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2100 xfree (default_set_foreground);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2101 default_set_foreground = tty->TS_set_foreground ? xstrdup (tty->TS_set_foreground)
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2102 : NULL;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2103
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2104 if (default_set_background)
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2105 xfree (default_set_background);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2106 default_set_background = tty->TS_set_background ? xstrdup (tty->TS_set_background)
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2107 : NULL;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2108
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2109 default_max_colors = tty->TN_max_colors;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2110 default_max_pairs = tty->TN_max_pairs;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2111 default_no_color_video = tty->TN_no_color_video;
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2112 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2113 else
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2114 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2115 tty->TS_orig_pair = default_orig_pair;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2116 tty->TS_set_foreground = default_set_foreground;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2117 tty->TS_set_background = default_set_background;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2118 tty->TN_max_colors = default_max_colors;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2119 tty->TN_max_pairs = default_max_pairs;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2120 tty->TN_no_color_video = default_no_color_video;
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2121 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2122 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2123
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2124 /* Setup one of the standard tty color schemes according to MODE.
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2125 MODE's value is generally the number of colors which we want to
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2126 support; zero means set up for the default capabilities, the ones
83341
76e51706154e Rename term_init to init_tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83338
diff changeset
2127 we saw at init_tty time; -1 means turn off color support. */
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2128 static void
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
2129 tty_setup_colors (struct tty_display_info *tty, int mode)
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2130 {
52652
31a3a92c1a03 (tty_setup_colors): Treat any negative argument as -1.
Eli Zaretskii <eliz@gnu.org>
parents: 52579
diff changeset
2131 /* Canonicalize all negative values of MODE. */
31a3a92c1a03 (tty_setup_colors): Treat any negative argument as -1.
Eli Zaretskii <eliz@gnu.org>
parents: 52579
diff changeset
2132 if (mode < -1)
31a3a92c1a03 (tty_setup_colors): Treat any negative argument as -1.
Eli Zaretskii <eliz@gnu.org>
parents: 52579
diff changeset
2133 mode = -1;
31a3a92c1a03 (tty_setup_colors): Treat any negative argument as -1.
Eli Zaretskii <eliz@gnu.org>
parents: 52579
diff changeset
2134
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2135 switch (mode)
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2136 {
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2137 case -1: /* no colors at all */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2138 tty->TN_max_colors = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2139 tty->TN_max_pairs = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2140 tty->TN_no_color_video = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2141 tty->TS_set_foreground = tty->TS_set_background = tty->TS_orig_pair = NULL;
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2142 break;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2143 case 0: /* default colors, if any */
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2144 default:
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2145 tty_default_color_capabilities (tty, 0);
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2146 break;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2147 case 8: /* 8 standard ANSI colors */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2148 tty->TS_orig_pair = "\033[0m";
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2149 #ifdef TERMINFO
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2150 tty->TS_set_foreground = "\033[3%p1%dm";
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2151 tty->TS_set_background = "\033[4%p1%dm";
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2152 #else
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2153 tty->TS_set_foreground = "\033[3%dm";
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2154 tty->TS_set_background = "\033[4%dm";
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2155 #endif
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2156 tty->TN_max_colors = 8;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2157 tty->TN_max_pairs = 64;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2158 tty->TN_no_color_video = 0;
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2159 break;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2160 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2161 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2162
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2163 void
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2164 set_tty_color_mode (f, val)
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2165 struct frame *f;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2166 Lisp_Object val;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2167 {
42808
cb0b3b9b61ec (set_tty_color_mode): Remove unused variable `tem'.
Pavel Janík <Pavel@Janik.cz>
parents: 42742
diff changeset
2168 Lisp_Object color_mode_spec, current_mode_spec;
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2169 Lisp_Object color_mode, current_mode;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2170 int mode, old_mode;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2171 extern Lisp_Object Qtty_color_mode;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2172 Lisp_Object tty_color_mode_alist;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2173
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2174 tty_color_mode_alist = Fintern_soft (build_string ("tty-color-mode-alist"),
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2175 Qnil);
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2176
52579
611336925095 (set_tty_color_mode): Use INTEGERP to test whether a
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
2177 if (INTEGERP (val))
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2178 color_mode = val;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2179 else
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2180 {
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2181 if (NILP (tty_color_mode_alist))
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2182 color_mode_spec = Qnil;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2183 else
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2184 color_mode_spec = Fassq (val, XSYMBOL (tty_color_mode_alist)->value);
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2185
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2186 if (CONSP (color_mode_spec))
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2187 color_mode = XCDR (color_mode_spec);
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2188 else
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2189 color_mode = Qnil;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2190 }
52681
2036a4307b6c (set_tty_color_mode): Calculate current_mode_spec regardless of value of VAL.
Richard M. Stallman <rms@gnu.org>
parents: 52652
diff changeset
2191
2036a4307b6c (set_tty_color_mode): Calculate current_mode_spec regardless of value of VAL.
Richard M. Stallman <rms@gnu.org>
parents: 52652
diff changeset
2192 current_mode_spec = assq_no_quit (Qtty_color_mode, f->param_alist);
2036a4307b6c (set_tty_color_mode): Calculate current_mode_spec regardless of value of VAL.
Richard M. Stallman <rms@gnu.org>
parents: 52652
diff changeset
2193
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2194 if (CONSP (current_mode_spec))
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2195 current_mode = XCDR (current_mode_spec);
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2196 else
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2197 current_mode = Qnil;
52579
611336925095 (set_tty_color_mode): Use INTEGERP to test whether a
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
2198 if (INTEGERP (color_mode))
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2199 mode = XINT (color_mode);
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2200 else
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2201 mode = 0; /* meaning default */
52579
611336925095 (set_tty_color_mode): Use INTEGERP to test whether a
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
2202 if (INTEGERP (current_mode))
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2203 old_mode = XINT (current_mode);
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2204 else
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2205 old_mode = 0;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2206
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2207 if (mode != old_mode)
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2208 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2209 tty_setup_colors (FRAME_TTY (f), mode);
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2210 /* This recomputes all the faces given the new color
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2211 definitions. */
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2212 call0 (intern ("tty-set-up-initial-frame-faces"));
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2213 redraw_frame (f);
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2214 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2215 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2216
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2217 #endif /* !WINDOWSNT */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2218
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2219
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2220
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2221 /* Return the tty display object specified by TERMINAL. */
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2222
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2223 struct terminal *
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2224 get_tty_terminal (Lisp_Object terminal, int throw)
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
2225 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2226 struct terminal *t = get_terminal (terminal, throw);
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2227
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2228 if (t && t->type != output_termcap)
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2229 {
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2230 if (throw)
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2231 error ("Device %d is not a termcap terminal device", t->id);
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2232 else
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2233 return NULL;
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2234 }
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2235
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2236 return t;
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
2237 }
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
2238
83525
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2239 /* Return an active termcap device that uses the tty device with the
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2240 given name.
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
2241
83342
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
2242 This function ignores suspended devices.
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
2243
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
2244 Returns NULL if the named terminal device is not opened. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
2245
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2246 struct terminal *
83342
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
2247 get_named_tty (name)
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2248 char *name;
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2249 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2250 struct terminal *t;
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2251
83525
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2252 if (!name)
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2253 abort ();
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2254
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2255 for (t = terminal_list; t; t = t->next_terminal)
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2256 {
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2257 if (t->type == output_termcap
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2258 && !strcmp (t->display_info.tty->name, name)
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2259 && TERMINAL_ACTIVE_P (t))
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2260 return t;
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2261 }
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2262
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2263 return 0;
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2264 }
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2265
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2266
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2267 DEFUN ("tty-type", Ftty_type, Stty_type, 0, 1, 0,
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2268 doc: /* Return the type of the tty device that TERMINAL uses.
83525
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2269 Returns nil if TERMINAL is not on a tty device.
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2270
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2271 TERMINAL can be a terminal id, a frame or nil (meaning the selected
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2272 frame's terminal). */)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2273 (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2274 Lisp_Object terminal;
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2275 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2276 struct terminal *t = get_terminal (terminal, 1);
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2277
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2278 if (t->type != output_termcap)
83525
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2279 return Qnil;
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
2280
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2281 if (t->display_info.tty->type)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2282 return build_string (t->display_info.tty->type);
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2283 else
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2284 return Qnil;
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2285 }
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2286
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2287 DEFUN ("controlling-tty-p", Fcontrolling_tty_p, Scontrolling_tty_p, 0, 1, 0,
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2288 doc: /* Return non-nil if TERMINAL is on the controlling tty of the Emacs process.
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2289
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2290 TERMINAL can be a terminal id, a frame or nil (meaning the selected
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2291 frame's terminal). This function always returns nil if TERMINAL
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2292 is not on a tty device. */)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2293 (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2294 Lisp_Object terminal;
83173
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2295 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2296 struct terminal *t = get_terminal (terminal, 1);
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2297
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
2298 if (t->type != output_termcap || strcmp (t->display_info.tty->name, DEV_TTY))
83173
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2299 return Qnil;
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2300 else
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2301 return Qt;
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2302 }
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2303
83311
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2304 DEFUN ("tty-no-underline", Ftty_no_underline, Stty_no_underline, 0, 1, 0,
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2305 doc: /* Declare that the tty used by TERMINAL does not handle underlining.
83311
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2306 This is used to override the terminfo data, for certain terminals that
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2307 do not really do underlining, but say that they do. This function has
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2308 no effect if used on a non-tty terminal.
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2309
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2310 TERMINAL can be a terminal id, a frame or nil (meaning the selected
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2311 frame's terminal). This function always returns nil if TERMINAL
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2312 is not on a tty device. */)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2313 (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2314 Lisp_Object terminal;
83311
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2315 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2316 struct terminal *t = get_terminal (terminal, 1);
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2317
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2318 if (t->type == output_termcap)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2319 t->display_info.tty->TS_enter_underline_mode = 0;
83311
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2320 return Qnil;
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2321 }
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2322
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2323
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2324
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2325 DEFUN ("suspend-tty", Fsuspend_tty, Ssuspend_tty, 0, 1, 0,
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2326 doc: /* Suspend the terminal device TTY.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2327
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2328 The device is restored to its default state, and Emacs ceases all
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2329 access to the tty device. Frames that use the device are not deleted,
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2330 but input is not read from them and if they change, their display is
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2331 not updated.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2332
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2333 TTY may be a terminal id, a frame, or nil for the terminal device of
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2334 the currently selected frame.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2335
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
2336 This function runs `suspend-tty-functions' after suspending the
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2337 device. The functions are run with one arg, the id of the suspended
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2338 terminal device.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2339
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2340 `suspend-tty' does nothing if it is called on a device that is already
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2341 suspended.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2342
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2343 A suspended tty may be resumed by calling `resume-tty' on it. */)
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2344 (tty)
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2345 Lisp_Object tty;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2346 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2347 struct terminal *t = get_tty_terminal (tty, 1);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2348 FILE *f;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2349
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2350 if (!t)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2351 error ("Unknown tty device");
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2352
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2353 f = t->display_info.tty->input;
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2354
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2355 if (f)
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2356 {
84769
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2357 /* First run `suspend-tty-functions' and then clean up the tty
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2358 state because `suspend-tty-functions' might need to change
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2359 the tty state. */
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2360 if (!NILP (Vrun_hooks))
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2361 {
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2362 Lisp_Object args[2];
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2363 args[0] = intern ("suspend-tty-functions");
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2364 XSETTERMINAL (args[1], t);
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2365 Frun_hook_with_args (2, args);
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2366 }
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2367
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2368 reset_sys_modes (t->display_info.tty);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2369
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2370 delete_keyboard_wait_descriptor (fileno (f));
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2371
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2372 fclose (f);
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2373 if (f != t->display_info.tty->output)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2374 fclose (t->display_info.tty->output);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2375
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2376 t->display_info.tty->input = 0;
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2377 t->display_info.tty->output = 0;
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2378
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2379 if (FRAMEP (t->display_info.tty->top_frame))
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2380 FRAME_SET_VISIBLE (XFRAME (t->display_info.tty->top_frame), 0);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2381
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2382 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2383
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
2384 /* Clear display hooks to prevent further output. */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
2385 clear_tty_hooks (t);
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
2386
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2387 return Qnil;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2388 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2389
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2390 DEFUN ("resume-tty", Fresume_tty, Sresume_tty, 0, 1, 0,
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2391 doc: /* Resume the previously suspended terminal device TTY.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2392 The terminal is opened and reinitialized. Frames that are on the
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2393 suspended terminal are revived.
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2394
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2395 It is an error to resume a terminal while another terminal is active
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2396 on the same device.
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2397
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
2398 This function runs `resume-tty-functions' after resuming the terminal.
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2399 The functions are run with one arg, the id of the resumed terminal
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2400 device.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2401
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2402 `resume-tty' does nothing if it is called on a device that is not
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2403 suspended.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2404
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2405 TTY may be a terminal id, a frame, or nil for the terminal device of
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2406 the currently selected frame. */)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2407 (tty)
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2408 Lisp_Object tty;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2409 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2410 struct terminal *t = get_tty_terminal (tty, 1);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2411 int fd;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2412
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2413 if (!t)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2414 error ("Unknown tty device");
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2415
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2416 if (!t->display_info.tty->input)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2417 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2418 if (get_named_tty (t->display_info.tty->name))
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2419 error ("Cannot resume display while another display is active on the same device");
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2420
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2421 fd = emacs_open (t->display_info.tty->name, O_RDWR | O_NOCTTY, 0);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2422
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
2423 if (fd == -1)
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
2424 error ("Can not reopen tty device %s: %s", t->display_info.tty->name, strerror (errno));
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
2425
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
2426 if (strcmp (t->display_info.tty->name, DEV_TTY))
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
2427 dissociate_if_controlling_tty (fd);
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
2428
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2429 t->display_info.tty->output = fdopen (fd, "w+");
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2430 t->display_info.tty->input = t->display_info.tty->output;
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
2431
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2432 add_keyboard_wait_descriptor (fd);
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2433
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2434 if (FRAMEP (t->display_info.tty->top_frame))
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2435 FRAME_SET_VISIBLE (XFRAME (t->display_info.tty->top_frame), 1);
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2436
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2437 init_sys_modes (t->display_info.tty);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2438
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
2439 /* Run `resume-tty-functions'. */
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2440 if (!NILP (Vrun_hooks))
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2441 {
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2442 Lisp_Object args[2];
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
2443 args[0] = intern ("resume-tty-functions");
84692
0d8dd9a91520 (get_tty_terminal): Don't treat output_initial specially.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84461
diff changeset
2444 XSETTERMINAL (args[1], t);
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2445 Frun_hook_with_args (2, args);
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2446 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2447 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2448
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
2449 set_tty_hooks (t);
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
2450
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2451 return Qnil;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2452 }
83311
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2453
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2454
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2455 /***********************************************************************
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2456 Mouse
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2457 ***********************************************************************/
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2458
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
2459 #ifdef HAVE_GPM
81107
a9d423c1c1d4 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 81102
diff changeset
2460 void
a9d423c1c1d4 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 81102
diff changeset
2461 term_mouse_moveto (int x, int y)
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2462 {
81811
c10410a3aa36 Include unistd.h for ttyname, used in handle_one_term_event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81308
diff changeset
2463 /* TODO: how to set mouse position?
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2464 const char *name;
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2465 int fd;
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2466 name = (const char *) ttyname (0);
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2467 fd = open (name, O_WRONLY);
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2468 SOME_FUNCTION (x, y, fd);
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2469 close (fd);
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2470 last_mouse_x = x;
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2471 last_mouse_y = y; */
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2472 }
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2473
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2474 static void
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2475 term_show_mouse_face (enum draw_glyphs_face draw)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2476 {
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2477 struct window *w = XWINDOW (mouse_face_window);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2478 int save_x, save_y;
81811
c10410a3aa36 Include unistd.h for ttyname, used in handle_one_term_event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81308
diff changeset
2479 int i;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2480
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2481 struct frame *f = XFRAME (w->frame);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2482 struct tty_display_info *tty = FRAME_TTY (f);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2483
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2484 if (/* If window is in the process of being destroyed, don't bother
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2485 to do anything. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2486 w->current_matrix != NULL
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2487 /* Recognize when we are called to operate on rows that don't exist
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2488 anymore. This can happen when a window is split. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2489 && mouse_face_end_row < w->current_matrix->nrows)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2490 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2491 /* write_glyphs writes at cursor position, so we need to
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2492 temporarily move cursor coordinates to the beginning of
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2493 the highlight region. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2494
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2495 /* Save current cursor co-ordinates */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2496 save_y = curY (tty);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2497 save_x = curX (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2498
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2499 /* Note that mouse_face_beg_row etc. are window relative. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2500 for (i = mouse_face_beg_row; i <= mouse_face_end_row; i++)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2501 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2502 int start_hpos, end_hpos, nglyphs;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2503 struct glyph_row *row = MATRIX_ROW (w->current_matrix, i);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2504
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2505 /* Don't do anything if row doesn't have valid contents. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2506 if (!row->enabled_p)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2507 continue;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2508
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2509 /* For all but the first row, the highlight starts at column 0. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2510 if (i == mouse_face_beg_row)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2511 start_hpos = mouse_face_beg_col;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2512 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2513 start_hpos = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2514
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2515 if (i == mouse_face_end_row)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2516 end_hpos = mouse_face_end_col;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2517 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2518 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2519 end_hpos = row->used[TEXT_AREA];
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2520 if (draw == DRAW_NORMAL_TEXT)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2521 row->fill_line_p = 1; /* Clear to end of line */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2522 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2523
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2524 if (end_hpos <= start_hpos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2525 continue;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2526 /* Record that some glyphs of this row are displayed in
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2527 mouse-face. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2528 row->mouse_face_p = draw > 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2529
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2530 nglyphs = end_hpos - start_hpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2531
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2532 if (end_hpos >= row->used[TEXT_AREA])
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2533 nglyphs = row->used[TEXT_AREA] - start_hpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2534
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2535 pos_y = row->y + WINDOW_TOP_EDGE_Y (w);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2536 pos_x = row->used[LEFT_MARGIN_AREA] + start_hpos
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2537 + WINDOW_LEFT_EDGE_X (w);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2538
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2539 cursor_to (f, pos_y, pos_x);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2540
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2541 if (draw == DRAW_MOUSE_FACE)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2542 {
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2543 tty_write_glyphs_with_face (f, row->glyphs[TEXT_AREA] + start_hpos,
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2544 nglyphs, mouse_face_face_id);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2545 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2546 else /* draw == DRAW_NORMAL_TEXT */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2547 write_glyphs (f, row->glyphs[TEXT_AREA] + start_hpos, nglyphs);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2548 }
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2549 cursor_to (f, save_y, save_x);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2550 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2551 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2552
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2553 static void
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2554 term_clear_mouse_face ()
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2555 {
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2556 if (!NILP (mouse_face_window))
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2557 term_show_mouse_face (DRAW_NORMAL_TEXT);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2558
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2559 mouse_face_beg_row = mouse_face_beg_col = -1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2560 mouse_face_end_row = mouse_face_end_col = -1;
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2561 mouse_face_window = Qnil;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2562 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2563
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2564 /* Find the glyph matrix position of buffer position POS in window W.
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2565 *HPOS and *VPOS are set to the positions found. W's current glyphs
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2566 must be up to date. If POS is above window start return (0, 0).
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2567 If POS is after end of W, return end of last line in W.
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2568 - taken from msdos.c */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2569 static int
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2570 fast_find_position (struct window *w, int pos, int *hpos, int *vpos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2571 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2572 int i, lastcol, line_start_position, maybe_next_line_p = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2573 int yb = window_text_bottom_y (w);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2574 struct glyph_row *row = MATRIX_ROW (w->current_matrix, 0), *best_row = row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2575
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2576 while (row->y < yb)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2577 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2578 if (row->used[TEXT_AREA])
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2579 line_start_position = row->glyphs[TEXT_AREA]->charpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2580 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2581 line_start_position = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2582
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2583 if (line_start_position > pos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2584 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2585 /* If the position sought is the end of the buffer,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2586 don't include the blank lines at the bottom of the window. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2587 else if (line_start_position == pos
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2588 && pos == BUF_ZV (XBUFFER (w->buffer)))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2589 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2590 maybe_next_line_p = 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2591 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2592 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2593 else if (line_start_position > 0)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2594 best_row = row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2595
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2596 /* Don't overstep the last matrix row, lest we get into the
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2597 never-never land... */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2598 if (row->y + 1 >= yb)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2599 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2600
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2601 ++row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2602 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2603
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2604 /* Find the right column within BEST_ROW. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2605 lastcol = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2606 row = best_row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2607 for (i = 0; i < row->used[TEXT_AREA]; i++)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2608 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2609 struct glyph *glyph = row->glyphs[TEXT_AREA] + i;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2610 int charpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2611
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2612 charpos = glyph->charpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2613 if (charpos == pos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2614 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2615 *hpos = i;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2616 *vpos = row->y;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2617 return 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2618 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2619 else if (charpos > pos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2620 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2621 else if (charpos > 0)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2622 lastcol = i;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2623 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2624
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2625 /* If we're looking for the end of the buffer,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2626 and we didn't find it in the line we scanned,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2627 use the start of the following line. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2628 if (maybe_next_line_p)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2629 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2630 ++row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2631 lastcol = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2632 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2633
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2634 *vpos = row->y;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2635 *hpos = lastcol + 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2636 return 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2637 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2638
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2639 static void
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2640 term_mouse_highlight (struct frame *f, int x, int y)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2641 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2642 enum window_part part;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2643 Lisp_Object window;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2644 struct window *w;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2645 struct buffer *b;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2646
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2647 if (NILP (Vmouse_highlight)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2648 || !f->glyphs_initialized_p)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2649 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2650
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2651 /* Which window is that in? */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2652 window = window_from_coordinates (f, x, y, &part, &x, &y, 0);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2653
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2654 /* Not on a window -> return. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2655 if (!WINDOWP (window))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2656 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2657
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2658 if (!EQ (window, mouse_face_window))
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2659 term_clear_mouse_face ();
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2660
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2661 w = XWINDOW (window);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2662
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2663 /* Are we in a window whose display is up to date?
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2664 And verify the buffer's text has not changed. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2665 b = XBUFFER (w->buffer);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2666 if (part == ON_TEXT
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2667 && EQ (w->window_end_valid, w->buffer)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2668 && XFASTINT (w->last_modified) == BUF_MODIFF (b)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2669 && XFASTINT (w->last_overlay_modified) == BUF_OVERLAY_MODIFF (b))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2670 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2671 int pos, i, nrows = w->current_matrix->nrows;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2672 struct glyph_row *row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2673 struct glyph *glyph;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2674
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2675 /* Find the glyph under X/Y. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2676 glyph = NULL;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2677 if (y >= 0 && y < nrows)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2678 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2679 row = MATRIX_ROW (w->current_matrix, y);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2680 /* Give up if some row before the one we are looking for is
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2681 not enabled. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2682 for (i = 0; i <= y; i++)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2683 if (!MATRIX_ROW (w->current_matrix, i)->enabled_p)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2684 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2685 if (i > y /* all rows upto and including the one at Y are enabled */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2686 && row->displays_text_p
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2687 && x < window_box_width (w, TEXT_AREA))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2688 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2689 glyph = row->glyphs[TEXT_AREA];
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2690 if (x >= row->used[TEXT_AREA])
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2691 glyph = NULL;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2692 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2693 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2694 glyph += x;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2695 if (!BUFFERP (glyph->object))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2696 glyph = NULL;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2697 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2698 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2699 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2700
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2701 /* Clear mouse face if X/Y not over text. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2702 if (glyph == NULL)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2703 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2704 term_clear_mouse_face ();
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2705 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2706 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2707
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2708 if (!BUFFERP (glyph->object))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2709 abort ();
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2710 pos = glyph->charpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2711
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2712 /* Check for mouse-face. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2713 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2714 extern Lisp_Object Qmouse_face;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2715 Lisp_Object mouse_face, overlay, position, *overlay_vec;
81083
223bb8e66f74 * xfaces.c (syms_of_xfaces): Delete stray semicolon.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 80994
diff changeset
2716 int noverlays, obegv, ozv;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2717 struct buffer *obuf;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2718
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2719 /* If we get an out-of-range value, return now; avoid an error. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2720 if (pos > BUF_Z (b))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2721 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2722
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2723 /* Make the window's buffer temporarily current for
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2724 overlays_at and compute_char_face. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2725 obuf = current_buffer;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2726 current_buffer = b;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2727 obegv = BEGV;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2728 ozv = ZV;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2729 BEGV = BEG;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2730 ZV = Z;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2731
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2732 /* Is this char mouse-active? */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2733 XSETINT (position, pos);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2734
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2735 /* Put all the overlays we want in a vector in overlay_vec. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2736 GET_OVERLAYS_AT (pos, overlay_vec, noverlays, NULL, 0);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2737 /* Sort overlays into increasing priority order. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2738 noverlays = sort_overlays (overlay_vec, noverlays, w);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2739
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2740 /* Check mouse-face highlighting. */
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2741 if (!(EQ (window, mouse_face_window)
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2742 && y >= mouse_face_beg_row
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2743 && y <= mouse_face_end_row
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2744 && (y > mouse_face_beg_row
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2745 || x >= mouse_face_beg_col)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2746 && (y < mouse_face_end_row
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2747 || x < mouse_face_end_col
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2748 || mouse_face_past_end)))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2749 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2750 /* Clear the display of the old active region, if any. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2751 term_clear_mouse_face ();
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2752
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2753 /* Find the highest priority overlay that has a mouse-face
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2754 property. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2755 overlay = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2756 for (i = noverlays - 1; i >= 0; --i)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2757 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2758 mouse_face = Foverlay_get (overlay_vec[i], Qmouse_face);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2759 if (!NILP (mouse_face))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2760 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2761 overlay = overlay_vec[i];
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2762 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2763 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2764 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2765
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2766 /* If no overlay applies, get a text property. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2767 if (NILP (overlay))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2768 mouse_face = Fget_text_property (position, Qmouse_face,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2769 w->buffer);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2770
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2771 /* Handle the overlay case. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2772 if (!NILP (overlay))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2773 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2774 /* Find the range of text around this char that
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2775 should be active. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2776 Lisp_Object before, after;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2777 int ignore;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2778
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2779
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2780 before = Foverlay_start (overlay);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2781 after = Foverlay_end (overlay);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2782 /* Record this as the current active region. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2783 fast_find_position (w, XFASTINT (before),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2784 &mouse_face_beg_col,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2785 &mouse_face_beg_row);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2786
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2787 mouse_face_past_end
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2788 = !fast_find_position (w, XFASTINT (after),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2789 &mouse_face_end_col,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2790 &mouse_face_end_row);
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2791 mouse_face_window = window;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2792
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2793 mouse_face_face_id
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2794 = face_at_buffer_position (w, pos, 0, 0,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2795 &ignore, pos + 1, 1);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2796
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2797 /* Display it as active. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2798 term_show_mouse_face (DRAW_MOUSE_FACE);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2799 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2800 /* Handle the text property case. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2801 else if (!NILP (mouse_face))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2802 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2803 /* Find the range of text around this char that
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2804 should be active. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2805 Lisp_Object before, after, beginning, end;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2806 int ignore;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2807
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2808 beginning = Fmarker_position (w->start);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2809 XSETINT (end, (BUF_Z (b) - XFASTINT (w->window_end_pos)));
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2810 before
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2811 = Fprevious_single_property_change (make_number (pos + 1),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2812 Qmouse_face,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2813 w->buffer, beginning);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2814 after
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2815 = Fnext_single_property_change (position, Qmouse_face,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2816 w->buffer, end);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2817
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2818 /* Record this as the current active region. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2819 fast_find_position (w, XFASTINT (before),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2820 &mouse_face_beg_col,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2821 &mouse_face_beg_row);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2822 mouse_face_past_end
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2823 = !fast_find_position (w, XFASTINT (after),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2824 &mouse_face_end_col,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2825 &mouse_face_end_row);
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2826 mouse_face_window = window;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2827
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2828 mouse_face_face_id
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2829 = face_at_buffer_position (w, pos, 0, 0,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2830 &ignore, pos + 1, 1);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2831
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2832 /* Display it as active. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2833 term_show_mouse_face (DRAW_MOUSE_FACE);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2834 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2835 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2836
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2837 /* Look for a `help-echo' property. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2838 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2839 Lisp_Object help;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2840 extern Lisp_Object Qhelp_echo;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2841
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2842 /* Check overlays first. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2843 help = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2844 for (i = noverlays - 1; i >= 0 && NILP (help); --i)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2845 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2846 overlay = overlay_vec[i];
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2847 help = Foverlay_get (overlay, Qhelp_echo);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2848 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2849
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2850 if (!NILP (help))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2851 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2852 help_echo_string = help;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2853 help_echo_window = window;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2854 help_echo_object = overlay;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2855 help_echo_pos = pos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2856 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2857 /* Try text properties. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2858 else if (NILP (help)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2859 && ((STRINGP (glyph->object)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2860 && glyph->charpos >= 0
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2861 && glyph->charpos < SCHARS (glyph->object))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2862 || (BUFFERP (glyph->object)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2863 && glyph->charpos >= BEGV
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2864 && glyph->charpos < ZV)))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2865 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2866 help = Fget_text_property (make_number (glyph->charpos),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2867 Qhelp_echo, glyph->object);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2868 if (!NILP (help))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2869 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2870 help_echo_string = help;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2871 help_echo_window = window;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2872 help_echo_object = glyph->object;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2873 help_echo_pos = glyph->charpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2874 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2875 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2876 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2877
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2878 BEGV = obegv;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2879 ZV = ozv;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2880 current_buffer = obuf;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2881 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2882 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2883 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2884
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2885 static int
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2886 term_mouse_movement (FRAME_PTR frame, Gpm_Event *event)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2887 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2888 /* Has the mouse moved off the glyph it was on at the last sighting? */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2889 if (event->x != last_mouse_x || event->y != last_mouse_y)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2890 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2891 frame->mouse_moved = 1;
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2892 term_mouse_highlight (frame, event->x, event->y);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2893 /* Remember which glyph we're now on. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2894 last_mouse_x = event->x;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2895 last_mouse_y = event->y;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2896 return 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2897 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2898 return 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2899 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2900
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2901 /* Return the current position of the mouse.
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2902
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2903 Set *f to the frame the mouse is in, or zero if the mouse is in no
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2904 Emacs frame. If it is set to zero, all the other arguments are
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2905 garbage.
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2906
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2907 Set *bar_window to Qnil, and *x and *y to the column and
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2908 row of the character cell the mouse is over.
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2909
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2910 Set *time to the time the mouse was at the returned position.
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2911
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2912 This clears mouse_moved until the next motion
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2913 event arrives. */
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2914 static void
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2915 term_mouse_position (FRAME_PTR *fp, int insist, Lisp_Object *bar_window,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2916 enum scroll_bar_part *part, Lisp_Object *x,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2917 Lisp_Object *y, unsigned long *time)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2918 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2919 struct timeval now;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2920
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2921 *fp = SELECTED_FRAME ();
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2922 (*fp)->mouse_moved = 0;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2923
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2924 *bar_window = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2925 *part = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2926
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2927 XSETINT (*x, last_mouse_x);
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2928 XSETINT (*y, last_mouse_y);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2929 gettimeofday(&now, 0);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2930 *time = (now.tv_sec * 1000) + (now.tv_usec / 1000);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2931 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2932
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2933 /* Prepare a mouse-event in *RESULT for placement in the input queue.
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2934
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2935 If the event is a button press, then note that we have grabbed
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2936 the mouse. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2937
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2938 static Lisp_Object
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2939 term_mouse_click (struct input_event *result, Gpm_Event *event,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2940 struct frame *f)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2941 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2942 struct timeval now;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2943 int i, j;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2944
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2945 result->kind = GPM_CLICK_EVENT;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2946 for (i = 0, j = GPM_B_LEFT; i < 3; i++, j >>= 1 )
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2947 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2948 if (event->buttons & j) {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2949 result->code = i; /* button number */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2950 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2951 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2952 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2953 gettimeofday(&now, 0);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2954 result->timestamp = (now.tv_sec * 1000) + (now.tv_usec / 1000);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2955
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2956 if (event->type & GPM_UP)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2957 result->modifiers = up_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2958 else if (event->type & GPM_DOWN)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2959 result->modifiers = down_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2960 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2961 result->modifiers = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2962
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2963 if (event->type & GPM_SINGLE)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2964 result->modifiers |= click_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2965
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2966 if (event->type & GPM_DOUBLE)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2967 result->modifiers |= double_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2968
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2969 if (event->type & GPM_TRIPLE)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2970 result->modifiers |= triple_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2971
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2972 if (event->type & GPM_DRAG)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2973 result->modifiers |= drag_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2974
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2975 if (!(event->type & (GPM_MOVE | GPM_DRAG))) {
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2976
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2977 /* 1 << KG_SHIFT */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2978 if (event->modifiers & (1 << 0))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2979 result->modifiers |= shift_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2980
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2981 /* 1 << KG_CTRL */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2982 if (event->modifiers & (1 << 2))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2983 result->modifiers |= ctrl_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2984
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2985 /* 1 << KG_ALT || KG_ALTGR */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2986 if (event->modifiers & (1 << 3)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2987 || event->modifiers & (1 << 1))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2988 result->modifiers |= meta_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2989 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2990
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2991 XSETINT (result->x, event->x);
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2992 XSETINT (result->y, event->y);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2993 XSETFRAME (result->frame_or_window, f);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2994 result->arg = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2995 return Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2996 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2997
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2998 int
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2999 handle_one_term_event (struct tty_display_info *tty, Gpm_Event *event, struct input_event* hold_quit)
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3000 {
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
3001 struct frame *f = XFRAME (tty->top_frame);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3002 struct input_event ie;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3003 int do_help = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3004 int count = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3005
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3006 EVENT_INIT (ie);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3007 ie.kind = NO_EVENT;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3008 ie.arg = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3009
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3010 if (event->type & (GPM_MOVE | GPM_DRAG)) {
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3011 previous_help_echo_string = help_echo_string;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3012 help_echo_string = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3013
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3014 Gpm_DrawPointer (event->x, event->y, fileno (tty->output));
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3015
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3016 if (!term_mouse_movement (f, event))
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3017 help_echo_string = previous_help_echo_string;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3018
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3019 /* If the contents of the global variable help_echo_string
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3020 has changed, generate a HELP_EVENT. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3021 if (!NILP (help_echo_string)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3022 || !NILP (previous_help_echo_string))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3023 do_help = 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3024
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3025 goto done;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3026 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3027 else {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3028 f->mouse_moved = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3029 term_mouse_click (&ie, event, f);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3030 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3031
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3032 done:
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3033 if (ie.kind != NO_EVENT)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3034 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3035 kbd_buffer_store_event_hold (&ie, hold_quit);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3036 count++;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3037 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3038
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3039 if (do_help
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3040 && !(hold_quit && hold_quit->kind != NO_EVENT))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3041 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3042 Lisp_Object frame;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3043
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3044 if (f)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3045 XSETFRAME (frame, f);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3046 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3047 frame = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3048
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3049 gen_help_event (help_echo_string, frame, help_echo_window,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3050 help_echo_object, help_echo_pos);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3051 count++;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3052 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3053
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3054 return count;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3055 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3056
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3057 DEFUN ("gpm-mouse-start", Fgpm_mouse_start, Sgpm_mouse_start,
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3058 0, 0, 0,
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3059 doc: /* Open a connection to Gpm.
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3060 Gpm-mouse can only be activated for one tty at a time. */)
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3061 ()
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3062 {
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3063 struct frame *f = SELECTED_FRAME ();
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3064 struct tty_display_info *tty
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3065 = ((f)->output_method == output_termcap
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3066 ? (f)->terminal->display_info.tty : NULL);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3067 Gpm_Connect connection;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3068
84969
6e58c1c8c0fc (Fgpm_mouse_start): Don't signal an error if already activated on this tty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84968
diff changeset
3069 if (!tty)
6e58c1c8c0fc (Fgpm_mouse_start): Don't signal an error if already activated on this tty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84968
diff changeset
3070 error ("Gpm-mouse only works in the GNU/Linux console");
6e58c1c8c0fc (Fgpm_mouse_start): Don't signal an error if already activated on this tty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84968
diff changeset
3071 if (gpm_tty == tty)
6e58c1c8c0fc (Fgpm_mouse_start): Don't signal an error if already activated on this tty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84968
diff changeset
3072 return Qnil; /* Already activated, nothing to do. */
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3073 if (gpm_tty)
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3074 error ("Gpm-mouse can only be activated for one tty at a time");
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3075
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3076 connection.eventMask = ~0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3077 connection.defaultMask = ~GPM_HARD;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3078 connection.maxMod = ~0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3079 connection.minMod = 0;
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3080 gpm_zerobased = 1;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3081
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3082 if (Gpm_Open (&connection, 0) < 0)
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3083 error ("Gpm-mouse failed to connect to the gpm daemon");
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3084 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3085 {
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3086 gpm_tty = tty;
84955
dfbee4931a6a (Fterm_open_connection): Add comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84849
diff changeset
3087 /* `init_sys_modes' arranges for mouse movements sent through gpm_fd
dfbee4931a6a (Fterm_open_connection): Add comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84849
diff changeset
3088 to generate SIGIOs. Apparently we need to call reset_sys_modes
dfbee4931a6a (Fterm_open_connection): Add comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84849
diff changeset
3089 before calling init_sys_modes. */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
3090 reset_sys_modes (tty);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
3091 init_sys_modes (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3092 add_gpm_wait_descriptor (gpm_fd);
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3093 return Qnil;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3094 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3095 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3096
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3097 DEFUN ("gpm-mouse-stop", Fgpm_mouse_stop, Sgpm_mouse_stop,
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3098 0, 0, 0,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3099 doc: /* Close a connection to Gpm. */)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3100 ()
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3101 {
84969
6e58c1c8c0fc (Fgpm_mouse_start): Don't signal an error if already activated on this tty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84968
diff changeset
3102 struct frame *f = SELECTED_FRAME ();
6e58c1c8c0fc (Fgpm_mouse_start): Don't signal an error if already activated on this tty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84968
diff changeset
3103 struct tty_display_info *tty
6e58c1c8c0fc (Fgpm_mouse_start): Don't signal an error if already activated on this tty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84968
diff changeset
3104 = ((f)->output_method == output_termcap
6e58c1c8c0fc (Fgpm_mouse_start): Don't signal an error if already activated on this tty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84968
diff changeset
3105 ? (f)->terminal->display_info.tty : NULL);
6e58c1c8c0fc (Fgpm_mouse_start): Don't signal an error if already activated on this tty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84968
diff changeset
3106
6e58c1c8c0fc (Fgpm_mouse_start): Don't signal an error if already activated on this tty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84968
diff changeset
3107 if (!tty || gpm_tty != tty)
6e58c1c8c0fc (Fgpm_mouse_start): Don't signal an error if already activated on this tty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84968
diff changeset
3108 return Qnil; /* Not activated on this terminal, nothing to do. */
6e58c1c8c0fc (Fgpm_mouse_start): Don't signal an error if already activated on this tty.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84968
diff changeset
3109
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3110 if (gpm_fd >= 0)
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3111 delete_gpm_wait_descriptor (gpm_fd);
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3112 while (Gpm_Close()); /* close all the stack */
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3113 gpm_tty = NULL;
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3114 return Qnil;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3115 }
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
3116 #endif /* HAVE_GPM */
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3117
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3118
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3119 /***********************************************************************
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3120 Initialization
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3121 ***********************************************************************/
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3122
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3123 /* Initialize the tty-dependent part of frame F. The frame must
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3124 already have its device initialized. */
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
3125
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
3126 void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3127 create_tty_output (struct frame *f)
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3128 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3129 struct tty_output *t;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3130
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3131 if (! FRAME_TERMCAP_P (f))
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3132 abort ();
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3133
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3134 t = xmalloc (sizeof (struct tty_output));
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3135 bzero (t, sizeof (struct tty_output));
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3136
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3137 t->display_info = FRAME_TERMINAL (f)->display_info.tty;
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3138
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3139 f->output_data.tty = t;
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3140 }
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3141
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3142 /* Delete the tty-dependent part of frame F. */
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3143
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3144 static void
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3145 delete_tty_output (struct frame *f)
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3146 {
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3147 if (! FRAME_TERMCAP_P (f))
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3148 abort ();
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3149
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3150 xfree (f->output_data.tty);
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3151 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3152
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3153
84461
7ec30b352b6e * xterm.c (x_create_terminal): Add comment.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84359
diff changeset
3154 /* Reset the hooks in TERMINAL. */
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3155
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3156 static void
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3157 clear_tty_hooks (struct terminal *terminal)
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3158 {
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3159 terminal->rif = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3160 terminal->cursor_to_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3161 terminal->raw_cursor_to_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3162 terminal->clear_to_end_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3163 terminal->clear_frame_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3164 terminal->clear_end_of_line_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3165 terminal->ins_del_lines_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3166 terminal->insert_glyphs_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3167 terminal->write_glyphs_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3168 terminal->delete_glyphs_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3169 terminal->ring_bell_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3170 terminal->reset_terminal_modes_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3171 terminal->set_terminal_modes_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3172 terminal->update_begin_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3173 terminal->update_end_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3174 terminal->set_terminal_window_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3175 terminal->mouse_position_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3176 terminal->frame_rehighlight_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3177 terminal->frame_raise_lower_hook = 0;
83548
c71725faff1a Merged from emacs@sv.gnu.org. Last-minute emacsclient rewrites be damned!
Karoly Lorentey <lorentey@elte.hu>
parents: 83525 73864
diff changeset
3178 terminal->fullscreen_hook = 0;
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3179 terminal->set_vertical_scroll_bar_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3180 terminal->condemn_scroll_bars_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3181 terminal->redeem_scroll_bar_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3182 terminal->judge_scroll_bars_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3183 terminal->read_socket_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3184 terminal->frame_up_to_date_hook = 0;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3185
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3186 /* Leave these two set, or suspended frames are not deleted
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3187 correctly. */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3188 terminal->delete_frame_hook = &delete_tty_output;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3189 terminal->delete_terminal_hook = &delete_tty;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3190 }
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3191
84461
7ec30b352b6e * xterm.c (x_create_terminal): Add comment.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84359
diff changeset
3192 /* Initialize hooks in TERMINAL with the values needed for a tty. */
7ec30b352b6e * xterm.c (x_create_terminal): Add comment.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84359
diff changeset
3193
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3194 static void
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3195 set_tty_hooks (struct terminal *terminal)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3196 {
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3197 terminal->rif = 0; /* ttys don't support window-based redisplay. */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3198
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3199 terminal->cursor_to_hook = &tty_cursor_to;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3200 terminal->raw_cursor_to_hook = &tty_raw_cursor_to;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3201
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3202 terminal->clear_to_end_hook = &tty_clear_to_end;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3203 terminal->clear_frame_hook = &tty_clear_frame;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3204 terminal->clear_end_of_line_hook = &tty_clear_end_of_line;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3205
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3206 terminal->ins_del_lines_hook = &tty_ins_del_lines;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3207
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3208 terminal->insert_glyphs_hook = &tty_insert_glyphs;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3209 terminal->write_glyphs_hook = &tty_write_glyphs;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3210 terminal->delete_glyphs_hook = &tty_delete_glyphs;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3211
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3212 terminal->ring_bell_hook = &tty_ring_bell;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3213
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3214 terminal->reset_terminal_modes_hook = &tty_reset_terminal_modes;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3215 terminal->set_terminal_modes_hook = &tty_set_terminal_modes;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3216 terminal->update_begin_hook = 0; /* Not needed. */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3217 terminal->update_end_hook = &tty_update_end;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3218 terminal->set_terminal_window_hook = &tty_set_terminal_window;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3219
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3220 terminal->mouse_position_hook = 0; /* Not needed. */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3221 terminal->frame_rehighlight_hook = 0; /* Not needed. */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3222 terminal->frame_raise_lower_hook = 0; /* Not needed. */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3223
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3224 terminal->set_vertical_scroll_bar_hook = 0; /* Not needed. */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3225 terminal->condemn_scroll_bars_hook = 0; /* Not needed. */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3226 terminal->redeem_scroll_bar_hook = 0; /* Not needed. */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3227 terminal->judge_scroll_bars_hook = 0; /* Not needed. */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3228
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3229 terminal->read_socket_hook = &tty_read_avail_input; /* keyboard.c */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3230 terminal->frame_up_to_date_hook = 0; /* Not needed. */
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3231
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3232 terminal->delete_frame_hook = &delete_tty_output;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3233 terminal->delete_terminal_hook = &delete_tty;
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3234 }
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3235
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3236 /* Drop the controlling terminal if fd is the same device. */
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3237 static void
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3238 dissociate_if_controlling_tty (int fd)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3239 {
83582
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3240 #ifndef WINDOWSNT
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3241 int pgid;
83154
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3242 EMACS_GET_TTY_PGRP (fd, &pgid); /* If tcgetpgrp succeeds, fd is the ctty. */
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3243 if (pgid != -1)
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3244 {
83154
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3245 #if defined (USG) && !defined (BSD_PGRPS)
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3246 setpgrp ();
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3247 no_controlling_tty = 1;
84359
b651dc7c54ac * term.c (dissociate_if_controlling_tty): Call setsid on CYGWIN.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83891
diff changeset
3248 #elif defined (CYGWIN)
b651dc7c54ac * term.c (dissociate_if_controlling_tty): Call setsid on CYGWIN.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83891
diff changeset
3249 setsid ();
b651dc7c54ac * term.c (dissociate_if_controlling_tty): Call setsid on CYGWIN.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83891
diff changeset
3250 no_controlling_tty = 1;
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3251 #else
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3252 #ifdef TIOCNOTTY /* Try BSD ioctls. */
83154
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3253 sigblock (sigmask (SIGTTOU));
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3254 fd = emacs_open (DEV_TTY, O_RDWR, 0);
83154
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3255 if (fd != -1 && ioctl (fd, TIOCNOTTY, 0) != -1)
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3256 {
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3257 no_controlling_tty = 1;
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3258 }
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3259 if (fd != -1)
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3260 emacs_close (fd);
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3261 sigunblock (sigmask (SIGTTOU));
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3262 #else
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3263 /* Unknown system. */
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3264 croak ();
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3265 #endif /* ! TIOCNOTTY */
83158
f948c9fd910c Fix parse error in term.c (ARISAWA Akihiro).
Karoly Lorentey <lorentey@elte.hu>
parents: 83154
diff changeset
3266 #endif /* ! USG */
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3267 }
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3268 #endif /* !WINDOWSNT */
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3269 }
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3270
83338
5f293f92f85e Fix compilation error in src/term.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83332
diff changeset
3271 static void maybe_fatal();
5f293f92f85e Fix compilation error in src/term.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83332
diff changeset
3272
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3273 /* Create a termcap display on the tty device with the given name and
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3274 type.
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3275
83525
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
3276 If NAME is NULL, then use the controlling tty, i.e., "/dev/tty".
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3277 Otherwise NAME should be a path to the tty device file,
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3278 e.g. "/dev/pts/7".
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3279
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3280 TERMINAL_TYPE is the termcap type of the device, e.g. "vt100".
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3281
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3282 If MUST_SUCCEED is true, then all errors are fatal. */
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
3283
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3284 struct terminal *
83341
76e51706154e Rename term_init to init_tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83338
diff changeset
3285 init_tty (char *name, char *terminal_type, int must_succeed)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3286 {
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3287 char *area = NULL;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3288 char **address = &area;
52265
84e49afb2178 (term_init): Use a buffer of size 4096 for tgetent since
Richard M. Stallman <rms@gnu.org>
parents: 51212
diff changeset
3289 char *buffer = NULL;
52314
529dd59ee898 (term_init): Remove `const' from buffer_size's declaration.
Eli Zaretskii <eliz@gnu.org>
parents: 52294
diff changeset
3290 int buffer_size = 4096;
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3291 register char *p = NULL;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3292 int status;
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3293 struct tty_display_info *tty = NULL;
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3294 struct terminal *terminal = NULL;
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3295 int ctty = 0; /* 1 if asked to open controlling tty. */
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3296
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3297 if (!terminal_type)
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3298 maybe_fatal (must_succeed, 0, 0,
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3299 "Unknown terminal type",
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3300 "Unknown terminal type");
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
3301
83525
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
3302 if (name == NULL)
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3303 name = DEV_TTY;
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3304 if (!strcmp (name, DEV_TTY))
83525
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
3305 ctty = 1;
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
3306
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3307 /* If we already have a terminal on the given device, use that. If
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3308 all such terminals are suspended, create a new one instead. */
83341
76e51706154e Rename term_init to init_tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83338
diff changeset
3309 /* XXX Perhaps this should be made explicit by having init_tty
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3310 always create a new terminal and separating terminal and frame
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
3311 creation on Lisp level. */
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3312 terminal = get_named_tty (name);
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3313 if (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3314 return terminal;
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3315
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3316 terminal = create_terminal ();
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3317 tty = (struct tty_display_info *) xmalloc (sizeof (struct tty_display_info));
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3318 bzero (tty, sizeof (struct tty_display_info));
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3319 tty->next = tty_list;
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3320 tty_list = tty;
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3321
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3322 terminal->type = output_termcap;
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3323 terminal->display_info.tty = tty;
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3324 tty->terminal = terminal;
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3325
82991
2b26656ff804 MULTI_KBOARD support for ttys. Input-related bugfixes for X+tty sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82990
diff changeset
3326 tty->Wcm = (struct cm *) xmalloc (sizeof (struct cm));
2b26656ff804 MULTI_KBOARD support for ttys. Input-related bugfixes for X+tty sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82990
diff changeset
3327 Wcm_clear (tty);
2b26656ff804 MULTI_KBOARD support for ttys. Input-related bugfixes for X+tty sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82990
diff changeset
3328
83616
b78afd4acd43 * term.c (init_tty): Better initialize ttys in windows.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83582
diff changeset
3329 #ifndef WINDOWSNT
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3330 set_tty_hooks (terminal);
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3331
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3332 {
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3333 int fd;
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3334 FILE *file;
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3335
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3336 #ifdef O_IGNORE_CTTY
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3337 if (!ctty)
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3338 /* Open the terminal device. Don't recognize it as our
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3339 controlling terminal, and don't make it the controlling tty
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3340 if we don't have one at the moment. */
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3341 fd = emacs_open (name, O_RDWR | O_IGNORE_CTTY | O_NOCTTY, 0);
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3342 else
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3343 #else
83074
34a7a8f40548 Fix background-mode on terminal frames (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
3344 /* Alas, O_IGNORE_CTTY is a GNU extension that seems to be only
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3345 defined on Hurd. On other systems, we need to explicitly
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3346 dissociate ourselves from the controlling tty when we want to
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3347 open a frame on the same terminal. */
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3348 fd = emacs_open (name, O_RDWR | O_NOCTTY, 0);
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3349 #endif /* O_IGNORE_CTTY */
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3350
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3351 if (fd < 0)
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3352 maybe_fatal (must_succeed, buffer, terminal,
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3353 "Could not open file: %s",
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3354 "Could not open file: %s",
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3355 name);
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3356 if (!isatty (fd))
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3357 {
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3358 close (fd);
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3359 maybe_fatal (must_succeed, buffer, terminal,
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3360 "Not a tty device: %s",
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3361 "Not a tty device: %s",
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3362 name);
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3363 }
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3364
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3365 #ifndef O_IGNORE_CTTY
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3366 if (!ctty)
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3367 dissociate_if_controlling_tty (fd);
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3368 #endif
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3369
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3370 file = fdopen (fd, "w+");
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3371 tty->name = xstrdup (name);
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3372 terminal->name = xstrdup (name);
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3373 tty->input = file;
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3374 tty->output = file;
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
3375 }
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3376
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
3377 tty->type = xstrdup (terminal_type);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3378
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3379 add_keyboard_wait_descriptor (fileno (tty->input));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3380
83616
b78afd4acd43 * term.c (init_tty): Better initialize ttys in windows.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83582
diff changeset
3381 #endif
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3382
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
3383 encode_terminal_src_size = 0;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
3384 encode_terminal_dst_size = 0;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
3385
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
3386 #ifdef HAVE_GPM
83630
28201311b297 * term.c (init_tty): Use terminal specific mouse_position_hook.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83629
diff changeset
3387 terminal->mouse_position_hook = term_mouse_position;
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3388 mouse_face_window = Qnil;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3389 #endif
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3390
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3391 #ifdef WINDOWSNT
83883
cbc88cef4fca (init_tty) [WINDOWSNT]: Pass terminal to
Jason Rumney <jasonr@gnu.org>
parents: 83875
diff changeset
3392 initialize_w32_display (terminal);
83889
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3393 /* The following two are inaccessible from w32console.c. */
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3394 terminal->delete_frame_hook = &delete_tty_output;
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3395 terminal->delete_terminal_hook = &delete_tty;
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3396
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3397 tty->name = xstrdup (name);
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3398 terminal->name = xstrdup (name);
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3399 tty->type = xstrdup (terminal_type);
83616
b78afd4acd43 * term.c (init_tty): Better initialize ttys in windows.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83582
diff changeset
3400
b78afd4acd43 * term.c (init_tty): Better initialize ttys in windows.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83582
diff changeset
3401 tty->output = stdout;
83889
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3402 tty->input = stdin;
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3403 add_keyboard_wait_descriptor (0);
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3404
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3405 Wcm_clear (tty);
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3406
83582
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3407 {
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3408 struct frame *f = XFRAME (selected_frame);
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3409
83889
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3410 FrameRows (tty) = FRAME_LINES (f);
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3411 FrameCols (tty) = FRAME_COLS (f);
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3412 tty->specified_window = FRAME_LINES (f);
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3413
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3414 FRAME_CAN_HAVE_SCROLL_BARS (f) = 0;
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3415 FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none;
83582
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3416 }
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3417 tty->delete_in_insert_mode = 1;
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3418
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3419 UseTabs (tty) = 0;
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3420 terminal->scroll_region_ok = 0;
83342
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
3421
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
3422 /* Seems to insert lines when it's not supposed to, messing up the
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3423 display. In doing a trace, it didn't seem to be called much, so I
83342
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
3424 don't think we're losing anything by turning it off. */
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3425 terminal->line_ins_del_ok = 0;
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3426 terminal->char_ins_del_ok = 1;
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3427
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3428 baud_rate = 19200;
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3429
83582
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3430 tty->TN_max_colors = 16; /* Required to be non-zero for tty-display-color-p */
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3431
21827
87c7f4bd99da Include cm.h after dispextern.h to avoid name conflicts
Geoff Voelker <voelker@cs.washington.edu>
parents: 21624
diff changeset
3432 #else /* not WINDOWSNT */
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3433
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3434 Wcm_clear (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3435
52265
84e49afb2178 (term_init): Use a buffer of size 4096 for tgetent since
Richard M. Stallman <rms@gnu.org>
parents: 51212
diff changeset
3436 buffer = (char *) xmalloc (buffer_size);
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3437
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3438 /* On some systems, tgetent tries to access the controlling
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3439 terminal. */
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3440 sigblock (sigmask (SIGTTOU));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3441 status = tgetent (buffer, terminal_type);
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3442 sigunblock (sigmask (SIGTTOU));
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3443
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3444 if (status < 0)
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3445 {
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3446 #ifdef TERMINFO
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3447 maybe_fatal (must_succeed, buffer, terminal,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3448 "Cannot open terminfo database file",
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3449 "Cannot open terminfo database file");
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3450 #else
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3451 maybe_fatal (must_succeed, buffer, terminal,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3452 "Cannot open termcap database file",
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3453 "Cannot open termcap database file");
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3454 #endif
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3455 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3456 if (status == 0)
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3457 {
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3458 #ifdef TERMINFO
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3459 maybe_fatal (must_succeed, buffer, terminal,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3460 "Terminal type %s is not defined",
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3461 "Terminal type %s is not defined.\n\
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3462 If that is not the actual type of terminal you have,\n\
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3463 use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3464 `setenv TERM ...') to specify the correct type. It may be necessary\n\
16894
cd8d6bf6b320 (fatal): Print a newline at the end.
Richard M. Stallman <rms@gnu.org>
parents: 16885
diff changeset
3465 to do `unset TERMINFO' (C-shell: `unsetenv TERMINFO') as well.",
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3466 terminal_type);
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3467 #else
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3468 maybe_fatal (must_succeed, buffer, terminal,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3469 "Terminal type %s is not defined",
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3470 "Terminal type %s is not defined.\n\
4499
c7bfd863aefd (term_init): Improve error messages (give sh commands).
Richard M. Stallman <rms@gnu.org>
parents: 3706
diff changeset
3471 If that is not the actual type of terminal you have,\n\
c7bfd863aefd (term_init): Improve error messages (give sh commands).
Richard M. Stallman <rms@gnu.org>
parents: 3706
diff changeset
3472 use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
c7bfd863aefd (term_init): Improve error messages (give sh commands).
Richard M. Stallman <rms@gnu.org>
parents: 3706
diff changeset
3473 `setenv TERM ...') to specify the correct type. It may be necessary\n\
16894
cd8d6bf6b320 (fatal): Print a newline at the end.
Richard M. Stallman <rms@gnu.org>
parents: 16885
diff changeset
3474 to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.",
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3475 terminal_type);
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3476 #endif
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3477 }
52265
84e49afb2178 (term_init): Use a buffer of size 4096 for tgetent since
Richard M. Stallman <rms@gnu.org>
parents: 51212
diff changeset
3478
52294
d9ae4cdf1ed1 (term_init): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 52293
diff changeset
3479 #ifndef TERMINFO
52265
84e49afb2178 (term_init): Use a buffer of size 4096 for tgetent since
Richard M. Stallman <rms@gnu.org>
parents: 51212
diff changeset
3480 if (strlen (buffer) >= buffer_size)
84e49afb2178 (term_init): Use a buffer of size 4096 for tgetent since
Richard M. Stallman <rms@gnu.org>
parents: 51212
diff changeset
3481 abort ();
52294
d9ae4cdf1ed1 (term_init): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 52293
diff changeset
3482 buffer_size = strlen (buffer);
52293
473d34d4814c (term_init): Fix previous change; don't rely on the
Kenichi Handa <handa@m17n.org>
parents: 52265
diff changeset
3483 #endif
52294
d9ae4cdf1ed1 (term_init): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 52293
diff changeset
3484 area = (char *) xmalloc (buffer_size);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3485
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3486 tty->TS_ins_line = tgetstr ("al", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3487 tty->TS_ins_multi_lines = tgetstr ("AL", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3488 tty->TS_bell = tgetstr ("bl", address);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3489 BackTab (tty) = tgetstr ("bt", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3490 tty->TS_clr_to_bottom = tgetstr ("cd", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3491 tty->TS_clr_line = tgetstr ("ce", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3492 tty->TS_clr_frame = tgetstr ("cl", address);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3493 ColPosition (tty) = NULL; /* tgetstr ("ch", address); */
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3494 AbsPosition (tty) = tgetstr ("cm", address);
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3495 CR (tty) = tgetstr ("cr", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3496 tty->TS_set_scroll_region = tgetstr ("cs", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3497 tty->TS_set_scroll_region_1 = tgetstr ("cS", address);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3498 RowPosition (tty) = tgetstr ("cv", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3499 tty->TS_del_char = tgetstr ("dc", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3500 tty->TS_del_multi_chars = tgetstr ("DC", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3501 tty->TS_del_line = tgetstr ("dl", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3502 tty->TS_del_multi_lines = tgetstr ("DL", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3503 tty->TS_delete_mode = tgetstr ("dm", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3504 tty->TS_end_delete_mode = tgetstr ("ed", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3505 tty->TS_end_insert_mode = tgetstr ("ei", address);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3506 Home (tty) = tgetstr ("ho", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3507 tty->TS_ins_char = tgetstr ("ic", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3508 tty->TS_ins_multi_chars = tgetstr ("IC", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3509 tty->TS_insert_mode = tgetstr ("im", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3510 tty->TS_pad_inserted_char = tgetstr ("ip", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3511 tty->TS_end_keypad_mode = tgetstr ("ke", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3512 tty->TS_keypad_mode = tgetstr ("ks", address);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3513 LastLine (tty) = tgetstr ("ll", address);
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3514 Right (tty) = tgetstr ("nd", address);
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3515 Down (tty) = tgetstr ("do", address);
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3516 if (!Down (tty))
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3517 Down (tty) = tgetstr ("nl", address); /* Obsolete name for "do" */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3518 #ifdef VMS
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3519 /* VMS puts a carriage return before each linefeed,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3520 so it is not safe to use linefeeds. */
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3521 if (Down (tty) && Down (tty)[0] == '\n' && Down (tty)[1] == '\0')
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3522 Down (tty) = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3523 #endif /* VMS */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3524 if (tgetflag ("bs"))
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3525 Left (tty) = "\b"; /* can't possibly be longer! */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3526 else /* (Actually, "bs" is obsolete...) */
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3527 Left (tty) = tgetstr ("le", address);
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3528 if (!Left (tty))
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3529 Left (tty) = tgetstr ("bc", address); /* Obsolete name for "le" */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3530 tty->TS_pad_char = tgetstr ("pc", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3531 tty->TS_repeat = tgetstr ("rp", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3532 tty->TS_end_standout_mode = tgetstr ("se", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3533 tty->TS_fwd_scroll = tgetstr ("sf", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3534 tty->TS_standout_mode = tgetstr ("so", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3535 tty->TS_rev_scroll = tgetstr ("sr", address);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3536 tty->Wcm->cm_tab = tgetstr ("ta", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3537 tty->TS_end_termcap_modes = tgetstr ("te", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3538 tty->TS_termcap_modes = tgetstr ("ti", address);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3539 Up (tty) = tgetstr ("up", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3540 tty->TS_visible_bell = tgetstr ("vb", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3541 tty->TS_cursor_normal = tgetstr ("ve", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3542 tty->TS_cursor_visible = tgetstr ("vs", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3543 tty->TS_cursor_invisible = tgetstr ("vi", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3544 tty->TS_set_window = tgetstr ("wi", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3545
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3546 tty->TS_enter_underline_mode = tgetstr ("us", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3547 tty->TS_exit_underline_mode = tgetstr ("ue", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3548 tty->TS_enter_bold_mode = tgetstr ("md", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3549 tty->TS_enter_dim_mode = tgetstr ("mh", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3550 tty->TS_enter_blink_mode = tgetstr ("mb", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3551 tty->TS_enter_reverse_mode = tgetstr ("mr", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3552 tty->TS_enter_alt_charset_mode = tgetstr ("as", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3553 tty->TS_exit_alt_charset_mode = tgetstr ("ae", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3554 tty->TS_exit_attribute_mode = tgetstr ("me", address);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
3555
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3556 MultiUp (tty) = tgetstr ("UP", address);
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3557 MultiDown (tty) = tgetstr ("DO", address);
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3558 MultiLeft (tty) = tgetstr ("LE", address);
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3559 MultiRight (tty) = tgetstr ("RI", address);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3560
26425
08c26156186a (term_init): If "op" isn't available, don't support color
Gerd Moellmann <gerd@gnu.org>
parents: 25727
diff changeset
3561 /* SVr4/ANSI color suppert. If "op" isn't available, don't support
08c26156186a (term_init): If "op" isn't available, don't support color
Gerd Moellmann <gerd@gnu.org>
parents: 25727
diff changeset
3562 color because we can't switch back to the default foreground and
08c26156186a (term_init): If "op" isn't available, don't support color
Gerd Moellmann <gerd@gnu.org>
parents: 25727
diff changeset
3563 background. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3564 tty->TS_orig_pair = tgetstr ("op", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3565 if (tty->TS_orig_pair)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3566 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3567 tty->TS_set_foreground = tgetstr ("AF", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3568 tty->TS_set_background = tgetstr ("AB", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3569 if (!tty->TS_set_foreground)
26425
08c26156186a (term_init): If "op" isn't available, don't support color
Gerd Moellmann <gerd@gnu.org>
parents: 25727
diff changeset
3570 {
08c26156186a (term_init): If "op" isn't available, don't support color
Gerd Moellmann <gerd@gnu.org>
parents: 25727
diff changeset
3571 /* SVr4. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3572 tty->TS_set_foreground = tgetstr ("Sf", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3573 tty->TS_set_background = tgetstr ("Sb", address);
26425
08c26156186a (term_init): If "op" isn't available, don't support color
Gerd Moellmann <gerd@gnu.org>
parents: 25727
diff changeset
3574 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
3575
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3576 tty->TN_max_colors = tgetnum ("Co");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3577 tty->TN_max_pairs = tgetnum ("pa");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3578
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3579 tty->TN_no_color_video = tgetnum ("NC");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3580 if (tty->TN_no_color_video == -1)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3581 tty->TN_no_color_video = 0;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3582 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3583
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3584 tty_default_color_capabilities (tty, 1);
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
3585
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3586 MagicWrap (tty) = tgetflag ("xn");
11530
a265aaa699e0 (term_init): MagicWrap implies AutoWrap.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
3587 /* Since we make MagicWrap terminals look like AutoWrap, we need to have
a265aaa699e0 (term_init): MagicWrap implies AutoWrap.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
3588 the former flag imply the latter. */
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3589 AutoWrap (tty) = MagicWrap (tty) || tgetflag ("am");
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3590 terminal->memory_below_frame = tgetflag ("db");
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3591 tty->TF_hazeltine = tgetflag ("hz");
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3592 terminal->must_write_spaces = tgetflag ("in");
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3593 tty->meta_key = tgetflag ("km") || tgetflag ("MT");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3594 tty->TF_insmode_motion = tgetflag ("mi");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3595 tty->TF_standout_motion = tgetflag ("ms");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3596 tty->TF_underscore = tgetflag ("ul");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3597 tty->TF_teleray = tgetflag ("xt");
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3598
83883
cbc88cef4fca (init_tty) [WINDOWSNT]: Pass terminal to
Jason Rumney <jasonr@gnu.org>
parents: 83875
diff changeset
3599 #endif /* !WINDOWSNT */
83317
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
3600 #ifdef MULTI_KBOARD
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3601 terminal->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3602 init_kboard (terminal->kboard);
85614
9f3a25157e4f Make `window-system' into a keyboard-local variable (rather than
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 85106
diff changeset
3603 terminal->kboard->Vwindow_system = Qnil;
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3604 terminal->kboard->next_kboard = all_kboards;
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3605 all_kboards = terminal->kboard;
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3606 terminal->kboard->reference_count++;
83317
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
3607 /* Don't let the initial kboard remain current longer than necessary.
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
3608 That would cause problems if a file loaded on startup tries to
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
3609 prompt in the mini-buffer. */
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
3610 if (current_kboard == initial_kboard)
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3611 current_kboard = terminal->kboard;
83883
cbc88cef4fca (init_tty) [WINDOWSNT]: Pass terminal to
Jason Rumney <jasonr@gnu.org>
parents: 83875
diff changeset
3612 #ifndef WINDOWSNT
83619
5da6a46ddbd6 * s/darwin.h (SYSTEM_PURESIZE_EXTRA): Define here.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83616
diff changeset
3613 term_get_fkeys (address, terminal->kboard);
83317
e235da12dd03 Make sure the terminfo function key sequences are set up in the correct function-key-map.
Karoly Lorentey <lorentey@elte.hu>
parents: 83315
diff changeset
3614 #endif
83883
cbc88cef4fca (init_tty) [WINDOWSNT]: Pass terminal to
Jason Rumney <jasonr@gnu.org>
parents: 83875
diff changeset
3615 #endif
cbc88cef4fca (init_tty) [WINDOWSNT]: Pass terminal to
Jason Rumney <jasonr@gnu.org>
parents: 83875
diff changeset
3616
cbc88cef4fca (init_tty) [WINDOWSNT]: Pass terminal to
Jason Rumney <jasonr@gnu.org>
parents: 83875
diff changeset
3617 #ifndef WINDOWSNT
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
3618 /* Get frame size from system, or else from termcap. */
16093
4c74d7f1cfa6 (term_init): Avoid type-mismatch calling get_frame_size.
Richard M. Stallman <rms@gnu.org>
parents: 15974
diff changeset
3619 {
4c74d7f1cfa6 (term_init): Avoid type-mismatch calling get_frame_size.
Richard M. Stallman <rms@gnu.org>
parents: 15974
diff changeset
3620 int height, width;
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
3621 get_tty_size (fileno (tty->input), &width, &height);
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3622 FrameCols (tty) = width;
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3623 FrameRows (tty) = height;
16093
4c74d7f1cfa6 (term_init): Avoid type-mismatch calling get_frame_size.
Richard M. Stallman <rms@gnu.org>
parents: 15974
diff changeset
3624 }
4c74d7f1cfa6 (term_init): Avoid type-mismatch calling get_frame_size.
Richard M. Stallman <rms@gnu.org>
parents: 15974
diff changeset
3625
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3626 if (FrameCols (tty) <= 0)
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3627 FrameCols (tty) = tgetnum ("co");
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3628 if (FrameRows (tty) <= 0)
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3629 FrameRows (tty) = tgetnum ("li");
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3630
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3631 if (FrameRows (tty) < 3 || FrameCols (tty) < 3)
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3632 maybe_fatal (must_succeed, NULL, terminal,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3633 "Screen size %dx%d is too small"
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3634 "Screen size %dx%d is too small",
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3635 FrameCols (tty), FrameRows (tty));
10332
e14daed4a820 (term_init): Fatal error if screen is too small.
Richard M. Stallman <rms@gnu.org>
parents: 10261
diff changeset
3636
53225
4250e7e26247 Add a level of indirection to terminal characteristics.
Karoly Lorentey <lorentey@elte.hu>
parents: 52681
diff changeset
3637 #if 0 /* This is not used anywhere. */
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3638 tty->terminal->min_padding_speed = tgetnum ("pb");
53225
4250e7e26247 Add a level of indirection to terminal characteristics.
Karoly Lorentey <lorentey@elte.hu>
parents: 52681
diff changeset
3639 #endif
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3640
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3641 TabWidth (tty) = tgetnum ("tw");
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3642
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3643 #ifdef VMS
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3644 /* These capabilities commonly use ^J.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3645 I don't know why, but sending them on VMS does not work;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3646 it causes following spaces to be lost, sometimes.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3647 For now, the simplest fix is to avoid using these capabilities ever. */
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3648 if (Down (tty) && Down (tty)[0] == '\n')
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3649 Down (tty) = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3650 #endif /* VMS */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3651
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3652 if (!tty->TS_bell)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3653 tty->TS_bell = "\07";
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3654
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3655 if (!tty->TS_fwd_scroll)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3656 tty->TS_fwd_scroll = Down (tty);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3657
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3658 PC = tty->TS_pad_char ? *tty->TS_pad_char : 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3659
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3660 if (TabWidth (tty) < 0)
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3661 TabWidth (tty) = 8;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
3662
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3663 /* Turned off since /etc/termcap seems to have :ta= for most terminals
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3664 and newer termcap doc does not seem to say there is a default.
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3665 if (!tty->Wcm->cm_tab)
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3666 tty->Wcm->cm_tab = "\t";
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3667 */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3668
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3669 /* We don't support standout modes that use `magic cookies', so
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3670 turn off any that do. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3671 if (tty->TS_standout_mode && tgetnum ("sg") >= 0)
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3672 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3673 tty->TS_standout_mode = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3674 tty->TS_end_standout_mode = 0;
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3675 }
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3676 if (tty->TS_enter_underline_mode && tgetnum ("ug") >= 0)
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3677 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3678 tty->TS_enter_underline_mode = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3679 tty->TS_exit_underline_mode = 0;
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3680 }
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3681
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3682 /* If there's no standout mode, try to use underlining instead. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3683 if (tty->TS_standout_mode == 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3684 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3685 tty->TS_standout_mode = tty->TS_enter_underline_mode;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3686 tty->TS_end_standout_mode = tty->TS_exit_underline_mode;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3687 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3688
5933
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3689 /* If no `se' string, try using a `me' string instead.
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3690 If that fails, we can't use standout mode at all. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3691 if (tty->TS_end_standout_mode == 0)
5933
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3692 {
8612
86065bec6fc9 (term_init): Added missing argument to tgetstr.
Richard M. Stallman <rms@gnu.org>
parents: 8027
diff changeset
3693 char *s = tgetstr ("me", address);
5933
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3694 if (s != 0)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3695 tty->TS_end_standout_mode = s;
5933
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3696 else
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3697 tty->TS_standout_mode = 0;
5933
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3698 }
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3699
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3700 if (tty->TF_teleray)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3701 {
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3702 tty->Wcm->cm_tab = 0;
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3703 /* We can't support standout mode, because it uses magic cookies. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3704 tty->TS_standout_mode = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3705 /* But that means we cannot rely on ^M to go to column zero! */
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3706 CR (tty) = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3707 /* LF can't be trusted either -- can alter hpos */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3708 /* if move at column 0 thru a line with TS_standout_mode */
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3709 Down (tty) = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3710 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3711
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3712 /* Special handling for certain terminal types known to need it */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3713
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3714 if (!strcmp (terminal_type, "supdup"))
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3715 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3716 terminal->memory_below_frame = 1;
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3717 tty->Wcm->cm_losewrap = 1;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3718 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3719 if (!strncmp (terminal_type, "c10", 3)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3720 || !strcmp (terminal_type, "perq"))
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3721 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3722 /* Supply a makeshift :wi string.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3723 This string is not valid in general since it works only
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3724 for windows starting at the upper left corner;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3725 but that is all Emacs uses.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3726
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
3727 This string works only if the frame is using
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3728 the top of the video memory, because addressing is memory-relative.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3729 So first check the :ti string to see if that is true.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3730
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3731 It would be simpler if the :wi string could go in the termcap
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3732 entry, but it can't because it is not fully valid.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3733 If it were in the termcap entry, it would confuse other programs. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3734 if (!tty->TS_set_window)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3735 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3736 p = tty->TS_termcap_modes;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3737 while (*p && strcmp (p, "\033v "))
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3738 p++;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3739 if (*p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3740 tty->TS_set_window = "\033v%C %C %C %C ";
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3741 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3742 /* Termcap entry often fails to have :in: flag */
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3743 terminal->must_write_spaces = 1;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3744 /* :ti string typically fails to have \E^G! in it */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3745 /* This limits scope of insert-char to one line. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3746 strcpy (area, tty->TS_termcap_modes);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3747 strcat (area, "\033\007!");
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3748 tty->TS_termcap_modes = area;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3749 area += strlen (area) + 1;
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3750 p = AbsPosition (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3751 /* Change all %+ parameters to %C, to handle
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3752 values above 96 correctly for the C100. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3753 while (*p)
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3754 {
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3755 if (p[0] == '%' && p[1] == '+')
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3756 p[1] = 'C';
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3757 p++;
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3758 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3759 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3760
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3761 tty->specified_window = FrameRows (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3762
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3763 if (Wcm_init (tty) == -1) /* can't do cursor motion */
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3764 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3765 maybe_fatal (must_succeed, NULL, terminal,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3766 "Terminal type \"%s\" is not powerful enough to run Emacs",
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3767 #ifdef VMS
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3768 "Terminal type \"%s\" is not powerful enough to run Emacs.\n\
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3769 It lacks the ability to position the cursor.\n\
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3770 If that is not the actual type of terminal you have, use either the\n\
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3771 DCL command `SET TERMINAL/DEVICE= ...' for DEC-compatible terminals,\n\
16894
cd8d6bf6b320 (fatal): Print a newline at the end.
Richard M. Stallman <rms@gnu.org>
parents: 16885
diff changeset
3772 or `define EMACS_TERM \"terminal type\"' for non-DEC terminals.",
12412
7f2c068121d8 (term_init): Alternative error messages for TERMCAP/TERMINFO.
Richard M. Stallman <rms@gnu.org>
parents: 12071
diff changeset
3773 #else /* not VMS */
7f2c068121d8 (term_init): Alternative error messages for TERMCAP/TERMINFO.
Richard M. Stallman <rms@gnu.org>
parents: 12071
diff changeset
3774 # ifdef TERMINFO
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3775 "Terminal type \"%s\" is not powerful enough to run Emacs.\n\
12412
7f2c068121d8 (term_init): Alternative error messages for TERMCAP/TERMINFO.
Richard M. Stallman <rms@gnu.org>
parents: 12071
diff changeset
3776 It lacks the ability to position the cursor.\n\
7f2c068121d8 (term_init): Alternative error messages for TERMCAP/TERMINFO.
Richard M. Stallman <rms@gnu.org>
parents: 12071
diff changeset
3777 If that is not the actual type of terminal you have,\n\
7f2c068121d8 (term_init): Alternative error messages for TERMCAP/TERMINFO.
Richard M. Stallman <rms@gnu.org>
parents: 12071
diff changeset
3778 use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
7f2c068121d8 (term_init): Alternative error messages for TERMCAP/TERMINFO.
Richard M. Stallman <rms@gnu.org>
parents: 12071
diff changeset
3779 `setenv TERM ...') to specify the correct type. It may be necessary\n\
16894
cd8d6bf6b320 (fatal): Print a newline at the end.
Richard M. Stallman <rms@gnu.org>
parents: 16885
diff changeset
3780 to do `unset TERMINFO' (C-shell: `unsetenv TERMINFO') as well.",
12412
7f2c068121d8 (term_init): Alternative error messages for TERMCAP/TERMINFO.
Richard M. Stallman <rms@gnu.org>
parents: 12071
diff changeset
3781 # else /* TERMCAP */
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3782 "Terminal type \"%s\" is not powerful enough to run Emacs.\n\
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3783 It lacks the ability to position the cursor.\n\
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3784 If that is not the actual type of terminal you have,\n\
4499
c7bfd863aefd (term_init): Improve error messages (give sh commands).
Richard M. Stallman <rms@gnu.org>
parents: 3706
diff changeset
3785 use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
c7bfd863aefd (term_init): Improve error messages (give sh commands).
Richard M. Stallman <rms@gnu.org>
parents: 3706
diff changeset
3786 `setenv TERM ...') to specify the correct type. It may be necessary\n\
16894
cd8d6bf6b320 (fatal): Print a newline at the end.
Richard M. Stallman <rms@gnu.org>
parents: 16885
diff changeset
3787 to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.",
12412
7f2c068121d8 (term_init): Alternative error messages for TERMCAP/TERMINFO.
Richard M. Stallman <rms@gnu.org>
parents: 12071
diff changeset
3788 # endif /* TERMINFO */
7f2c068121d8 (term_init): Alternative error messages for TERMCAP/TERMINFO.
Richard M. Stallman <rms@gnu.org>
parents: 12071
diff changeset
3789 #endif /*VMS */
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3790 terminal_type);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3791 }
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3792
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3793 if (FrameRows (tty) <= 0 || FrameCols (tty) <= 0)
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3794 maybe_fatal (must_succeed, NULL, terminal,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3795 "Could not determine the frame size",
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3796 "Could not determine the frame size");
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3797
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3798 tty->delete_in_insert_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3799 = tty->TS_delete_mode && tty->TS_insert_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3800 && !strcmp (tty->TS_delete_mode, tty->TS_insert_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3801
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3802 tty->se_is_so = (tty->TS_standout_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3803 && tty->TS_end_standout_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3804 && !strcmp (tty->TS_standout_mode, tty->TS_end_standout_mode));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3805
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
3806 UseTabs (tty) = tabs_safe_p (fileno (tty->input)) && TabWidth (tty) == 8;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3807
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3808 terminal->scroll_region_ok
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3809 = (tty->Wcm->cm_abs
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3810 && (tty->TS_set_window || tty->TS_set_scroll_region || tty->TS_set_scroll_region_1));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3811
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3812 terminal->line_ins_del_ok
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3813 = (((tty->TS_ins_line || tty->TS_ins_multi_lines)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3814 && (tty->TS_del_line || tty->TS_del_multi_lines))
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3815 || (terminal->scroll_region_ok
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3816 && tty->TS_fwd_scroll && tty->TS_rev_scroll));
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3817
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3818 terminal->char_ins_del_ok
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3819 = ((tty->TS_ins_char || tty->TS_insert_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3820 || tty->TS_pad_inserted_char || tty->TS_ins_multi_chars)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3821 && (tty->TS_del_char || tty->TS_del_multi_chars));
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3822
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3823 terminal->fast_clear_end_of_line = tty->TS_clr_line != 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3824
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
3825 init_baud_rate (fileno (tty->input));
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3826
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3827 #ifdef AIXHFT
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3828 /* The HFT system on AIX doesn't optimize for scrolling, so it's
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3829 really ugly at times. */
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3830 terminal->line_ins_del_ok = 0;
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3831 terminal->char_ins_del_ok = 0;
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3832 #endif
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3833
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3834 /* Don't do this. I think termcap may still need the buffer. */
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3835 /* xfree (buffer); */
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3836
84849
ba20cee1aec0 (init_tty): Call init_sys_modes on WINDOWSNT also.
Jason Rumney <jasonr@gnu.org>
parents: 84779
diff changeset
3837 #endif /* not WINDOWSNT */
ba20cee1aec0 (init_tty): Call init_sys_modes on WINDOWSNT also.
Jason Rumney <jasonr@gnu.org>
parents: 84779
diff changeset
3838
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3839 /* Init system terminal modes (RAW or CBREAK, etc.). */
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3840 init_sys_modes (tty);
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3841
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3842 return terminal;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3843 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3844
83341
76e51706154e Rename term_init to init_tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83338
diff changeset
3845 /* Auxiliary error-handling function for init_tty.
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3846 Free BUFFER and delete TERMINAL, then call error or fatal
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
3847 with str1 or str2, respectively, according to MUST_SUCCEED. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
3848
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3849 static void
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3850 maybe_fatal (must_succeed, buffer, terminal, str1, str2, arg1, arg2)
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3851 int must_succeed;
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3852 char *buffer;
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3853 struct terminal *terminal;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3854 char *str1, *str2, *arg1, *arg2;
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3855 {
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3856 if (buffer)
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3857 xfree (buffer);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3858
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3859 if (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3860 delete_tty (terminal);
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3861
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3862 if (must_succeed)
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3863 fatal (str2, arg1, arg2);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3864 else
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3865 error (str1, arg1, arg2);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3866
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3867 abort ();
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3868 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3869
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
3870 void
86288
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
3871 fatal (const char *str, ...)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3872 {
86288
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
3873 va_list ap;
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
3874 va_start (ap, str);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3875 fprintf (stderr, "emacs: ");
86288
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
3876 vfprintf (stderr, str, ap);
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
3877 va_end (ap);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3878 fflush (stderr);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3879 exit (1);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3880 }
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
3881
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3882
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3883
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3884 /* Delete the given tty terminal, closing all frames on it. */
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
3885
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3886 static void
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3887 delete_tty (struct terminal *terminal)
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
3888 {
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3889 struct tty_display_info *tty;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3890 Lisp_Object tail, frame;
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3891 int last_terminal;
82995
039bd6989d29 Portability fixes (now it compiles & runs fine on Solaris).
Karoly Lorentey <lorentey@elte.hu>
parents: 82992
diff changeset
3892
83525
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
3893 /* Protect against recursive calls. Fdelete_frame in
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
3894 delete_terminal calls us back when it deletes our last frame. */
84692
0d8dd9a91520 (get_tty_terminal): Don't treat output_initial specially.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84461
diff changeset
3895 if (!terminal->name)
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3896 return;
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3897
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3898 if (terminal->type != output_termcap)
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3899 abort ();
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3900
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3901 tty = terminal->display_info.tty;
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3902
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3903 last_terminal = 1;
83050
85e5a786f728 Don't delete a tty if it's the last device with frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83041
diff changeset
3904 FOR_EACH_FRAME (tail, frame)
85e5a786f728 Don't delete a tty if it's the last device with frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83041
diff changeset
3905 {
85e5a786f728 Don't delete a tty if it's the last device with frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83041
diff changeset
3906 struct frame *f = XFRAME (frame);
85e5a786f728 Don't delete a tty if it's the last device with frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83041
diff changeset
3907 if (FRAME_LIVE_P (f) && (!FRAME_TERMCAP_P (f) || FRAME_TTY (f) != tty))
85e5a786f728 Don't delete a tty if it's the last device with frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83041
diff changeset
3908 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3909 last_terminal = 0;
83050
85e5a786f728 Don't delete a tty if it's the last device with frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83041
diff changeset
3910 break;
85e5a786f728 Don't delete a tty if it's the last device with frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83041
diff changeset
3911 }
85e5a786f728 Don't delete a tty if it's the last device with frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83041
diff changeset
3912 }
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3913 if (last_terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3914 error ("Attempt to delete the sole terminal device with live frames");
83050
85e5a786f728 Don't delete a tty if it's the last device with frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83041
diff changeset
3915
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3916 if (tty == tty_list)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3917 tty_list = tty->next;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3918 else
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3919 {
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
3920 struct tty_display_info *p;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3921 for (p = tty_list; p && p->next != tty; p = p->next)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3922 ;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3923
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3924 if (! p)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3925 /* This should not happen. */
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3926 abort ();
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3927
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3928 p->next = tty->next;
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3929 tty->next = 0;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3930 }
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3931
83342
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
3932 /* reset_sys_modes needs a valid device, so this call needs to be
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3933 before delete_terminal. */
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3934 reset_sys_modes (tty);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3935
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3936 delete_terminal (terminal);
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3937
83525
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
3938 if (tty->name)
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
3939 xfree (tty->name);
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
3940
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3941 if (tty->type)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3942 xfree (tty->type);
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3943
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3944 if (tty->input)
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3945 {
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3946 delete_keyboard_wait_descriptor (fileno (tty->input));
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3947 if (tty->input != stdin)
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3948 fclose (tty->input);
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3949 }
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3950 if (tty->output && tty->output != stdout && tty->output != tty->input)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3951 fclose (tty->output);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3952 if (tty->termscript)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3953 fclose (tty->termscript);
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3954
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3955 if (tty->old_tty)
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3956 xfree (tty->old_tty);
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3957
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3958 if (tty->Wcm)
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3959 xfree (tty->Wcm);
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3960
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
3961 bzero (tty, sizeof (struct tty_display_info));
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3962 xfree (tty);
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
3963 }
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
3964
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3965
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3966
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
3967 /* Mark the pointers in the tty_display_info objects.
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3968 Called by the Fgarbage_collector. */
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
3969
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3970 void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3971 mark_ttys (void)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3972 {
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
3973 struct tty_display_info *tty;
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3974
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3975 for (tty = tty_list; tty; tty = tty->next)
83762
ffb5395e8445 (mark_ttys): Don't bother checking top_frame (incorrectly)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 83653
diff changeset
3976 mark_object (tty->top_frame);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3977 }
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3978
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3979
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3980
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
3981 void
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
3982 syms_of_term ()
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
3983 {
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39914
diff changeset
3984 DEFVAR_BOOL ("system-uses-terminfo", &system_uses_terminfo,
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39914
diff changeset
3985 doc: /* Non-nil means the system uses terminfo rather than termcap.
39914
91951fb5b9e5 Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents: 39697
diff changeset
3986 This variable can be used by terminal emulator packages. */);
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
3987 #ifdef TERMINFO
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
3988 system_uses_terminfo = 1;
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
3989 #else
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
3990 system_uses_terminfo = 0;
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
3991 #endif
15974
61249a8fe735 (Vring_bell_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15094
diff changeset
3992
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
3993 DEFVAR_LISP ("suspend-tty-functions", &Vsuspend_tty_functions,
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
3994 doc: /* Functions to be run after suspending a tty.
83525
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
3995 The functions are run with one argument, the terminal id to be suspended.
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
3996 See `suspend-tty'. */);
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
3997 Vsuspend_tty_functions = Qnil;
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
3998
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
3999
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4000 DEFVAR_LISP ("resume-tty-functions", &Vresume_tty_functions,
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4001 doc: /* Functions to be run after resuming a tty.
83525
b2e7507b55c6 Fix C-x 5 2 on the controlling tty; fix some possible crash conditions and a memory leak.
Karoly Lorentey <lorentey@elte.hu>
parents: 83522
diff changeset
4002 The functions are run with one argument, the terminal id that was revived.
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
4003 See `resume-tty'. */);
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4004 Vresume_tty_functions = Qnil;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
4005
67935
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4006 DEFVAR_BOOL ("visible-cursor", &visible_cursor,
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4007 doc: /* Non-nil means to make the cursor very visible.
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4008 This only has an effect when running in a text terminal.
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4009 What means \"very visible\" is up to your terminal. It may make the cursor
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4010 bigger, or it may make it blink, or it may do nothing at all. */);
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4011 visible_cursor = 1;
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4012
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
4013 defsubr (&Stty_display_color_p);
42954
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
4014 defsubr (&Stty_display_color_cells);
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
4015 defsubr (&Stty_no_underline);
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4016 defsubr (&Stty_type);
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4017 defsubr (&Scontrolling_tty_p);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
4018 defsubr (&Ssuspend_tty);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
4019 defsubr (&Sresume_tty);
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
4020 #ifdef HAVE_GPM
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
4021 defsubr (&Sgpm_mouse_start);
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
4022 defsubr (&Sgpm_mouse_stop);
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
4023
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
4024 staticpro (&mouse_face_window);
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
4025 #endif /* HAVE_GPM */
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4026 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
4027
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4028
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4029
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52314
diff changeset
4030 /* arch-tag: 498e7449-6f2e-45e2-91dd-b7d4ca488193
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52314
diff changeset
4031 (do not change this comment) */