annotate src/term.c @ 111237:6788b08ca420

Handle glyphless characters on tty.
author Kenichi Handa <handa@m17n.org>
date Mon, 01 Nov 2010 13:09:26 +0900
parents f2f31dc6273a
children 717c8af799d3
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,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106244
diff changeset
3 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
79759
fc2bcd2a8aad Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78566
diff changeset
4 Free Software Foundation, Inc.
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 This file is part of GNU Emacs.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93984
diff changeset
8 GNU Emacs is free software: you can redistribute it and/or modify
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 it under the terms of the GNU General Public License as published by
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93984
diff changeset
10 the Free Software Foundation, either version 3 of the License, or
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93984
diff changeset
11 (at your option) any later version.
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 GNU Emacs is distributed in the hope that it will be useful,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 GNU General Public License for more details.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93984
diff changeset
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
21 /* New redisplay, TTY faces by Gerd Moellmann <gerd@gnu.org>. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22
7900
60795e826dad Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents: 7649
diff changeset
23 #include <config.h>
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include <stdio.h>
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include <ctype.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
26 #include <errno.h>
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
27 #include <sys/file.h>
83644
0ece58f6e0aa Merge from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83635 81817
diff changeset
28
81817
e6ed0991129c Include unistd.h only if HAVE_UNISTD_H.
Richard M. Stallman <rms@gnu.org>
parents: 81811
diff changeset
29 #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
30 #include <unistd.h>
81817
e6ed0991129c Include unistd.h only if HAVE_UNISTD_H.
Richard M. Stallman <rms@gnu.org>
parents: 81811
diff changeset
31 #endif
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39914
diff changeset
32
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
33 #include <signal.h>
86288
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
34 #include <stdarg.h>
105669
68dd71358159 * alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105661
diff changeset
35 #include <setjmp.h>
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
36
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
37 #include "lisp.h"
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 #include "termchar.h"
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 #include "termopts.h"
88391
1953d0d56cd7 Include "buffer.h" and "character.h".
Kenichi Handa <handa@m17n.org>
parents: 43073
diff changeset
40 #include "buffer.h"
1953d0d56cd7 Include "buffer.h" and "character.h".
Kenichi Handa <handa@m17n.org>
parents: 43073
diff changeset
41 #include "character.h"
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
42 #include "charset.h"
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
43 #include "coding.h"
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
44 #include "composite.h"
31102
6a0caa788013 Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents: 30848
diff changeset
45 #include "keyboard.h"
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
46 #include "frame.h"
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 #include "disptab.h"
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 #include "termhooks.h"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
49 #include "dispextern.h"
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
50 #include "window.h"
39697
0b986bb45526 Include keymap.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
51 #include "keymap.h"
76627
c53e7d075f1a Include blockinput.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 75348
diff changeset
52 #include "blockinput.h"
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
53 #include "syssignal.h"
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
54 #include "systty.h"
81308
16181a4d64bf Include intervals.h to declare Fget_text_property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81127
diff changeset
55 #include "intervals.h"
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
56 #ifdef MSDOS
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
57 #include "msdos.h"
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
58 static int been_here = -1;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
59 #endif
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
60
33672
a94852aef620 Don't try to include termcap.h; see comment there.
Gerd Moellmann <gerd@gnu.org>
parents: 33006
diff changeset
61 /* 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
62 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
63 won't find. */
109100
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
64 extern void tputs (const char *, int, int (*)(int));
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
65 extern int tgetent (char *, const char *);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
66 extern int tgetflag (char *id);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
67 extern int tgetnum (char *id);
25727
46fe79182b54 (OUTPUT_IF, OUTPUT1_IF): Use do-while.
Gerd Moellmann <gerd@gnu.org>
parents: 25675
diff changeset
68
21827
87c7f4bd99da Include cm.h after dispextern.h to avoid name conflicts
Geoff Voelker <voelker@cs.washington.edu>
parents: 21624
diff changeset
69 #include "cm.h"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
70 #ifdef HAVE_X_WINDOWS
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
71 #include "xterm.h"
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
72 #endif
8898
07bca49c7f84 Declare Fmake_sparse_keymap.
Karl Heuer <kwzh@gnu.org>
parents: 8806
diff changeset
73
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
74 #ifndef O_RDWR
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
75 #define O_RDWR 2
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
76 #endif
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
77
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
78 #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
79 #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
80 #endif
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
81
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
82 /* 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
83 #ifdef WINDOWSNT
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
84 #define DEV_TTY "CONOUT$"
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
85 #else
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
86 #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
87 #endif
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
88
109100
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
89 static void tty_set_scroll_region (struct frame *f, int start, int stop);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
90 static void turn_on_face (struct frame *, int face_id);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
91 static void turn_off_face (struct frame *, int face_id);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
92 static void tty_show_cursor (struct tty_display_info *);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
93 static void tty_hide_cursor (struct tty_display_info *);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
94 static void tty_background_highlight (struct tty_display_info *tty);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
95 static void clear_tty_hooks (struct terminal *terminal);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
96 static void set_tty_hooks (struct terminal *terminal);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
97 static void dissociate_if_controlling_tty (int fd);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
98 static void delete_tty (struct terminal *);
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
99 static void maybe_fatal (int must_succeed, struct terminal *terminal,
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
100 const char *str1, const char *str2, ...) NO_RETURN;
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
101 static void vfatal (const char *str, va_list ap) NO_RETURN;
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
102
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
103
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
104 #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
105 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
106 (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
107 - curY (tty)), \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
108 cmputc)
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
109
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
110 #define OUTPUT1(tty, a) emacs_tputs ((tty), a, 1, cmputc)
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
111 #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
112
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
113 #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
114 do { \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
115 if (a) \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
116 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
117 (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
118 - curY (tty) ), \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
119 cmputc); \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
120 } while (0)
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
121
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
122 #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
123
67935
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
124 /* 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
125
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
126 static int visible_cursor;
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
127
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
128 /* Display space properties */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
129
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
130 /* 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
131 Lisp_Object Vsuspend_tty_functions;
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
132
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
133 /* 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
134 Lisp_Object Vresume_tty_functions;
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
135
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
136 /* 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
137 struct tty_display_info *tty_list;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
139 /* 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
140 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
141 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
142 else. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 int no_redraw_on_reenter;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
145 /* 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
146 corresponding attribute cannot be combined with colors. */
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
147
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
148 enum no_color_bit
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
149 {
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
150 NC_STANDOUT = 1 << 0,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
151 NC_UNDERLINE = 1 << 1,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
152 NC_REVERSE = 1 << 2,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
153 NC_BLINK = 1 << 3,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
154 NC_DIM = 1 << 4,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
155 NC_BOLD = 1 << 5,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
156 NC_INVIS = 1 << 6,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
157 NC_PROTECT = 1 << 7,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
158 NC_ALT_CHARSET = 1 << 8
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
159 };
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
160
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 /* internal state */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162
10771
d564078d10c6 (calculate_costs): Update max_frame_height, max_frame_width.
Richard M. Stallman <rms@gnu.org>
parents: 10481
diff changeset
163 /* The largest frame width in any call to calculate_costs. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
164
51212
332134065648 Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50227
diff changeset
165 int max_frame_cols;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
166
10771
d564078d10c6 (calculate_costs): Update max_frame_height, max_frame_width.
Richard M. Stallman <rms@gnu.org>
parents: 10481
diff changeset
167 /* The largest frame height in any call to calculate_costs. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
168
51212
332134065648 Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50227
diff changeset
169 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
170
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
171 /* 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
172 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
173 static int no_controlling_tty;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
175 /* Provided for lisp packages. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
176
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
177 static int system_uses_terminfo;
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
178
109516
68ca98ae70fb Make building under stricter warning flags somewhat cleaner.
Juanma Barranquero <lekktu@gmail.com>
parents: 109376
diff changeset
179 char *tparam (char *, char *, int, int, ...);
8612
86065bec6fc9 (term_init): Added missing argument to tgetstr.
Richard M. Stallman <rms@gnu.org>
parents: 8027
diff changeset
180
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
181 extern char *tgetstr (char *, char **);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
183
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
184 #ifdef HAVE_GPM
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
185 #include <sys/fcntl.h>
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
186
109108
5842e8fabe06 Convert some prototypes to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
187 static void term_clear_mouse_face (void);
84981
a35153116cd0 (term_clear_mouse_face, term_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84969
diff changeset
188 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
189
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
190 /* 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
191 struct tty_display_info *gpm_tty = NULL;
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
192
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
193 /* 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
194 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
195 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
196 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
197 MOUSE_FACE_WINDOW. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
198 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
199 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
200 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
201 static Lisp_Object mouse_face_window;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
202 static int mouse_face_face_id;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
203
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
204 static int pos_x, pos_y;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
205 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
206 #endif /* HAVE_GPM */
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
207
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
208 /* 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
209
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
210 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
211 tty_ring_bell (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
213 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
214
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
215 if (tty->output)
15974
61249a8fe735 (Vring_bell_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15094
diff changeset
216 {
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
217 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
218 ? 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
219 : 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
220 fflush (tty->output);
15974
61249a8fe735 (Vring_bell_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15094
diff changeset
221 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
224 /* Set up termcap modes for Emacs. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
226 void
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
227 tty_set_terminal_modes (struct terminal *terminal)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
229 struct tty_display_info *tty = terminal->display_info.tty;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
230
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
231 if (tty->output)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 {
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
233 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
234 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
235 else
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
236 {
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
237 /* 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
238 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
239 int i;
83382
7a3090aca393 Fix hardcoded stdout usage in term.c. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83370
diff changeset
240 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
241 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
242 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
243 }
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
244
83450
c69d44922688 Merged from miles@gnu.org--gnu-2005 (patch 682)
Karoly Lorentey <lorentey@elte.hu>
parents: 83431 67935
diff changeset
245 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
246 OUTPUT_IF (tty, tty->TS_keypad_mode);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
247 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
248 fflush (tty->output);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
252 /* Reset termcap modes before exiting Emacs. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
254 void
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
255 tty_reset_terminal_modes (struct terminal *terminal)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
257 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
258
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
259 if (tty->output)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
261 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
262 tty_turn_off_insert (tty);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
263 OUTPUT_IF (tty, tty->TS_end_keypad_mode);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
264 OUTPUT_IF (tty, tty->TS_cursor_normal);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
265 OUTPUT_IF (tty, tty->TS_end_termcap_modes);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
266 OUTPUT_IF (tty, tty->TS_orig_pair);
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
267 /* 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
268 current_tty = tty;
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
269 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
270 fflush (tty->output);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
274 /* 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
275
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
276 static void
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
277 tty_update_end (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
279 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
280
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
281 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
282 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
283 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
284 tty_background_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
287 /* 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
288
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
289 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
290 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
291 {
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
292 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
293
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
294 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
295 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
296 tty_set_scroll_region (f, 0, tty->specified_window);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
299 static void
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
300 tty_set_scroll_region (struct frame *f, int start, int stop)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 char *buf;
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
303 struct tty_display_info *tty = FRAME_TTY (f);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
304
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
305 if (tty->TS_set_scroll_region)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
306 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
307 else if (tty->TS_set_scroll_region_1)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
308 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
309 FRAME_LINES (f), start,
1595c5e1e9bb Updating_frame vs. selected_frame in term.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 53226
diff changeset
310 FRAME_LINES (f) - stop,
1595c5e1e9bb Updating_frame vs. selected_frame in term.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 53226
diff changeset
311 FRAME_LINES (f));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 else
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
313 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
314
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
315 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
316 xfree (buf);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
317 losecursor (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 }
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
319
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
321 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
322 tty_turn_on_insert (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
324 if (!tty->insert_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
325 OUTPUT (tty, tty->TS_insert_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
326 tty->insert_mode = 1;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
329 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_off_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_end_insert_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
334 tty->insert_mode = 0;
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
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
337 /* Handle highlighting. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
339 void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
340 tty_turn_off_highlight (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
342 if (tty->standout_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
343 OUTPUT_IF (tty, tty->TS_end_standout_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
344 tty->standout_mode = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
347 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
348 tty_turn_on_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_standout_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
352 tty->standout_mode = 1;
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
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
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_toggle_highlight (struct tty_display_info *tty)
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
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)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
359 tty_turn_off_highlight (tty);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
360 else
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
361 tty_turn_on_highlight (tty);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
362 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
363
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
364
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
365 /* Make cursor invisible. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
366
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
367 static void
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
368 tty_hide_cursor (struct tty_display_info *tty)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
369 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
370 if (tty->cursor_hidden == 0)
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
371 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
372 tty->cursor_hidden = 1;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
373 OUTPUT_IF (tty, tty->TS_cursor_invisible);
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
374 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
375 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
376
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
377
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
378 /* Ensure that cursor is visible. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
379
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
380 static void
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
381 tty_show_cursor (struct tty_display_info *tty)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
382 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
383 if (tty->cursor_hidden)
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
384 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
385 tty->cursor_hidden = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
386 OUTPUT_IF (tty, tty->TS_cursor_normal);
67935
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
387 if (visible_cursor)
83450
c69d44922688 Merged from miles@gnu.org--gnu-2005 (patch 682)
Karoly Lorentey <lorentey@elte.hu>
parents: 83431 67935
diff changeset
388 OUTPUT_IF (tty, tty->TS_cursor_visible);
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
389 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
390 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
391
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
392
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 /* Set standout mode to the state it should be in for
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 empty space inside windows. What this is,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395 depends on the user option inverse-video. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
397 static void
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
398 tty_background_highlight (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 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
401 tty_turn_on_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 else
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
403 tty_turn_off_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 /* Set standout mode to the mode specified for the text to be output. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
408 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
409 tty_highlight_if_desired (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 {
40081
07d7dbf18784 (reassert_line_highlight_hook, change_line_highlight_hook): Variables removed.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
411 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
412 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
413 else
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
414 tty_turn_off_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
418 /* Move cursor to row/column position VPOS/HPOS. HPOS/VPOS are
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
419 frame-relative coordinates. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
421 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
422 tty_cursor_to (struct frame *f, int vpos, int hpos)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
424 struct tty_display_info *tty = FRAME_TTY (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425
12071
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
426 /* 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
427 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
428 if (! tty->costs_set)
12071
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
429 return;
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
430
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
431 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
432 && curX (tty) == hpos)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 return;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
434 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
435 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
436 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
437 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
438 cmgoto (tty, vpos, hpos);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 /* Similar but don't take any account of the wasted characters. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
443 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
444 tty_raw_cursor_to (struct frame *f, int row, int col)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
446 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
447
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
448 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
449 && curX (tty) == col)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 return;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
451 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
452 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
453 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
454 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
455 cmgoto (tty, row, col);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 /* Erase operations */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
460 /* 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
461
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
462 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
463 tty_clear_to_end (struct frame *f)
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 register int i;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
466 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
467
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
468 if (tty->TS_clr_to_bottom)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
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 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
471 OUTPUT (tty, tty->TS_clr_to_bottom);
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 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 {
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
475 for (i = curY (tty); i < FRAME_LINES (f); i++)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 {
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
477 cursor_to (f, i, 0);
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
478 clear_end_of_line (f, FRAME_COLS (f));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
483 /* Clear an entire termcap frame. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
484
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
485 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
486 tty_clear_frame (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
488 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
489
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
490 if (tty->TS_clr_frame)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
492 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
493 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
494 cmat (tty, 0, 0);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 {
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
498 cursor_to (f, 0, 0);
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
499 clear_to_end (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
503 /* An implementation of clear_end_of_line for termcap frames.
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 Note that the cursor may be moved, on terminals lacking a `ce' string. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
507 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
508 tty_clear_end_of_line (struct frame *f, int first_unused_hpos)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 register int i;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
511 struct tty_display_info *tty = FRAME_TTY (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512
12071
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
513 /* 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
514 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
515 if (! tty->costs_set)
12071
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
516 return;
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
517
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
518 if (curX (tty) >= first_unused_hpos)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 return;
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
520 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
521 if (tty->TS_clr_line)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
523 OUTPUT1 (tty, tty->TS_clr_line);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 { /* 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
527 tty_turn_off_insert (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
529 /* 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
530 if (AutoWrap (tty)
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
531 && curY (tty) == FrameRows (tty) - 1
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
532 && first_unused_hpos == FrameCols (tty))
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 first_unused_hpos--;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
535 for (i = curX (tty); i < first_unused_hpos; i++)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 {
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
537 if (tty->termscript)
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
538 fputc (' ', tty->termscript);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
539 fputc (' ', tty->output);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 }
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
541 cmplus (tty, first_unused_hpos - curX (tty));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
545 /* 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
546 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
547 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
548 /* 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
549 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
550 static int encode_terminal_dst_size;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
551
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
552 /* 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
553 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
554 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
555
58701
24c51e9d8586 (encode_terminal_code): Don't make it "static".
Kenichi Handa <handa@m17n.org>
parents: 58638
diff changeset
556 unsigned char *
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
557 encode_terminal_code (struct glyph *src, int src_len, struct coding_system *coding)
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
558 {
66238
d3f5aa0f18c4 (encode_terminal_code): Remove unused var src_start.
Kim F. Storm <storm@cua.dk>
parents: 65795
diff changeset
559 struct glyph *src_end = src + src_len;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
560 unsigned char *buf;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
561 int nchars, nbytes, required;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
562 register int tlen = GLYPH_TABLE_LENGTH;
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
563 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
564 Lisp_Object charset_list;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
565
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
566 /* 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
567 multibyte-form. But, it may be enlarged on demand if
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
568 Vglyph_table contains a string or a composite glyph is
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
569 encountered. */
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
570 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
571 if (encode_terminal_src_size < required)
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
572 {
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
573 if (encode_terminal_src)
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
574 encode_terminal_src = xrealloc (encode_terminal_src, required);
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
575 else
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
576 encode_terminal_src = xmalloc (required);
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
577 encode_terminal_src_size = required;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
578 }
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
579
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
580 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
581
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
582 buf = encode_terminal_src;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
583 nchars = 0;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
584 while (src < src_end)
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
585 {
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
586 if (src->type == COMPOSITE_GLYPH)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
587 {
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
588 struct composition *cmp;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
589 Lisp_Object gstring;
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
590 int i;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
591
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
592 nbytes = buf - encode_terminal_src;
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
593 if (src->u.cmp.automatic)
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
594 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
595 gstring = composition_gstring_from_id (src->u.cmp.id);
110598
ee58b36ab139 Remove restriction on the number of glyphs in one composition.
Kenichi Handa <handa@m17n.org>
parents: 110357
diff changeset
596 required = src->slice.cmp.to + 1 - src->slice.cmp.from;
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
597 }
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
598 else
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
599 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
600 cmp = composition_table[src->u.cmp.id];
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
601 required = MAX_MULTIBYTE_LENGTH * cmp->glyph_len;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
602 }
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
603
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
604 if (encode_terminal_src_size < nbytes + required)
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 encode_terminal_src_size = nbytes + required;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
607 encode_terminal_src = xrealloc (encode_terminal_src,
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
608 encode_terminal_src_size);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
609 buf = encode_terminal_src + nbytes;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
610 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
611
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
612 if (src->u.cmp.automatic)
110598
ee58b36ab139 Remove restriction on the number of glyphs in one composition.
Kenichi Handa <handa@m17n.org>
parents: 110357
diff changeset
613 for (i = src->slice.cmp.from; i <= src->slice.cmp.to; i++)
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
614 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
615 Lisp_Object g = LGSTRING_GLYPH (gstring, i);
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
616 int c = LGLYPH_CHAR (g);
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
617
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
618 if (! char_charset (c, charset_list, NULL))
101774
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
619 c = '?';
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
620 buf += CHAR_STRING (c, buf);
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
621 nchars++;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
622 }
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
623 else
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
624 for (i = 0; i < cmp->glyph_len; i++)
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
625 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
626 int c = COMPOSITION_GLYPH (cmp, i);
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
627
101774
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
628 if (c == '\t')
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
629 continue;
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
630 if (char_charset (c, charset_list, NULL))
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
631 {
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
632 if (CHAR_WIDTH (c) == 0
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
633 && i > 0 && COMPOSITION_GLYPH (cmp, i - 1) == '\t')
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
634 /* Should be left-padded */
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
635 {
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
636 buf += CHAR_STRING (' ', buf);
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
637 nchars++;
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
638 }
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
639 }
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
640 else
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
641 c = '?';
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
642 buf += CHAR_STRING (c, buf);
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
643 nchars++;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
644 }
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
645 }
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
646 /* 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
647 else if (! CHAR_GLYPH_PADDING_P (*src))
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
648 {
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
649 GLYPH g;
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
650 int c;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
651 Lisp_Object string;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
652
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
653 string = Qnil;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
654 SET_GLYPH_FROM_CHAR_GLYPH (g, src[0]);
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
655
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
656 if (GLYPH_INVALID_P (g) || GLYPH_SIMPLE_P (tbase, tlen, g))
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
657 {
98367
758774f72111 (encode_terminal_code): Fix a typo in a comment.
Eli Zaretskii <eliz@gnu.org>
parents: 98155
diff changeset
658 /* This glyph doesn't have 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
659 c = src->u.ch;
26871
aaf45e665b14 (encode_terminal_code): Delete codes for a composite
Kenichi Handa <handa@m17n.org>
parents: 26425
diff changeset
660 }
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
661 else
19035
0b4c1d43cb95 Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 18058
diff changeset
662 {
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
663 /* 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
664 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
665 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
666
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
667 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
668 /* 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
669 (that should be an ASCII character) at WORKBUF. */
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
670 c = GLYPH_CHAR (g);
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
671 else
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
672 /* We have a string in Vglyph_table. */
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
673 string = tbase[GLYPH_CHAR (g)];
19035
0b4c1d43cb95 Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 18058
diff changeset
674 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
675
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
676 if (NILP (string))
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
677 {
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
678 nbytes = buf - encode_terminal_src;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
679 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
680 {
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
681 encode_terminal_src_size = nbytes + MAX_MULTIBYTE_LENGTH;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
682 encode_terminal_src = xrealloc (encode_terminal_src,
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
683 encode_terminal_src_size);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
684 buf = encode_terminal_src + nbytes;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
685 }
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
686 if (CHAR_BYTE8_P (c)
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
687 || 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
688 {
89566
86c0ff434620 (encode_terminal_code): Don't handle glyph-table. Check
Kenichi Handa <handa@m17n.org>
parents: 89563
diff changeset
689 /* 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
690 buf += CHAR_STRING (c, buf);
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
691 nchars++;
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
692 }
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
693 else
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
694 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
695 /* C is not encodable. */
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
696 *buf++ = '?';
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
697 nchars++;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
698 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
699 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
700 *buf++ = '?';
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
701 nchars++;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
702 src++;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
703 }
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
704 }
19035
0b4c1d43cb95 Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 18058
diff changeset
705 }
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
706 else
23338
0a2b76b09162 (encode_terminal_code): Handle raw 8-bit codes correctly.
Kenichi Handa <handa@m17n.org>
parents: 23066
diff changeset
707 {
109559
4325622babca Remove declarations and unused variables.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109516
diff changeset
708 unsigned char *p = SDATA (string);
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
709
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
710 if (! STRING_MULTIBYTE (string))
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
711 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
712 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
713 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
714 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
715 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
716 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
717 encode_terminal_src_size);
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
718 buf = encode_terminal_src + nbytes;
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
719 }
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109144
diff changeset
720 memcpy (buf, SDATA (string), SBYTES (string));
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
721 buf += SBYTES (string);
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
722 nchars += SCHARS (string);
23338
0a2b76b09162 (encode_terminal_code): Handle raw 8-bit codes correctly.
Kenichi Handa <handa@m17n.org>
parents: 23066
diff changeset
723 }
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
724 }
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
725 src++;
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
726 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
727
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
728 if (nchars == 0)
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
729 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
730 coding->produced = 0;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
731 return NULL;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
732 }
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
733
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
734 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
735 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
736 if (encode_terminal_dst_size == 0)
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
737 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
738 encode_terminal_dst_size = encode_terminal_src_size;
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
739 if (encode_terminal_dst)
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
740 encode_terminal_dst = xrealloc (encode_terminal_dst,
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
741 encode_terminal_dst_size);
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
742 else
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
743 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
744 }
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
745 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
746 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
747 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
748 /* 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
749 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
750 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
751
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
752 return (encode_terminal_dst);
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
753 }
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
754
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755
91041
bdb3fe0ba9fa Merge from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 91010 85106
diff changeset
756
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
757 /* 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
758
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
759 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
760 tty_write_glyphs (struct frame *f, struct glyph *string, int len)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761 {
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
762 unsigned char *conversion_buffer;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
763 struct coding_system *coding;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
764
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
765 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
766
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
767 tty_turn_off_insert (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
768 tty_hide_cursor (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
770 /* 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
771 since that would scroll the whole frame on some terminals. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
773 if (AutoWrap (tty)
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
774 && 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
775 && (curX (tty) + len) == FRAME_COLS (f))
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776 len --;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
777 if (len <= 0)
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
778 return;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
780 cmplus (tty, len);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
781
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
782 /* 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
783 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
784 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
785 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
786 ? 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
787 /* 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
788 the tail. */
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
789 coding->mode &= ~CODING_MODE_LAST_BLOCK;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
790
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
791 while (len > 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 {
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
793 /* 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
794 int face_id = string->face_id;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
795 int n;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
796
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
797 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
798 if (string[n].face_id != face_id)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
799 break;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
800
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
801 /* 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
802 tty_highlight_if_desired (tty);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
803 turn_on_face (f, face_id);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
804
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
805 if (n == len)
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
806 /* This is the last run. */
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
807 coding->mode |= CODING_MODE_LAST_BLOCK;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
808 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
809 if (coding->produced > 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810 {
76627
c53e7d075f1a Include blockinput.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 75348
diff changeset
811 BLOCK_INPUT;
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
812 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
813 if (ferror (tty->output))
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
814 clearerr (tty->output);
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
815 if (tty->termscript)
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
816 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
817 UNBLOCK_INPUT;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818 }
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
819 len -= n;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
820 string += n;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
821
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
822 /* Turn appearance modes off. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
823 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
824 tty_turn_off_highlight (tty);
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
825 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
826
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
827 cmcheckmagic (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
828 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
829
84981
a35153116cd0 (term_clear_mouse_face, term_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84969
diff changeset
830 #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
831
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
832 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
833 tty_write_glyphs_with_face (register struct frame *f, register struct glyph *string,
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
834 register int len, register int face_id)
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 unsigned char *conversion_buffer;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
837 struct coding_system *coding;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
838
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
839 struct tty_display_info *tty = FRAME_TTY (f);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
840
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
841 tty_turn_off_insert (tty);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
842 tty_hide_cursor (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
843
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
844 /* 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
845 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
846
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
847 if (AutoWrap (tty)
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
848 && curY (tty) + 1 == FRAME_LINES (f)
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
849 && (curX (tty) + len) == FRAME_COLS (f))
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
850 len --;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
851 if (len <= 0)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
852 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
853
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
854 cmplus (tty, len);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
855
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
856 /* 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
857 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
858 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
859 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
860 ? 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
861 /* 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
862 the tail. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
863 coding->mode &= ~CODING_MODE_LAST_BLOCK;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
864
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
865 /* Turn appearance modes of the face. */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
866 tty_highlight_if_desired (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
867 turn_on_face (f, face_id);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
868
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
869 coding->mode |= CODING_MODE_LAST_BLOCK;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
870 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
871 if (coding->produced > 0)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
872 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
873 BLOCK_INPUT;
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
874 fwrite (conversion_buffer, 1, coding->produced, tty->output);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
875 if (ferror (tty->output))
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
876 clearerr (tty->output);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
877 if (tty->termscript)
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
878 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
879 UNBLOCK_INPUT;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
880 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
881
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
882 /* Turn appearance modes off. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
883 turn_off_face (f, face_id);
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
884 tty_turn_off_highlight (tty);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
885
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
886 cmcheckmagic (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
887 }
84981
a35153116cd0 (term_clear_mouse_face, term_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84969
diff changeset
888 #endif
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
889
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
890 /* 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
891
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
892 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
893 tty_insert_glyphs (struct frame *f, struct glyph *start, int len)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
894 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895 char *buf;
31829
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31102
diff changeset
896 struct glyph *glyph = NULL;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
897 unsigned char *conversion_buffer;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
898 unsigned char space[1];
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
899 struct coding_system *coding;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
900
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
901 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
902
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
903 if (tty->TS_ins_multi_chars)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
904 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
905 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
906 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
907 xfree (buf);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908 if (start)
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
909 write_glyphs (f, start, len);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 return;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
912
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
913 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
914 cmplus (tty, len);
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
915
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
916 if (! start)
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
917 space[0] = SPACEGLYPH;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
918
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
919 /* 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
920 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
921 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
922 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
923 ? 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
924 /* 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
925 the tail. */
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
926 coding->mode &= ~CODING_MODE_LAST_BLOCK;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
927
17191
36caec9c2e52 (insert_glyphs): Fix a bug which turns up when
Kenichi Handa <handa@m17n.org>
parents: 17180
diff changeset
928 while (len-- > 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
929 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
930 OUTPUT1_IF (tty, tty->TS_ins_char);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
931 if (!start)
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
932 {
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
933 conversion_buffer = space;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
934 coding->produced = 1;
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
935 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 else
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
937 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
938 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
939 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
940 glyph = start;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
941 ++start;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
942 /* 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
943 occupies more than one column. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
944 while (len && CHAR_GLYPH_PADDING_P (*start))
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
945 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
946 OUTPUT1_IF (tty, tty->TS_ins_char);
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
947 start++, len--;
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
948 }
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
949
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
950 if (len <= 0)
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
951 /* This is the last glyph. */
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
952 coding->mode |= CODING_MODE_LAST_BLOCK;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
953
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
954 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
955 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
957 if (coding->produced > 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 {
76627
c53e7d075f1a Include blockinput.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 75348
diff changeset
959 BLOCK_INPUT;
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
960 fwrite (conversion_buffer, 1, coding->produced, tty->output);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
961 if (ferror (tty->output))
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
962 clearerr (tty->output);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
963 if (tty->termscript)
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
964 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
965 UNBLOCK_INPUT;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
966 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
967
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
968 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
969 if (start)
30848
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
970 {
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
971 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
972 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
973 }
10439
1fcbeb4410f6 (write_glyphs, insert_glyphs): Call checkmagic.
Karl Heuer <kwzh@gnu.org>
parents: 10332
diff changeset
974 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
975
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
976 cmcheckmagic (tty);
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
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
979 /* 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
980
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
981 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
982 tty_delete_glyphs (struct frame *f, int n)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 char *buf;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985 register int i;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
987 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
988
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
989 if (tty->delete_in_insert_mode)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
991 tty_turn_on_insert (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
995 tty_turn_off_insert (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
996 OUTPUT_IF (tty, tty->TS_delete_mode);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
999 if (tty->TS_del_multi_chars)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1001 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
1002 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
1003 xfree (buf);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 for (i = 0; i < n; i++)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1007 OUTPUT1 (tty, tty->TS_del_char);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1008 if (!tty->delete_in_insert_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1009 OUTPUT_IF (tty, tty->TS_end_delete_mode);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
1012 /* 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
1013
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1014 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
1015 tty_ins_del_lines (struct frame *f, int vpos, int n)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1017 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
1018 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
1019 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
1020 char *scroll = n > 0 ? tty->TS_rev_scroll : tty->TS_fwd_scroll;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 register int i = n > 0 ? n : -n;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 register char *buf;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 /* If the lines below the insertion are being pushed
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 into the end of the window, this is the same as clearing;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 and we know the lines are already clear, since the matching
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 deletion has already been done. So can ignore this. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 /* If the lines below the deletion are blank lines coming
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 out of the end of the window, don't bother,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 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
1032 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
1033 && vpos + i >= tty->specified_window)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 return;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1035 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
1036 && vpos + i >= FRAME_LINES (f))
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 return;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
1038
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 if (multi)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 {
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1041 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
1042 tty_background_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 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
1044 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
1045 xfree (buf);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1046 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1047 else if (single)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1048 {
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1049 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
1050 tty_background_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051 while (--i >= 0)
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1052 OUTPUT (tty, single);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1053 if (tty->TF_teleray)
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1054 curX (tty) = 0;
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 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1057 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1058 tty_set_scroll_region (f, vpos, tty->specified_window);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1059 if (n < 0)
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1060 raw_cursor_to (f, tty->specified_window - 1, 0);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 else
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1062 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
1063 tty_background_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 while (--i >= 0)
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1065 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
1066 tty_set_scroll_region (f, 0, tty->specified_window);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 }
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
1068
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1069 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
1070 && 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
1071 && n < 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 {
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
1073 cursor_to (f, FRAME_LINES (f) + n, 0);
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
1074 clear_to_end (f);
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 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078 /* Compute cost of sending "str", in characters,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079 not counting any line-dependent padding. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 int
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109664
diff changeset
1082 string_cost (const char *str)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084 cost = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085 if (str)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1086 tputs (str, 0, evalcost);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087 return cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090 /* Compute cost of sending "str", in characters,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 counting any line-dependent padding at one line. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 static int
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109664
diff changeset
1094 string_cost_one_line (const char *str)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1096 cost = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097 if (str)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 tputs (str, 1, evalcost);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 return cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 /* Compute per line amount of line-dependent padding,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 in tenths of characters. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 int
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109664
diff changeset
1106 per_line_cost (const char *str)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 cost = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 if (str)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 tputs (str, 0, evalcost);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 cost = - cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 if (str)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 tputs (str, 10, evalcost);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 return cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 /* 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
1118 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
1119 The length of this vector is based on max_frame_cols. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 int *char_ins_del_vector;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122
51212
332134065648 Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50227
diff changeset
1123 #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
1124
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 /* ARGSUSED */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 static void
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1127 calculate_ins_del_char_costs (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128 {
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
1129 struct tty_display_info *tty = FRAME_TTY (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 int ins_startup_cost, del_startup_cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 int ins_cost_per_char, del_cost_per_char;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 register int i;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 register int *p;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1135 if (tty->TS_ins_multi_chars)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 ins_cost_per_char = 0;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1138 ins_startup_cost = string_cost_one_line (tty->TS_ins_multi_chars);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139 }
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1140 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
1141 || (tty->TS_insert_mode && tty->TS_end_insert_mode))
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 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
1144 + string_cost (tty->TS_end_insert_mode))) / 100;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1145 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
1146 + string_cost_one_line (tty->TS_pad_inserted_char));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1147 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1149 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 ins_startup_cost = 9999;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 ins_cost_per_char = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1154 if (tty->TS_del_multi_chars)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 del_cost_per_char = 0;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1157 del_startup_cost = string_cost_one_line (tty->TS_del_multi_chars);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1158 }
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1159 else if (tty->TS_del_char)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1161 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
1162 + string_cost (tty->TS_end_delete_mode));
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1163 if (tty->delete_in_insert_mode)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164 del_startup_cost /= 2;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1165 del_cost_per_char = string_cost_one_line (tty->TS_del_char);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 del_startup_cost = 9999;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 del_cost_per_char = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 /* Delete costs are at negative offsets */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1174 p = &char_ins_del_cost (f)[0];
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1175 for (i = FRAME_COLS (f); --i >= 0;)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1176 *--p = (del_startup_cost += del_cost_per_char);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1177
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1178 /* Doing nothing is free */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1179 p = &char_ins_del_cost (f)[0];
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180 *p++ = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182 /* Insert costs are at positive offsets */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1183 for (i = FRAME_COLS (f); --i >= 0;)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 *p++ = (ins_startup_cost += ins_cost_per_char);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
1187 void
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1188 calculate_costs (struct frame *frame)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189 {
10121
3f9f77a9488d (calculate_costs): Set FRAME_COST_BAUD_RATE.
Richard M. Stallman <rms@gnu.org>
parents: 9797
diff changeset
1190 FRAME_COST_BAUD_RATE (frame) = baud_rate;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
1192 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
1193 {
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1194 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
1195 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
1196 ? 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
1197 : 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
1198
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1199 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
1200
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1201 tty->costs_set = 1;
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1202
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1203 /* 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
1204 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
1205 used afterwards.
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1206
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1207 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
1208 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
1209
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1210 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
1211 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
1212
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1213 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
1214 char_ins_del_vector
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1215 = (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
1216 (sizeof (int)
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1217 + 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
1218 else
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1219 char_ins_del_vector
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1220 = (int *) xmalloc (sizeof (int)
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1221 + 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
1222
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109144
diff changeset
1223 memset (char_ins_del_vector, 0,
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109144
diff changeset
1224 (sizeof (int) + 2 * max_frame_cols * sizeof (int)));
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1225
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1226
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1227 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
1228 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
1229 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
1230 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
1231 f, f, 1);
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1232 else
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1233 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
1234 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
1235 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
1236 0, 0, 1);
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1237
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1238 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
1239
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1240 /* 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
1241 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
1242 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
1243 else
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1244 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
1245
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1246 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
1247 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1248 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249
1015
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1250 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
1251 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
1252 };
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1253
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
1254 /* 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
1255 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
1256 (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
1257 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
1258 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
1259 */
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
1260
109664
b6bdd59e60ff Use const for some arrays and functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109653
diff changeset
1261 static const struct fkey_table keys[] =
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1262 {
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1263 {"kh", "home"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1264 {"kl", "left"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1265 {"ku", "up"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1266 {"kr", "right"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1267 {"kd", "down"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1268 {"%8", "prior"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1269 {"%5", "next"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1270 {"@7", "end"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1271 {"@1", "begin"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1272 {"*6", "select"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1273 {"%9", "print"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1274 {"@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
1275 /*
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
1276 * "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
1277 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1278 {"&8", "undo"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1279 {"%0", "redo"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1280 {"%7", "menu"}, /* terminfo --- actually the `options' key */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1281 {"@0", "find"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1282 {"@2", "cancel"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1283 {"%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
1284 /*
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 * "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
1286 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1287 {"&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
1288 /*
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
1289 * "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
1290 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1291 {"kE", "clearline"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1292 {"kA", "insertline"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1293 {"kL", "deleteline"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1294 {"kI", "insertchar"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1295 {"kD", "deletechar"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1296 {"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
1297 /*
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 * "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
1299 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1300 {"@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
1301 /*
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 * "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
1303 * "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
1304 * "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
1305 * --- 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
1306 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1307 {"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
1308 /*
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
1309 * "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
1310 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1311 {"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
1312 /*
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
1313 * "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
1314 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1315 {"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
1316 /*
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
1317 * "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
1318 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1319 {"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
1320 /*
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
1321 * "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
1322 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1323 {"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
1324 /*
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
1325 * "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
1326 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1327 {"k1", "f1"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1328 {"k2", "f2"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1329 {"k3", "f3"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1330 {"k4", "f4"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1331 {"k5", "f5"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1332 {"k6", "f6"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1333 {"k7", "f7"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1334 {"k8", "f8"},
61591
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1335 {"k9", "f9"},
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1336
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1337 {"&0", "S-cancel"}, /*shifted cancel key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1338 {"&9", "S-begin"}, /*shifted begin key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1339 {"*0", "S-find"}, /*shifted find key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1340 {"*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
1341 {"*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
1342 {"*7", "S-end"}, /*shifted end key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1343 {"*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
1344 {"#1", "S-help"}, /*shifted help key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1345 {"#2", "S-home"}, /*shifted home key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1346 {"#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
1347 {"#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
1348 {"%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
1349 {"%c", "S-next"}, /*shifted next key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1350 {"%e", "S-prior"}, /*shifted previous key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1351 {"%f", "S-print"}, /*shifted print key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1352 {"%g", "S-redo"}, /*shifted redo key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1353 {"%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
1354 {"!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
1355 };
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1356
109516
68ca98ae70fb Make building under stricter warning flags somewhat cleaner.
Juanma Barranquero <lekktu@gmail.com>
parents: 109376
diff changeset
1357 #ifndef DOS_NT
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
1358 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
1359 static KBOARD *term_get_fkeys_kboard;
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1360 static Lisp_Object term_get_fkeys_1 (void);
4543
929e4c850e76 (term_get_fkeys_define_1, term_get_fkeys_define): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 4499
diff changeset
1361
85106
fd282fb888de Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84981
diff changeset
1362 /* 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
1363 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
1364 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
1365
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1366 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1367 term_get_fkeys (char **address, KBOARD *kboard)
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1368 {
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1369 /* 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
1370 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
1371 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
1372 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
1373 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
1374 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
1375 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
1376
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
1377 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
1378 term_get_fkeys_kboard = kboard;
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1379 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
1380 }
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1381
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1382 static Lisp_Object
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1383 term_get_fkeys_1 (void)
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1384 {
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1385 int i;
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1386
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
1387 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
1388 KBOARD *kboard = term_get_fkeys_kboard;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
1389
3359
ef29e2a4fc46 (term_get_fkeys): If not initialized, init Vfunction_key_map.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
1390 /* 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
1391 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
1392 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
1393
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1394 for (i = 0; i < (sizeof (keys)/sizeof (keys[0])); i++)
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1395 {
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1396 char *sequence = tgetstr (keys[i].cap, address);
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1397 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
1398 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
1399 Fmake_vector (make_number (1),
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1400 intern (keys[i].name)));
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1401 }
1015
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1402
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1403 /* 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
1404 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
1405 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
1406 "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
1407 */
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1408 {
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1409 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
1410 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
1411 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
1412
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1413 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
1414 {
43073
c9baf4b00820 (term_get_fkeys_1): If `k0' and `k;' are both specified and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42959
diff changeset
1415 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
1416 /* 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
1417 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
1418 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
1419 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
1420 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
1421 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
1422 }
43073
c9baf4b00820 (term_get_fkeys_1): If `k0' and `k;' are both specified and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42959
diff changeset
1423 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
1424 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
1425 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
1426 }
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
1427
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
1428 /* 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
1429 {
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
1430 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
1431
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1432 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
1433 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
1434 {
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
1435 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
1436 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
1437 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
1438 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
1439 else
10481
24756aef26e3 (term_get_fkeys_1): Bug fix for function key above f19.
Richard M. Stallman <rms@gnu.org>
parents: 10439
diff changeset
1440 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
1441
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1442 {
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1443 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
1444 if (sequence)
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1445 {
4543
929e4c850e76 (term_get_fkeys_define_1, term_get_fkeys_define): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 4499
diff changeset
1446 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
1447 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
1448 Fmake_vector (make_number (1),
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1449 intern (fkey)));
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1450 }
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1451 }
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
1452 }
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 }
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
1454
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 /*
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
1456 * 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
1457 */
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
1458 {
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1459 #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
1460 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
1461 { \
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1462 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
1463 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
1464 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
1465 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
1466 intern (sym))); \
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1467 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1468
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
1469 /* 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
1470 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
1471 /* 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
1472 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
1473 /* 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
1474 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
1475 /* 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
1476 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
1477
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1478 /* 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
1479 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
1480 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
1481 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
1482 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
1483 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
1484 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
1485 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
1486 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
1487 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
1488 CONDITIONAL_REASSIGN ("*6", "kU", "select");
2224
49bda4cf498c Supply second arg for tgetstr() calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2179
diff changeset
1489 #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
1490 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1491
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1492 return Qnil;
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1493 }
109516
68ca98ae70fb Make building under stricter warning flags somewhat cleaner.
Juanma Barranquero <lekktu@gmail.com>
parents: 109376
diff changeset
1494 #endif /* not DOS_NT */
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1495
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1496
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1497 /***********************************************************************
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1498 Character Display Information
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1499 ***********************************************************************/
109100
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
1500 static void append_glyph (struct it *);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
1501 static void produce_stretch_glyph (struct it *);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
1502 static void append_composite_glyph (struct it *);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 108235
diff changeset
1503 static void produce_composite_glyph (struct it *);
111237
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1504 static void append_glyphless_glyph (struct it *, int, char *);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1505 static void produce_glyphless_glyph (struct it *, int, Lisp_Object);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1506
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1507 /* 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
1508 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
1509 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
1510 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
1511 IT->pixel_width > 1. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1512
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1513 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1514 append_glyph (struct it *it)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1515 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1516 struct glyph *glyph, *end;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1517 int 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 xassert (it->glyph_row);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1520 glyph = (it->glyph_row->glyphs[it->area]
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1521 + it->glyph_row->used[it->area]);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1522 end = it->glyph_row->glyphs[1 + it->area];
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1523
107598
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1524 /* If the glyph row is reversed, we need to prepend the glyph rather
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1525 than append it. */
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1526 if (it->glyph_row->reversed_p && it->area == TEXT_AREA)
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1527 {
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1528 struct glyph *g;
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1529 int move_by = it->pixel_width;
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1530
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1531 /* Make room for the new glyphs. */
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1532 if (move_by > end - glyph) /* don't overstep end of this area */
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1533 move_by = end - glyph;
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1534 for (g = glyph - 1; g >= it->glyph_row->glyphs[it->area]; g--)
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1535 g[move_by] = *g;
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1536 glyph = it->glyph_row->glyphs[it->area];
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1537 end = glyph + move_by;
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1538 }
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1539
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1540 /* BIDI Note: we put the glyphs of a "multi-pixel" character left to
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1541 right, even in the REVERSED_P case, since (a) all of its u.ch are
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1542 identical, and (b) the PADDING_P flag needs to be set for the
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1543 leftmost one, because we write to the terminal left-to-right. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1544 for (i = 0;
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1545 i < it->pixel_width && glyph < end;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1546 ++i)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1547 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1548 glyph->type = CHAR_GLYPH;
29462
3306af2e4f3d (append_glyph): Revert change of 2000-06-06.
Gerd Moellmann <gerd@gnu.org>
parents: 29448
diff changeset
1549 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
1550 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
1551 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
1552 glyph->padding_p = i > 0;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1553 glyph->charpos = CHARPOS (it->position);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1554 glyph->object = it->object;
107598
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1555 if (it->bidi_p)
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1556 {
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1557 glyph->resolved_level = it->bidi_it.resolved_level;
107606
297c59e52ecf Retrospective commit from 2009-12-26.
Eli Zaretskii <eliz@gnu.org>
parents: 107598
diff changeset
1558 if ((it->bidi_it.type & 7) != it->bidi_it.type)
297c59e52ecf Retrospective commit from 2009-12-26.
Eli Zaretskii <eliz@gnu.org>
parents: 107598
diff changeset
1559 abort ();
107598
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1560 glyph->bidi_type = it->bidi_it.type;
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1561 }
107606
297c59e52ecf Retrospective commit from 2009-12-26.
Eli Zaretskii <eliz@gnu.org>
parents: 107598
diff changeset
1562 else
297c59e52ecf Retrospective commit from 2009-12-26.
Eli Zaretskii <eliz@gnu.org>
parents: 107598
diff changeset
1563 {
297c59e52ecf Retrospective commit from 2009-12-26.
Eli Zaretskii <eliz@gnu.org>
parents: 107598
diff changeset
1564 glyph->resolved_level = 0;
297c59e52ecf Retrospective commit from 2009-12-26.
Eli Zaretskii <eliz@gnu.org>
parents: 107598
diff changeset
1565 glyph->bidi_type = UNKNOWN_BT;
297c59e52ecf Retrospective commit from 2009-12-26.
Eli Zaretskii <eliz@gnu.org>
parents: 107598
diff changeset
1566 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1567
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1568 ++it->glyph_row->used[it->area];
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1569 ++glyph;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1570 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1571 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1572
44372
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1573 /* Produce glyphs for the display element described by IT. *IT
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1574 specifies what we want to produce a glyph for (character, image, ...),
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1575 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
1576 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
1577 pixel width and height of a character, and maybe output actual glyphs at
107198
f32d789c9aab term.c, dispextern.h: Fix stale comments.
Eli Zaretskii <eliz@gnu.org>
parents: 107191
diff changeset
1578 the same time if IT->glyph_row is non-null. For an overview, see
f32d789c9aab term.c, dispextern.h: Fix stale comments.
Eli Zaretskii <eliz@gnu.org>
parents: 107191
diff changeset
1579 the explanation in dispextern.h, before the definition of the
f32d789c9aab term.c, dispextern.h: Fix stale comments.
Eli Zaretskii <eliz@gnu.org>
parents: 107191
diff changeset
1580 display_element_type enumeration.
44372
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1581
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1582 produce_glyphs also stores the result of glyph width, ascent
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1583 etc. computations in *IT.
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1584
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1585 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
1586 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
1587 in xdisp.c for text width and height computations.
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1588
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1589 Callers usually don't call produce_glyphs directly;
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1590 instead they use the macro PRODUCE_GLYPHS. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1591
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1592 void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1593 produce_glyphs (struct it *it)
25002
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 a hook is installed, let it do the work. */
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1596
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1597 /* Nothing but characters are supported on terminal frames. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1598 xassert (it->what == IT_CHARACTER
26871
aaf45e665b14 (encode_terminal_code): Delete codes for a composite
Kenichi Handa <handa@m17n.org>
parents: 26425
diff changeset
1599 || it->what == IT_COMPOSITION
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1600 || it->what == IT_STRETCH);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1601
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1602 if (it->what == IT_STRETCH)
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1603 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1604 produce_stretch_glyph (it);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1605 goto done;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1606 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1607
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1608 if (it->what == IT_COMPOSITION)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1609 {
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1610 produce_composite_glyph (it);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1611 goto done;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1612 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1613
111237
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1614 if (it->what == IT_GLYPHLESS)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1615 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1616 produce_glyphless_glyph (it, 0, Qnil);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1617 goto done;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1618 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1619
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1620 if (it->char_to_display >= 040 && it->char_to_display < 0177)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1621 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1622 it->pixel_width = it->nglyphs = 1;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1623 if (it->glyph_row)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1624 append_glyph (it);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1625 }
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1626 else if (it->char_to_display == '\n')
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1627 it->pixel_width = it->nglyphs = 0;
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1628 else if (it->char_to_display == '\t')
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1629 {
28685
b4310b6f3b5e (produce_glyphs): Remove reference to struct it's prompt_width.
Gerd Moellmann <gerd@gnu.org>
parents: 28507
diff changeset
1630 int absolute_x = (it->current_x
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1631 + it->continuation_lines_width);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1632 int next_tab_x
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1633 = (((1 + absolute_x + it->tab_width - 1)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1634 / it->tab_width)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1635 * it->tab_width);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1636 int nspaces;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1637
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1638 /* If part of the TAB has been displayed on the previous line
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1639 which is continued now, continuation_lines_width will have
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1640 been incremented already by the part that fitted on the
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1641 continued line. So, we will get the right number of spaces
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1642 here. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1643 nspaces = next_tab_x - absolute_x;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1644
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1645 if (it->glyph_row)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1646 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1647 int n = nspaces;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1648
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1649 it->char_to_display = ' ';
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1650 it->pixel_width = it->len = 1;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1651
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1652 while (n--)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1653 append_glyph (it);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1654 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1655
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1656 it->pixel_width = nspaces;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1657 it->nglyphs = nspaces;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1658 }
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1659 else if (CHAR_BYTE8_P (it->char_to_display))
29262
b7059c9f98ac (produce_glyphs): Don't treat eight-bit-* charsets as multibyte.
Eli Zaretskii <eliz@gnu.org>
parents: 29097
diff changeset
1660 {
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1661 /* Coming here means that we must send the raw 8-bit byte as is
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1662 to the terminal. Although there's no way to know how many
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1663 columns it occupies on a screen, it is a good assumption that
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1664 a single byte code has 1-column width. */
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1665 it->pixel_width = it->nglyphs = 1;
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1666 if (it->glyph_row)
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1667 append_glyph (it);
29262
b7059c9f98ac (produce_glyphs): Don't treat eight-bit-* charsets as multibyte.
Eli Zaretskii <eliz@gnu.org>
parents: 29097
diff changeset
1668 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1669 else
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1670 {
111237
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1671 Lisp_Object charset_list = FRAME_TERMINAL (it->f)->charset_list;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1672
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1673 if (char_charset (it->char_to_display, charset_list, NULL))
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1674 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1675 it->pixel_width = CHAR_WIDTH (it->char_to_display);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1676 it->nglyphs = it->pixel_width;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1677 if (it->glyph_row)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1678 append_glyph (it);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1679 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1680 else
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1681 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1682 Lisp_Object acronym = lookup_glyphless_char_display (-1, it);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1683
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1684 xassert (it->what == IT_GLYPHLESS);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1685 produce_glyphless_glyph (it, 1, acronym);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1686 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1687 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1688
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1689 done:
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1690 /* Advance current_x by the pixel width as a convenience for
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1691 the caller. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1692 if (it->area == TEXT_AREA)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1693 it->current_x += it->pixel_width;
25187
39feb68ed3c7 (produce_glyphs): Set iterator's physical height
Gerd Moellmann <gerd@gnu.org>
parents: 25002
diff changeset
1694 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
1695 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
1696 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1697
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1698
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1699 /* 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
1700 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
1701 `(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
1702 being recognized:
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 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
1705 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
1706 point number.
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 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
1709 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
1710
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1711 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1712 produce_stretch_glyph (struct it *it)
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1713 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1714 /* (space :width WIDTH ...) */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1715 Lisp_Object prop, plist;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1716 int width = 0, align_to = -1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1717 int zero_width_ok_p = 0;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1718 double tem;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1719
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1720 /* List should start with `space'. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1721 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
1722 plist = XCDR (it->object);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1723
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1724 /* Compute the width of the stretch. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1725 if ((prop = Fplist_get (plist, QCwidth), !NILP (prop))
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1726 && 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
1727 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1728 /* Absolute width `:width WIDTH' specified and valid. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1729 zero_width_ok_p = 1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1730 width = (int)(tem + 0.5);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1731 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1732 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
1733 && 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
1734 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1735 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
1736 align_to = (align_to < 0
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1737 ? 0
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1738 : 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
1739 else if (align_to < 0)
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1740 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
1741 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
1742 zero_width_ok_p = 1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1743 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1744 else
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1745 /* Nothing specified -> width defaults to canonical char width. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1746 width = FRAME_COLUMN_WIDTH (it->f);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1747
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1748 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
1749 width = 1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1750
102831
1f0beb33697b * term.c (produce_stretch_glyph): Reduce width of stretch glyphs
Chong Yidong <cyd@stupidchicken.com>
parents: 102744
diff changeset
1751 if (width > 0 && it->line_wrap != TRUNCATE
1f0beb33697b * term.c (produce_stretch_glyph): Reduce width of stretch glyphs
Chong Yidong <cyd@stupidchicken.com>
parents: 102744
diff changeset
1752 && it->current_x + width > it->last_visible_x)
1f0beb33697b * term.c (produce_stretch_glyph): Reduce width of stretch glyphs
Chong Yidong <cyd@stupidchicken.com>
parents: 102744
diff changeset
1753 width = it->last_visible_x - it->current_x - 1;
1f0beb33697b * term.c (produce_stretch_glyph): Reduce width of stretch glyphs
Chong Yidong <cyd@stupidchicken.com>
parents: 102744
diff changeset
1754
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1755 if (width > 0 && it->glyph_row)
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1756 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1757 Lisp_Object o_object = it->object;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1758 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
1759 int n = width;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1760
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1761 if (!STRINGP (object))
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1762 object = it->w->buffer;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1763 it->object = object;
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1764 it->char_to_display = ' ';
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1765 it->pixel_width = it->len = 1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1766 while (n--)
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1767 append_glyph (it);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1768 it->object = o_object;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1769 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1770 it->pixel_width = width;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1771 it->nglyphs = width;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1772 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1773
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1774
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1775 /* 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
1776 Called from produce_composite_glyph for terminal frames if
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1777 IT->glyph_row != NULL. IT->face_id contains the character's
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1778 face. */
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 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1781 append_composite_glyph (struct it *it)
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1782 {
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1783 struct glyph *glyph;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1784
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1785 xassert (it->glyph_row);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1786 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
1787 if (glyph < it->glyph_row->glyphs[1 + it->area])
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1788 {
107996
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1789 /* If the glyph row is reversed, we need to prepend the glyph
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1790 rather than append it. */
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1791 if (it->glyph_row->reversed_p && it->area == TEXT_AREA)
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1792 {
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1793 struct glyph *g;
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1794
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1795 /* Make room for the new glyph. */
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1796 for (g = glyph - 1; g >= it->glyph_row->glyphs[it->area]; g--)
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1797 g[1] = *g;
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1798 glyph = it->glyph_row->glyphs[it->area];
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1799 }
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1800 glyph->type = COMPOSITE_GLYPH;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1801 glyph->pixel_width = it->pixel_width;
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1802 glyph->u.cmp.id = it->cmp_it.id;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1803 if (it->cmp_it.ch < 0)
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1804 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1805 glyph->u.cmp.automatic = 0;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1806 glyph->u.cmp.id = it->cmp_it.id;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1807 }
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1808 else
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1809 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1810 glyph->u.cmp.automatic = 1;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1811 glyph->u.cmp.id = it->cmp_it.id;
110598
ee58b36ab139 Remove restriction on the number of glyphs in one composition.
Kenichi Handa <handa@m17n.org>
parents: 110357
diff changeset
1812 glyph->slice.cmp.from = it->cmp_it.from;
ee58b36ab139 Remove restriction on the number of glyphs in one composition.
Kenichi Handa <handa@m17n.org>
parents: 110357
diff changeset
1813 glyph->slice.cmp.to = it->cmp_it.to - 1;
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1814 }
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1815
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1816 glyph->face_id = it->face_id;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1817 glyph->padding_p = 0;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1818 glyph->charpos = CHARPOS (it->position);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1819 glyph->object = it->object;
107996
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1820 if (it->bidi_p)
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1821 {
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1822 glyph->resolved_level = it->bidi_it.resolved_level;
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1823 if ((it->bidi_it.type & 7) != it->bidi_it.type)
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1824 abort ();
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1825 glyph->bidi_type = it->bidi_it.type;
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1826 }
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1827 else
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1828 {
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1829 glyph->resolved_level = 0;
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1830 glyph->bidi_type = UNKNOWN_BT;
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1831 }
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1832
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1833 ++it->glyph_row->used[it->area];
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1834 ++glyph;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1835 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1836 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1837
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1838
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1839 /* 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
1840 the composition. We simply produces components of the composition
105426
d0a6d64c3cfc Fix typos in comments.
Juanma Barranquero <lekktu@gmail.com>
parents: 103711
diff changeset
1841 assuming that the terminal has a capability to layout/render it
d0a6d64c3cfc Fix typos in comments.
Juanma Barranquero <lekktu@gmail.com>
parents: 103711
diff changeset
1842 correctly. */
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1843
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1844 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1845 produce_composite_glyph (struct it *it)
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1846 {
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1847 if (it->cmp_it.ch < 0)
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1848 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1849 struct composition *cmp = composition_table[it->cmp_it.id];
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1850
101774
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
1851 it->pixel_width = cmp->width;
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1852 }
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1853 else
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1854 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1855 Lisp_Object gstring = composition_gstring_from_id (it->cmp_it.id);
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1856
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1857 it->pixel_width = composition_gstring_width (gstring, it->cmp_it.from,
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1858 it->cmp_it.to, NULL);
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1859 }
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1860 it->nglyphs = 1;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1861 if (it->glyph_row)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1862 append_composite_glyph (it);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1863 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1864
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1865
111237
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1866 /* Append a glyph for a glyphless character to IT->glyph_row. FACE_ID
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1867 is a face ID to be used for the glyph. What actually appended are
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1868 glyphs of type CHAR_GLYPH of which characters are in STR
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1869 (it->nglyphs bytes). */
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1870
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1871 static void
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1872 append_glyphless_glyph (struct it *it, int face_id, char *str)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1873 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1874 struct glyph *glyph, *end;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1875 bidi_type_t bidi_type;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1876 int resolved_level;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1877 int i;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1878
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1879 xassert (it->glyph_row);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1880 glyph = it->glyph_row->glyphs[it->area] + it->glyph_row->used[it->area];
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1881 end = it->glyph_row->glyphs[1 + it->area];
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1882
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1883 /* If the glyph row is reversed, we need to prepend the glyph rather
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1884 than append it. */
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1885 if (it->glyph_row->reversed_p && it->area == TEXT_AREA)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1886 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1887 struct glyph *g;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1888 int move_by = it->pixel_width;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1889
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1890 /* Make room for the new glyphs. */
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1891 if (move_by > end - glyph) /* don't overstep end of this area */
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1892 move_by = end - glyph;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1893 for (g = glyph - 1; g >= it->glyph_row->glyphs[it->area]; g--)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1894 g[move_by] = *g;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1895 glyph = it->glyph_row->glyphs[it->area];
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1896 end = glyph + move_by;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1897 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1898
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1899 if (glyph >= end)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1900 return;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1901 glyph->type = CHAR_GLYPH;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1902 glyph->pixel_width = 1;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1903 glyph->face_id = face_id;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1904 glyph->padding_p = 0;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1905 glyph->charpos = CHARPOS (it->position);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1906 glyph->object = it->object;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1907 if (it->bidi_p)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1908 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1909 glyph->resolved_level = it->bidi_it.resolved_level;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1910 if ((it->bidi_it.type & 7) != it->bidi_it.type)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1911 abort ();
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1912 glyph->bidi_type = it->bidi_it.type;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1913 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1914 else
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1915 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1916 glyph->resolved_level = 0;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1917 glyph->bidi_type = UNKNOWN_BT;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1918 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1919
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1920 /* BIDI Note: we put the glyphs of characters left to right, even in
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1921 the REVERSED_P case because we write to the terminal
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1922 left-to-right. */
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1923 for (i = 0; i < it->nglyphs && glyph < end; ++i)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1924 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1925 if (i > 0)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1926 glyph[0] = glyph[-1];
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1927 glyph->u.ch = str[i];
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1928 ++it->glyph_row->used[it->area];
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1929 ++glyph;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1930 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1931 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1932
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1933 /* Declared in xdisp.c */
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1934 extern struct frame *last_glyphless_glyph_frame;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1935 extern unsigned last_glyphless_glyph_face_id;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1936 extern int last_glyphless_glyph_merged_face_id;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1937 extern Lisp_Object Qglyphless_char;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1938
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1939 /* Produce glyphs for a glyphless character for iterator IT.
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1940 IT->glyphless_method specifies which method to use for displaying
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1941 the character. See the description of enum
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1942 glyphless_display_method in dispextern.h for the detail.
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1943
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1944 FOR_NO_FONT is nonzero if and only if this is for a character that
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1945 is not supproted by the coding system of the terminal. ACRONYM, if
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1946 non-nil, is an acronym string for the character.
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1947
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1948 The glyphs actually produced are of type CHAR_GLYPH. */
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1949
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1950 static void
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1951 produce_glyphless_glyph (struct it *it, int for_no_font, Lisp_Object acronym)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1952 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1953 int face_id;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1954 struct face *face;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1955 int width, len;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1956 char buf[9], *str = " ";
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1957
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1958 /* Get a face ID for the glyph by utilizing a cache (the same way as
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1959 doen for `escape-glyph' in get_next_display_element). */
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1960 if (it->f == last_glyphless_glyph_frame
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1961 && it->face_id == last_glyphless_glyph_face_id)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1962 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1963 face_id = last_glyphless_glyph_merged_face_id;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1964 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1965 else
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1966 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1967 /* Merge the `glyphless-char' face into the current face. */
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1968 face_id = merge_faces (it->f, Qglyphless_char, 0, it->face_id);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1969 last_glyphless_glyph_frame = it->f;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1970 last_glyphless_glyph_face_id = it->face_id;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1971 last_glyphless_glyph_merged_face_id = face_id;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1972 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1973
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1974 if (it->glyphless_method == GLYPHLESS_DISPLAY_THIN_SPACE)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1975 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1976 /* As there's no way to produce a thin space, we produce
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1977 a space of canonical width.. */
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1978 len = 1;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1979 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1980 else if (it->glyphless_method == GLYPHLESS_DISPLAY_EMPTY_BOX)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1981 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1982 len = CHAR_WIDTH (it->c);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1983 if (len == 0)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1984 len = 1;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1985 else if (width > 4)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1986 len = 4;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1987 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1988 else
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1989 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1990 if (it->glyphless_method == GLYPHLESS_DISPLAY_ACRONYM)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1991 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1992 int i;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1993
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1994 if (! STRINGP (acronym) && CHAR_TABLE_P (Vglyphless_char_display))
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1995 acronym = CHAR_TABLE_REF (Vglyphless_char_display, it->c);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1996 buf[0] = '[';
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1997 str = STRINGP (acronym) ? (char *) SDATA (acronym) : "";
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1998 for (len = 0; len < 6 && str[len] && ASCII_BYTE_P (str[len]); len++)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
1999 buf[1 + len] = str[len];
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2000 buf[1 + len] = ']';
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2001 len += 2;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2002 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2003 else
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2004 {
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2005 xassert (it->glyphless_method == GLYPHLESS_DISPLAY_HEXA_CODE);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2006 len = (it->c < 0x100 ? sprintf (buf, "U+%02X", it->c)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2007 : it->c < 0x10000 ? sprintf (buf, "U+%04X", it->c)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2008 : it->c <= MAX_UNICODE_CHAR ? sprintf (buf, "U+%06X", it->c)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2009 : sprintf (buf, "E+%06X", it->c));
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2010 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2011 str = buf;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2012 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2013
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2014 it->pixel_width = len;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2015 it->nglyphs = len;
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2016 if (len > 0 && it->glyph_row)
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2017 append_glyphless_glyph (it, face_id, str);
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2018 }
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2019
6788b08ca420 Handle glyphless characters on tty.
Kenichi Handa <handa@m17n.org>
parents: 110688
diff changeset
2020
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2021 /* Get information about special display element WHAT in an
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2022 environment described by IT. WHAT is one of IT_TRUNCATION or
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2023 IT_CONTINUATION. Maybe produce glyphs for WHAT if IT has a
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2024 non-null glyph_row member. This function ensures that fields like
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2025 face_id, c, len of IT are left untouched. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2026
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2027 void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
2028 produce_special_glyphs (struct it *it, enum display_element_type what)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2029 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2030 struct it temp_it;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2031 Lisp_Object gc;
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
2032 GLYPH glyph;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
2033
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2034 temp_it = *it;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2035 temp_it.dp = NULL;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2036 temp_it.what = IT_CHARACTER;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2037 temp_it.len = 1;
28507
b6f06a755c7d make_number/XINT/XUINT conversions; EQ/== fixes; ==Qnil -> NILP
Ken Raeburn <raeburn@raeburn.org>
parents: 28465
diff changeset
2038 temp_it.object = make_number (0);
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109144
diff changeset
2039 memset (&temp_it.current, 0, sizeof temp_it.current);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2040
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2041 if (what == IT_CONTINUATION)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2042 {
107994
5dc04900cbd7 Mirror continuation indicators for R2L lines; fix face extension on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107640
diff changeset
2043 /* Continuation glyph. For R2L lines, we mirror it by hand. */
5dc04900cbd7 Mirror continuation indicators for R2L lines; fix face extension on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107640
diff changeset
2044 if (it->bidi_it.paragraph_dir == R2L)
5dc04900cbd7 Mirror continuation indicators for R2L lines; fix face extension on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107640
diff changeset
2045 SET_GLYPH_FROM_CHAR (glyph, '/');
5dc04900cbd7 Mirror continuation indicators for R2L lines; fix face extension on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107640
diff changeset
2046 else
5dc04900cbd7 Mirror continuation indicators for R2L lines; fix face extension on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107640
diff changeset
2047 SET_GLYPH_FROM_CHAR (glyph, '\\');
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2048 if (it->dp
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2049 && (gc = DISP_CONTINUE_GLYPH (it->dp), GLYPH_CODE_P (gc))
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2050 && GLYPH_CODE_CHAR_VALID_P (gc))
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2051 {
107994
5dc04900cbd7 Mirror continuation indicators for R2L lines; fix face extension on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107640
diff changeset
2052 /* FIXME: Should we mirror GC for R2L lines? */
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2053 SET_GLYPH_FROM_GLYPH_CODE (glyph, gc);
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2054 spec_glyph_lookup_face (XWINDOW (it->window), &glyph);
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 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2057 else if (what == IT_TRUNCATION)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2058 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2059 /* Truncation glyph. */
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2060 SET_GLYPH_FROM_CHAR (glyph, '$');
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2061 if (it->dp
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2062 && (gc = DISP_TRUNC_GLYPH (it->dp), GLYPH_CODE_P (gc))
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2063 && GLYPH_CODE_CHAR_VALID_P (gc))
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2064 {
107994
5dc04900cbd7 Mirror continuation indicators for R2L lines; fix face extension on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107640
diff changeset
2065 /* FIXME: Should we mirror GC for R2L lines? */
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2066 SET_GLYPH_FROM_GLYPH_CODE (glyph, gc);
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2067 spec_glyph_lookup_face (XWINDOW (it->window), &glyph);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2068 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2069 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2070 else
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2071 abort ();
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
2072
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
2073 temp_it.c = temp_it.char_to_display = GLYPH_CHAR (glyph);
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2074 temp_it.face_id = GLYPH_FACE (glyph);
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
2075 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
2076
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
2077 produce_glyphs (&temp_it);
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
2078 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
2079 it->nglyphs = temp_it.pixel_width;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2080 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2081
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2082
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2083
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2084 /***********************************************************************
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2085 Faces
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2086 ***********************************************************************/
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2087
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
2088 /* 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
2089 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
2090 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
2091 color; the termcap capability `NC' specifies which ones. */
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
2092
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2093 #define MAY_USE_WITH_COLORS_P(tty, ATTR) \
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2094 (tty->TN_max_colors > 0 \
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2095 ? (tty->TN_no_color_video & (ATTR)) == 0 \
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2096 : 1)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2097
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
2098 /* 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
2099 FACE_ID is a realized face ID number, in the face cache. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2100
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2101 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
2102 turn_on_face (struct frame *f, int face_id)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2103 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2104 struct face *face = FACE_FROM_ID (f, face_id);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2105 long fg = face->foreground;
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2106 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
2107 struct tty_display_info *tty = FRAME_TTY (f);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2108
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2109 /* 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
2110 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
2111 if (MAY_USE_WITH_COLORS_P (tty, NC_REVERSE))
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2112 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2113 if (tty->TN_max_colors > 0)
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2114 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2115 if (fg >= 0 && bg >= 0)
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2116 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2117 /* If the terminal supports colors, we can set them
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2118 below without using reverse video. The face's fg
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2119 and bg colors are set as they should appear on
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2120 the screen, i.e. they take the inverse-video'ness
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2121 of the face already into account. */
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2122 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2123 else if (inverse_video)
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2124 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2125 if (fg == FACE_TTY_DEFAULT_FG_COLOR
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2126 || 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
2127 tty_toggle_highlight (tty);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2128 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2129 else
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2130 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2131 if (fg == FACE_TTY_DEFAULT_BG_COLOR
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2132 || 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
2133 tty_toggle_highlight (tty);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2134 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2135 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2136 else
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2137 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2138 /* If we can't display colors, use reverse video
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2139 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
2140 if (inverse_video)
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
2141 {
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
2142 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
2143 || 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
2144 tty_toggle_highlight (tty);
37499
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
2145 }
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
2146 else
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
2147 {
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
2148 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
2149 || 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
2150 tty_toggle_highlight (tty);
37499
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
2151 }
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2152 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
2153 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2154
103605
d6ac90c70d24 * term.c (turn_on_face): Allow simultaneously bold and dim
Chong Yidong <cyd@stupidchicken.com>
parents: 103114
diff changeset
2155 if (face->tty_bold_p && MAY_USE_WITH_COLORS_P (tty, NC_BOLD))
d6ac90c70d24 * term.c (turn_on_face): Allow simultaneously bold and dim
Chong Yidong <cyd@stupidchicken.com>
parents: 103114
diff changeset
2156 OUTPUT1_IF (tty, tty->TS_enter_bold_mode);
d6ac90c70d24 * term.c (turn_on_face): Allow simultaneously bold and dim
Chong Yidong <cyd@stupidchicken.com>
parents: 103114
diff changeset
2157
d6ac90c70d24 * term.c (turn_on_face): Allow simultaneously bold and dim
Chong Yidong <cyd@stupidchicken.com>
parents: 103114
diff changeset
2158 if (face->tty_dim_p && MAY_USE_WITH_COLORS_P (tty, NC_DIM))
d6ac90c70d24 * term.c (turn_on_face): Allow simultaneously bold and dim
Chong Yidong <cyd@stupidchicken.com>
parents: 103114
diff changeset
2159 OUTPUT1_IF (tty, tty->TS_enter_dim_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2160
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2161 /* Alternate charset and blinking not yet used. */
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
2162 if (face->tty_alt_charset_p
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2163 && 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
2164 OUTPUT1_IF (tty, tty->TS_enter_alt_charset_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2165
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
2166 if (face->tty_blinking_p
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2167 && MAY_USE_WITH_COLORS_P (tty, NC_BLINK))
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2168 OUTPUT1_IF (tty, tty->TS_enter_blink_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2169
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2170 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
2171 OUTPUT1_IF (tty, tty->TS_enter_underline_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2172
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2173 if (tty->TN_max_colors > 0)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2174 {
65072
462eb3df5c58 (turn_on_face): Check for TS_set_foreground and
Juri Linkov <juri@jurta.org>
parents: 64773
diff changeset
2175 char *ts, *p;
462eb3df5c58 (turn_on_face): Check for TS_set_foreground and
Juri Linkov <juri@jurta.org>
parents: 64773
diff changeset
2176
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
2177 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
2178 if (fg >= 0 && ts)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2179 {
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
2180 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
2181 OUTPUT (tty, p);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2182 xfree (p);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2183 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2184
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
2185 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
2186 if (bg >= 0 && ts)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2187 {
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
2188 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
2189 OUTPUT (tty, p);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2190 xfree (p);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2191 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2192 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2193 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
2194
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2195
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2196 /* Turn off appearances of face FACE_ID on tty frame F. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2197
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2198 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
2199 turn_off_face (struct frame *f, int face_id)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2200 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2201 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
2202 struct tty_display_info *tty = FRAME_TTY (f);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2203
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2204 xassert (face != NULL);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2205
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2206 if (tty->TS_exit_attribute_mode)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2207 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2208 /* Capability "me" will turn off appearance modes double-bright,
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2209 half-bright, reverse-video, standout, underline. It may or
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2210 may not turn off alt-char-mode. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2211 if (face->tty_bold_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2212 || face->tty_dim_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2213 || face->tty_reverse_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2214 || face->tty_alt_charset_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2215 || face->tty_blinking_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2216 || face->tty_underline_p)
30848
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
2217 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2218 OUTPUT1_IF (tty, tty->TS_exit_attribute_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2219 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
2220 tty->standout_mode = 0;
30848
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
2221 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2222
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2223 if (face->tty_alt_charset_p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2224 OUTPUT_IF (tty, tty->TS_exit_alt_charset_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2225 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2226 else
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2227 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2228 /* If we don't have "me" we can only have those appearances
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2229 that have exit sequences defined. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2230 if (face->tty_alt_charset_p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2231 OUTPUT_IF (tty, tty->TS_exit_alt_charset_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2232
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
2233 if (face->tty_underline_p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2234 OUTPUT_IF (tty, tty->TS_exit_underline_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2235 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2236
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2237 /* Switch back to default colors. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2238 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
2239 && ((face->foreground != FACE_TTY_DEFAULT_COLOR
264b83a3a688 Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents: 26871
diff changeset
2240 && 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
2241 || (face->background != FACE_TTY_DEFAULT_COLOR
264b83a3a688 Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents: 26871
diff changeset
2242 && face->background != FACE_TTY_DEFAULT_BG_COLOR)))
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2243 OUTPUT1_IF (tty, tty->TS_orig_pair);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2244 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
2245
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
2246
45522
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2247 /* 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
2248 capabilities in CAPS simultaneously, with foreground and background
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2249 colors FG and BG. */
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2250
45548
612208417377 C style fix.
Miles Bader <miles@gnu.org>
parents: 45522
diff changeset
2251 int
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
2252 tty_capable_p (struct tty_display_info *tty, unsigned int caps,
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
2253 unsigned long fg, unsigned long bg)
45522
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2254 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2255 #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
2256 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
2257 return 0;
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2258
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2259 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
2260 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
2261 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
2262 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
2263 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
2264 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
2265
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2266 /* We can do it! */
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2267 return 1;
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2268 }
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2269
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2270 /* Return non-zero if the terminal is capable to display colors. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2271
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2272 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
2273 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
2274 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
2275
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2276 TERMINAL can be a terminal object, a frame, or nil (meaning the
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2277 selected frame's terminal). This function always returns nil if
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2278 TERMINAL does not refer to a text-only terminal. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2279 (Lisp_Object terminal)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2280 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2281 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
2282 if (!t)
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
2283 return Qnil;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
2284 else
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2285 return t->display_info.tty->TN_max_colors > 0 ? Qt : Qnil;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2286 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2287
42954
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2288 /* Return the number of supported colors. */
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2289 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
2290 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
2291 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
2292
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2293 TERMINAL can be a terminal object, a frame, or nil (meaning the
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2294 selected frame's terminal). This function always returns 0 if
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2295 TERMINAL does not refer to a text-only terminal. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2296 (Lisp_Object terminal)
42954
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2297 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2298 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
2299 if (!t)
83161
8d62eda26760 Fix byte-compile errors during bootstrap. (Reported by Juraj Kubelka.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83158
diff changeset
2300 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
2301 else
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2302 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
2303 }
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2304
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2305 #ifndef DOS_NT
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2306
78566
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2307 /* Declare here rather than in the function, as in the rest of Emacs,
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2308 to work around an HPUX compiler bug (?). See
78562
b6a121f8c4ff Comment previous change.
Glenn Morris <rgm@gnu.org>
parents: 78560
diff changeset
2309 http://lists.gnu.org/archive/html/emacs-devel/2007-08/msg00410.html */
78566
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2310 static int default_max_colors;
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2311 static int default_max_pairs;
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2312 static int default_no_color_video;
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2313 static char *default_orig_pair;
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2314 static char *default_set_foreground;
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2315 static char *default_set_background;
78560
44134c35ea57 Philippe Waroquiers <philippe.waroquiers at eurocontrol.int>
Glenn Morris <rgm@gnu.org>
parents: 78260
diff changeset
2316
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2317 /* 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
2318 terminal. */
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2319 static void
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
2320 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
2321 {
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2322
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2323 if (save)
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2324 {
95481
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
2325 xfree (default_orig_pair);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2326 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
2327
95481
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
2328 xfree (default_set_foreground);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2329 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
2330 : NULL;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2331
95481
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
2332 xfree (default_set_background);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2333 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
2334 : NULL;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2335
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2336 default_max_colors = tty->TN_max_colors;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2337 default_max_pairs = tty->TN_max_pairs;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2338 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
2339 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2340 else
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2341 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2342 tty->TS_orig_pair = default_orig_pair;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2343 tty->TS_set_foreground = default_set_foreground;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2344 tty->TS_set_background = default_set_background;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2345 tty->TN_max_colors = default_max_colors;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2346 tty->TN_max_pairs = default_max_pairs;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2347 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
2348 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2349 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2350
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2351 /* 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
2352 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
2353 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
2354 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
2355 static void
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
2356 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
2357 {
52652
31a3a92c1a03 (tty_setup_colors): Treat any negative argument as -1.
Eli Zaretskii <eliz@gnu.org>
parents: 52579
diff changeset
2358 /* 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
2359 if (mode < -1)
31a3a92c1a03 (tty_setup_colors): Treat any negative argument as -1.
Eli Zaretskii <eliz@gnu.org>
parents: 52579
diff changeset
2360 mode = -1;
31a3a92c1a03 (tty_setup_colors): Treat any negative argument as -1.
Eli Zaretskii <eliz@gnu.org>
parents: 52579
diff changeset
2361
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2362 switch (mode)
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2363 {
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2364 case -1: /* no colors at all */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2365 tty->TN_max_colors = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2366 tty->TN_max_pairs = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2367 tty->TN_no_color_video = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2368 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
2369 break;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2370 case 0: /* default colors, if any */
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2371 default:
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2372 tty_default_color_capabilities (tty, 0);
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2373 break;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2374 case 8: /* 8 standard ANSI colors */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2375 tty->TS_orig_pair = "\033[0m";
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2376 #ifdef TERMINFO
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2377 tty->TS_set_foreground = "\033[3%p1%dm";
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2378 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
2379 #else
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2380 tty->TS_set_foreground = "\033[3%dm";
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2381 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
2382 #endif
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2383 tty->TN_max_colors = 8;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2384 tty->TN_max_pairs = 64;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2385 tty->TN_no_color_video = 0;
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2386 break;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2387 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2388 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2389
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2390 void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
2391 set_tty_color_mode (struct tty_display_info *tty, struct frame *f)
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2392 {
107984
bef5d1738c0b Make variable forwarding explicit rather the using special values.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107847
diff changeset
2393 Lisp_Object tem, val;
93883
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2394 Lisp_Object color_mode;
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2395 int mode;
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2396 Lisp_Object tty_color_mode_alist
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2397 = Fintern_soft (build_string ("tty-color-mode-alist"), Qnil);
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2398
93984
ddcecf318c8a (set_tty_color_mode): Left over typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93883
diff changeset
2399 tem = assq_no_quit (Qtty_color_mode, f->param_alist);
93883
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2400 val = CONSP (tem) ? XCDR (tem) : Qnil;
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2401
52579
611336925095 (set_tty_color_mode): Use INTEGERP to test whether a
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
2402 if (INTEGERP (val))
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2403 color_mode = val;
107984
bef5d1738c0b Make variable forwarding explicit rather the using special values.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107847
diff changeset
2404 else if (SYMBOLP (tty_color_mode_alist))
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2405 {
107984
bef5d1738c0b Make variable forwarding explicit rather the using special values.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107847
diff changeset
2406 tem = Fassq (val, Fsymbol_value (tty_color_mode_alist));
93883
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2407 color_mode = CONSP (tem) ? XCDR (tem) : Qnil;
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2408 }
107984
bef5d1738c0b Make variable forwarding explicit rather the using special values.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107847
diff changeset
2409 else
bef5d1738c0b Make variable forwarding explicit rather the using special values.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107847
diff changeset
2410 color_mode = Qnil;
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
2411
93883
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2412 mode = INTEGERP (color_mode) ? XINT (color_mode) : 0;
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2413
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2414 if (mode != tty->previous_color_mode)
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2415 {
93883
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2416 Lisp_Object funsym = intern ("tty-set-up-initial-frame-faces");
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2417 tty->previous_color_mode = mode;
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2418 tty_setup_colors (tty , mode);
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2419 /* This recomputes all the faces given the new color definitions. */
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2420 safe_call (1, &funsym);
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2421 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2422 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2423
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2424 #endif /* !DOS_NT */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2425
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2426
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2427
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2428 /* 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
2429
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2430 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
2431 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
2432 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2433 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
2434
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2435 if (t && t->type != output_termcap && t->type != output_msdos_raw)
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2436 {
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2437 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
2438 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
2439 else
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2440 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
2441 }
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2442
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2443 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
2444 }
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
2445
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
2446 /* 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
2447 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
2448
83342
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
2449 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
2450
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
2451 Returns NULL if the named terminal device is not opened. */
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2452
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2453 struct terminal *
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109664
diff changeset
2454 get_named_tty (const char *name)
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2455 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2456 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
2457
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
2458 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
2459 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
2460
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
2461 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
2462 {
97720
b2594691f8f2 (get_named_tty): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 97658
diff changeset
2463 if ((t->type == output_termcap || t->type == output_msdos_raw)
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
2464 && !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
2465 && 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
2466 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
2467 }
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2468
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2469 return 0;
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2470 }
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2471
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2472
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2473 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
2474 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
2475 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
2476
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2477 TERMINAL can be a terminal object, a frame, or nil (meaning the
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2478 selected frame's terminal). */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2479 (Lisp_Object terminal)
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2480 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2481 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
2482
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2483 if (t->type != output_termcap && t->type != output_msdos_raw)
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
2484 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
2485
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2486 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
2487 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
2488 else
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2489 return Qnil;
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2490 }
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2491
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2492 DEFUN ("controlling-tty-p", Fcontrolling_tty_p, Scontrolling_tty_p, 0, 1, 0,
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2493 doc: /* Return non-nil if TERMINAL is the controlling tty of the Emacs process.
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2494
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2495 TERMINAL can be a terminal object, a frame, or nil (meaning the
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2496 selected frame's terminal). This function always returns nil if
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2497 TERMINAL is not on a tty device. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2498 (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
2499 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2500 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
2501
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2502 if ((t->type != output_termcap && t->type != output_msdos_raw)
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2503 || strcmp (t->display_info.tty->name, DEV_TTY) != 0)
83173
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2504 return Qnil;
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2505 else
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2506 return Qt;
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2507 }
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2508
83311
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2509 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
2510 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
2511 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
2512 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
2513 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
2514
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2515 TERMINAL can be a terminal object, a frame or nil (meaning the
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2516 selected frame's terminal). This function always returns nil if
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2517 TERMINAL does not refer to a text-only terminal. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2518 (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
2519 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2520 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
2521
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2522 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
2523 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
2524 return Qnil;
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2525 }
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2526
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2527
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2528
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2529 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
2530 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
2531
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2532 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
2533 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
2534 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
2535 not updated.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2536
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2537 TTY may be a terminal object, a frame, or nil for the terminal device
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2538 of 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
2539
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
2540 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
2541 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
2542 terminal device.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2543
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2544 `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
2545 suspended.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2546
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2547 A suspended tty may be resumed by calling `resume-tty' on it. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2548 (Lisp_Object tty)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2549 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2550 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
2551 FILE *f;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2552
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2553 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
2554 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
2555
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2556 f = t->display_info.tty->input;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2557
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2558 if (f)
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2559 {
84769
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2560 /* 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
2561 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
2562 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
2563 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
2564 {
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2565 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
2566 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
2567 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
2568 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
2569 }
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2570
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2571 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
2572 delete_keyboard_wait_descriptor (fileno (f));
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2573
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2574 #ifndef MSDOS
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2575 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
2576 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
2577 fclose (t->display_info.tty->output);
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2578 #endif
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2579
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2580 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
2581 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
2582
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2583 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
2584 FRAME_SET_VISIBLE (XFRAME (t->display_info.tty->top_frame), 0);
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2585
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2586 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2587
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
2588 /* 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
2589 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
2590
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2591 return Qnil;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2592 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2593
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2594 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
2595 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
2596 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
2597 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
2598
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2599 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
2600 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
2601
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
2602 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
2603 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
2604 device.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2605
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2606 `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
2607 suspended.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2608
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2609 TTY may be a terminal object, a frame, or nil (meaning the selected
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2610 frame's terminal). */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2611 (Lisp_Object tty)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2612 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2613 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
2614 int fd;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2615
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2616 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
2617 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
2618
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2619 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
2620 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2621 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
2622 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
2623
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2624 #ifdef MSDOS
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2625 t->display_info.tty->output = stdout;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2626 t->display_info.tty->input = stdin;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2627 #else /* !MSDOS */
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2628 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
2629
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
2630 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
2631 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
2632
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
2633 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
2634 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
2635
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2636 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
2637 t->display_info.tty->input = t->display_info.tty->output;
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2638 #endif
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2639
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2640 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
2641
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2642 if (FRAMEP (t->display_info.tty->top_frame))
101690
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2643 {
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2644 struct frame *f = XFRAME (t->display_info.tty->top_frame);
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2645 int width, height;
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2646 int old_height = FRAME_COLS (f);
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2647 int old_width = FRAME_LINES (f);
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2648
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2649 /* Check if terminal/window size has changed while the frame
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2650 was suspended. */
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2651 get_tty_size (fileno (t->display_info.tty->input), &width, &height);
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2652 if (width != old_width || height != old_height)
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2653 change_frame_size (f, height, width, 0, 0, 0);
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2654 FRAME_SET_VISIBLE (XFRAME (t->display_info.tty->top_frame), 1);
1009d5607716 * dispnew.c (window_change_signal): Don't try to get the size of a
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100951
diff changeset
2655 }
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2656
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2657 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
2658
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
2659 /* 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
2660 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
2661 {
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2662 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
2663 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
2664 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
2665 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
2666 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2667 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2668
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
2669 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
2670
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2671 return Qnil;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2672 }
83311
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2673
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2674
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2675 /***********************************************************************
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2676 Mouse
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2677 ***********************************************************************/
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2678
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
2679 #ifdef HAVE_GPM
81107
a9d423c1c1d4 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 81102
diff changeset
2680 void
a9d423c1c1d4 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 81102
diff changeset
2681 term_mouse_moveto (int x, int y)
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2682 {
81811
c10410a3aa36 Include unistd.h for ttyname, used in handle_one_term_event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81308
diff changeset
2683 /* TODO: how to set mouse position?
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2684 const char *name;
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2685 int fd;
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2686 name = (const char *) ttyname (0);
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2687 fd = open (name, O_WRONLY);
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2688 SOME_FUNCTION (x, y, fd);
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2689 close (fd);
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2690 last_mouse_x = x;
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2691 last_mouse_y = y; */
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2692 }
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2693
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2694 static void
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2695 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
2696 {
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2697 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
2698 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
2699 int i;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2700
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2701 struct frame *f = XFRAME (w->frame);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2702 struct tty_display_info *tty = FRAME_TTY (f);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2703
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2704 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
2705 to do anything. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2706 w->current_matrix != NULL
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2707 /* 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
2708 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
2709 && 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
2710 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2711 /* 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
2712 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
2713 the highlight region. */
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2714
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2715 /* Save current cursor co-ordinates */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2716 save_y = curY (tty);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2717 save_x = curX (tty);
80979
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 /* 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
2720 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
2721 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2722 int start_hpos, end_hpos, nglyphs;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2723 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
2724
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2725 /* 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
2726 if (!row->enabled_p)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2727 continue;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2728
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2729 /* 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
2730 if (i == mouse_face_beg_row)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2731 start_hpos = mouse_face_beg_col;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2732 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2733 start_hpos = 0;
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 if (i == mouse_face_end_row)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2736 end_hpos = mouse_face_end_col;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2737 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2738 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2739 end_hpos = row->used[TEXT_AREA];
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2740 if (draw == DRAW_NORMAL_TEXT)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2741 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
2742 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2743
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2744 if (end_hpos <= start_hpos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2745 continue;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2746 /* 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
2747 mouse-face. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2748 row->mouse_face_p = draw > 0;
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 nglyphs = end_hpos - start_hpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2751
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2752 if (end_hpos >= row->used[TEXT_AREA])
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2753 nglyphs = row->used[TEXT_AREA] - start_hpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2754
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2755 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
2756 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
2757 + WINDOW_LEFT_EDGE_X (w);
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2758
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2759 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
2760
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2761 if (draw == DRAW_MOUSE_FACE)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2762 {
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2763 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
2764 nglyphs, mouse_face_face_id);
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 else /* draw == DRAW_NORMAL_TEXT */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2767 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
2768 }
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2769 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
2770 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2771 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2772
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2773 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
2774 term_clear_mouse_face (void)
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2775 {
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2776 if (!NILP (mouse_face_window))
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2777 term_show_mouse_face (DRAW_NORMAL_TEXT);
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 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
2780 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
2781 mouse_face_window = Qnil;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2782 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2783
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2784 /* 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
2785 *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
2786 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
2787 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
2788 - taken from msdos.c */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2789 static int
110562
ea50a897140e Fix int/EMACS_INT use in process.c and term.c.
Eli Zaretskii <eliz@gnu.org>
parents: 110357
diff changeset
2790 fast_find_position (struct window *w, EMACS_INT pos, int *hpos, int *vpos)
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2791 {
110562
ea50a897140e Fix int/EMACS_INT use in process.c and term.c.
Eli Zaretskii <eliz@gnu.org>
parents: 110357
diff changeset
2792 int i, lastcol, maybe_next_line_p = 0;
ea50a897140e Fix int/EMACS_INT use in process.c and term.c.
Eli Zaretskii <eliz@gnu.org>
parents: 110357
diff changeset
2793 EMACS_INT line_start_position;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2794 int yb = window_text_bottom_y (w);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2795 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
2796
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2797 while (row->y < yb)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2798 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2799 if (row->used[TEXT_AREA])
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2800 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
2801 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2802 line_start_position = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2803
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2804 if (line_start_position > pos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2805 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2806 /* 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
2807 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
2808 else if (line_start_position == pos
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2809 && pos == BUF_ZV (XBUFFER (w->buffer)))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2810 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2811 maybe_next_line_p = 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2812 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2813 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2814 else if (line_start_position > 0)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2815 best_row = row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2816
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2817 /* 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
2818 never-never land... */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2819 if (row->y + 1 >= yb)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2820 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2821
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2822 ++row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2823 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2824
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2825 /* Find the right column within BEST_ROW. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2826 lastcol = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2827 row = best_row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2828 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
2829 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2830 struct glyph *glyph = row->glyphs[TEXT_AREA] + i;
110562
ea50a897140e Fix int/EMACS_INT use in process.c and term.c.
Eli Zaretskii <eliz@gnu.org>
parents: 110357
diff changeset
2831 EMACS_INT charpos;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2832
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2833 charpos = glyph->charpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2834 if (charpos == pos)
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 *hpos = i;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2837 *vpos = row->y;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2838 return 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2839 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2840 else if (charpos > pos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2841 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2842 else if (charpos > 0)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2843 lastcol = i;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2844 }
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 /* 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
2847 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
2848 use the start of the following line. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2849 if (maybe_next_line_p)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2850 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2851 ++row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2852 lastcol = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2853 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2854
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2855 *vpos = row->y;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2856 *hpos = lastcol + 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2857 return 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2858 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2859
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2860 static void
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2861 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
2862 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2863 enum window_part part;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2864 Lisp_Object window;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2865 struct window *w;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2866 struct buffer *b;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2867
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2868 if (NILP (Vmouse_highlight)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2869 || !f->glyphs_initialized_p)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2870 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2871
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2872 /* Which window is that in? */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2873 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
2874
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2875 /* Not on a window -> return. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2876 if (!WINDOWP (window))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2877 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2878
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2879 if (!EQ (window, mouse_face_window))
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2880 term_clear_mouse_face ();
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 w = XWINDOW (window);
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 /* 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
2885 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
2886 b = XBUFFER (w->buffer);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2887 if (part == ON_TEXT
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2888 && EQ (w->window_end_valid, w->buffer)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2889 && XFASTINT (w->last_modified) == BUF_MODIFF (b)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2890 && 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
2891 {
110562
ea50a897140e Fix int/EMACS_INT use in process.c and term.c.
Eli Zaretskii <eliz@gnu.org>
parents: 110357
diff changeset
2892 int i, nrows = w->current_matrix->nrows;
ea50a897140e Fix int/EMACS_INT use in process.c and term.c.
Eli Zaretskii <eliz@gnu.org>
parents: 110357
diff changeset
2893 EMACS_INT pos;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2894 struct glyph_row *row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2895 struct glyph *glyph;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2896
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2897 /* Find the glyph under X/Y. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2898 glyph = NULL;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2899 if (y >= 0 && y < nrows)
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 row = MATRIX_ROW (w->current_matrix, y);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2902 /* 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
2903 not enabled. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2904 for (i = 0; i <= y; i++)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2905 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
2906 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2907 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
2908 && row->displays_text_p
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2909 && x < window_box_width (w, TEXT_AREA))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2910 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2911 glyph = row->glyphs[TEXT_AREA];
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2912 if (x >= row->used[TEXT_AREA])
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2913 glyph = NULL;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2914 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2915 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2916 glyph += x;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2917 if (!BUFFERP (glyph->object))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2918 glyph = NULL;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2919 }
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 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2922
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2923 /* 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
2924 if (glyph == NULL)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2925 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2926 term_clear_mouse_face ();
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2927 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2928 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2929
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2930 if (!BUFFERP (glyph->object))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2931 abort ();
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2932 pos = glyph->charpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2933
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2934 /* Check for mouse-face. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2935 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2936 Lisp_Object mouse_face, overlay, position, *overlay_vec;
110562
ea50a897140e Fix int/EMACS_INT use in process.c and term.c.
Eli Zaretskii <eliz@gnu.org>
parents: 110357
diff changeset
2937 int noverlays;
ea50a897140e Fix int/EMACS_INT use in process.c and term.c.
Eli Zaretskii <eliz@gnu.org>
parents: 110357
diff changeset
2938 EMACS_INT obegv, ozv;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2939 struct buffer *obuf;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2940
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2941 /* 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
2942 if (pos > BUF_Z (b))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2943 return;
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 /* 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
2946 overlays_at and compute_char_face. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2947 obuf = current_buffer;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2948 current_buffer = b;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2949 obegv = BEGV;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2950 ozv = ZV;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2951 BEGV = BEG;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2952 ZV = Z;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2953
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2954 /* Is this char mouse-active? */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2955 XSETINT (position, pos);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2956
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2957 /* 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
2958 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
2959 /* Sort overlays into increasing priority order. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2960 noverlays = sort_overlays (overlay_vec, noverlays, w);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2961
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2962 /* 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
2963 if (!(EQ (window, mouse_face_window)
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2964 && y >= mouse_face_beg_row
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2965 && y <= mouse_face_end_row
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2966 && (y > mouse_face_beg_row
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2967 || x >= mouse_face_beg_col)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2968 && (y < mouse_face_end_row
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2969 || x < mouse_face_end_col
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2970 || mouse_face_past_end)))
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 /* 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
2973 term_clear_mouse_face ();
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2974
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2975 /* 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
2976 property. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2977 overlay = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2978 for (i = noverlays - 1; i >= 0; --i)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2979 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2980 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
2981 if (!NILP (mouse_face))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2982 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2983 overlay = overlay_vec[i];
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2984 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2985 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2986 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2987
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2988 /* 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
2989 if (NILP (overlay))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2990 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
2991 w->buffer);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2992
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2993 /* Handle the overlay case. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2994 if (!NILP (overlay))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2995 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2996 /* 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
2997 should be active. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2998 Lisp_Object before, after;
92237
ce06567a933d * dispextern.h (face_at_buffer_position, face_for_overlay_string)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91327
diff changeset
2999 EMACS_INT ignore;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3000
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3001
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3002 before = Foverlay_start (overlay);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3003 after = Foverlay_end (overlay);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3004 /* Record this as the current active region. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3005 fast_find_position (w, XFASTINT (before),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3006 &mouse_face_beg_col,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3007 &mouse_face_beg_row);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3008
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3009 mouse_face_past_end
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3010 = !fast_find_position (w, XFASTINT (after),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3011 &mouse_face_end_col,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3012 &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
3013 mouse_face_window = window;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3014
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3015 mouse_face_face_id
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3016 = face_at_buffer_position (w, pos, 0, 0,
103114
fa8e2c663118 * xfaces.c (face_at_buffer_position): New arg base_face_id.
Chong Yidong <cyd@stupidchicken.com>
parents: 103048
diff changeset
3017 &ignore, pos + 1, 1, -1);
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 /* Display it as active. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3020 term_show_mouse_face (DRAW_MOUSE_FACE);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3021 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3022 /* Handle the text property case. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3023 else if (!NILP (mouse_face))
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 /* 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
3026 should be active. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3027 Lisp_Object before, after, beginning, end;
92237
ce06567a933d * dispextern.h (face_at_buffer_position, face_for_overlay_string)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91327
diff changeset
3028 EMACS_INT ignore;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3029
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3030 beginning = Fmarker_position (w->start);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3031 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
3032 before
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3033 = 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
3034 Qmouse_face,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3035 w->buffer, beginning);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3036 after
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3037 = Fnext_single_property_change (position, Qmouse_face,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3038 w->buffer, end);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3039
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3040 /* Record this as the current active region. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3041 fast_find_position (w, XFASTINT (before),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3042 &mouse_face_beg_col,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3043 &mouse_face_beg_row);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3044 mouse_face_past_end
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3045 = !fast_find_position (w, XFASTINT (after),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3046 &mouse_face_end_col,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3047 &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
3048 mouse_face_window = window;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3049
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3050 mouse_face_face_id
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3051 = face_at_buffer_position (w, pos, 0, 0,
103114
fa8e2c663118 * xfaces.c (face_at_buffer_position): New arg base_face_id.
Chong Yidong <cyd@stupidchicken.com>
parents: 103048
diff changeset
3052 &ignore, pos + 1, 1, -1);
80979
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 /* Display it as active. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3055 term_show_mouse_face (DRAW_MOUSE_FACE);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3056 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3057 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3058
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3059 /* Look for a `help-echo' property. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3060 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3061 Lisp_Object help;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3062
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3063 /* Check overlays first. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3064 help = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3065 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
3066 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3067 overlay = overlay_vec[i];
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3068 help = Foverlay_get (overlay, Qhelp_echo);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3069 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3070
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3071 if (!NILP (help))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3072 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3073 help_echo_string = help;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3074 help_echo_window = window;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3075 help_echo_object = overlay;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3076 help_echo_pos = pos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3077 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3078 /* Try text properties. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3079 else if (NILP (help)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3080 && ((STRINGP (glyph->object)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3081 && glyph->charpos >= 0
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3082 && glyph->charpos < SCHARS (glyph->object))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3083 || (BUFFERP (glyph->object)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3084 && glyph->charpos >= BEGV
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3085 && glyph->charpos < ZV)))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3086 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3087 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
3088 Qhelp_echo, glyph->object);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3089 if (!NILP (help))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3090 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3091 help_echo_string = help;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3092 help_echo_window = window;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3093 help_echo_object = glyph->object;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3094 help_echo_pos = glyph->charpos;
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 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3097 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3098
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3099 BEGV = obegv;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3100 ZV = ozv;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3101 current_buffer = obuf;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3102 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3103 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3104 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3105
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3106 static int
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3107 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
3108 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3109 /* 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
3110 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
3111 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3112 frame->mouse_moved = 1;
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3113 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
3114 /* Remember which glyph we're now on. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3115 last_mouse_x = event->x;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3116 last_mouse_y = event->y;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3117 return 1;
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 return 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3120 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3121
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3122 /* Return the current position of the mouse.
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3123
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3124 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
3125 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
3126 garbage.
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3127
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3128 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
3129 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
3130
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3131 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
3132
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3133 This clears mouse_moved until the next motion
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
3134 event arrives. */
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3135 static void
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3136 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
3137 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
3138 Lisp_Object *y, unsigned long *time)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3139 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3140 struct timeval now;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3141
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3142 *fp = SELECTED_FRAME ();
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
3143 (*fp)->mouse_moved = 0;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3144
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3145 *bar_window = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3146 *part = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3147
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3148 XSETINT (*x, last_mouse_x);
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
3149 XSETINT (*y, last_mouse_y);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3150 gettimeofday(&now, 0);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3151 *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
3152 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3153
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3154 /* 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
3155
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3156 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
3157 the mouse. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3158
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3159 static Lisp_Object
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3160 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
3161 struct frame *f)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3162 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3163 struct timeval now;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3164 int i, j;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3165
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3166 result->kind = GPM_CLICK_EVENT;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3167 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
3168 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3169 if (event->buttons & j) {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3170 result->code = i; /* button number */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3171 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3172 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3173 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3174 gettimeofday(&now, 0);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3175 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
3176
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3177 if (event->type & GPM_UP)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3178 result->modifiers = up_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3179 else if (event->type & GPM_DOWN)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3180 result->modifiers = down_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3181 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3182 result->modifiers = 0;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
3183
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3184 if (event->type & GPM_SINGLE)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3185 result->modifiers |= click_modifier;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
3186
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3187 if (event->type & GPM_DOUBLE)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3188 result->modifiers |= double_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3189
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3190 if (event->type & GPM_TRIPLE)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3191 result->modifiers |= triple_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3192
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3193 if (event->type & GPM_DRAG)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3194 result->modifiers |= drag_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3195
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3196 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
3197
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3198 /* 1 << KG_SHIFT */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3199 if (event->modifiers & (1 << 0))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3200 result->modifiers |= shift_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3201
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3202 /* 1 << KG_CTRL */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3203 if (event->modifiers & (1 << 2))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3204 result->modifiers |= ctrl_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3205
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3206 /* 1 << KG_ALT || KG_ALTGR */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3207 if (event->modifiers & (1 << 3)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3208 || event->modifiers & (1 << 1))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3209 result->modifiers |= meta_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3210 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3211
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3212 XSETINT (result->x, event->x);
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3213 XSETINT (result->y, event->y);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3214 XSETFRAME (result->frame_or_window, f);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3215 result->arg = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3216 return Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3217 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3218
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
3219 int
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
3220 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
3221 {
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
3222 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
3223 struct input_event ie;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3224 int do_help = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3225 int count = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3226
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3227 EVENT_INIT (ie);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3228 ie.kind = NO_EVENT;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3229 ie.arg = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3230
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3231 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
3232 previous_help_echo_string = help_echo_string;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3233 help_echo_string = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3234
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3235 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
3236
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3237 if (!term_mouse_movement (f, event))
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3238 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
3239
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3240 /* 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
3241 has changed, generate a HELP_EVENT. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3242 if (!NILP (help_echo_string)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3243 || !NILP (previous_help_echo_string))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3244 do_help = 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3245
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3246 goto done;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3247 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3248 else {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3249 f->mouse_moved = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3250 term_mouse_click (&ie, event, f);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3251 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3252
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3253 done:
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3254 if (ie.kind != NO_EVENT)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3255 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3256 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
3257 count++;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3258 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3259
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3260 if (do_help
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3261 && !(hold_quit && hold_quit->kind != NO_EVENT))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3262 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3263 Lisp_Object frame;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3264
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3265 if (f)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3266 XSETFRAME (frame, f);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3267 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3268 frame = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3269
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3270 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
3271 help_echo_object, help_echo_pos);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3272 count++;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3273 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3274
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3275 return count;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3276 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3277
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3278 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
3279 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
3280 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
3281 Gpm-mouse can only be activated for one tty at a time. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
3282 (void)
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3283 {
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3284 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
3285 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
3286 = ((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
3287 ? (f)->terminal->display_info.tty : NULL);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3288 Gpm_Connect connection;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3289
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
3290 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
3291 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
3292 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
3293 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
3294 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
3295 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
3296
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3297 connection.eventMask = ~0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3298 connection.defaultMask = ~GPM_HARD;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3299 connection.maxMod = ~0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3300 connection.minMod = 0;
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3301 gpm_zerobased = 1;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3302
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3303 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
3304 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
3305 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3306 {
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3307 gpm_tty = tty;
84955
dfbee4931a6a (Fterm_open_connection): Add comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84849
diff changeset
3308 /* `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
3309 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
3310 before calling init_sys_modes. */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
3311 reset_sys_modes (tty);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
3312 init_sys_modes (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3313 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
3314 return Qnil;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3315 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3316 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3317
98155
314662df7c17 * term.c (close_gpm): New fun extracted from Fgpm_mouse_stop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 97830
diff changeset
3318 void
102744
d69c45eb83b1 * keyboard.c (tty_read_avail_input): Don't treat a -1 return from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101964
diff changeset
3319 close_gpm (int fd)
98155
314662df7c17 * term.c (close_gpm): New fun extracted from Fgpm_mouse_stop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 97830
diff changeset
3320 {
102744
d69c45eb83b1 * keyboard.c (tty_read_avail_input): Don't treat a -1 return from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101964
diff changeset
3321 if (fd >= 0)
d69c45eb83b1 * keyboard.c (tty_read_avail_input): Don't treat a -1 return from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101964
diff changeset
3322 delete_gpm_wait_descriptor (fd);
98155
314662df7c17 * term.c (close_gpm): New fun extracted from Fgpm_mouse_stop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 97830
diff changeset
3323 while (Gpm_Close()); /* close all the stack */
314662df7c17 * term.c (close_gpm): New fun extracted from Fgpm_mouse_stop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 97830
diff changeset
3324 gpm_tty = NULL;
314662df7c17 * term.c (close_gpm): New fun extracted from Fgpm_mouse_stop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 97830
diff changeset
3325 }
314662df7c17 * term.c (close_gpm): New fun extracted from Fgpm_mouse_stop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 97830
diff changeset
3326
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3327 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
3328 0, 0, 0,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3329 doc: /* Close a connection to Gpm. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
3330 (void)
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3331 {
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
3332 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
3333 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
3334 = ((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
3335 ? (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
3336
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
3337 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
3338 return Qnil; /* Not activated on this terminal, nothing to do. */
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
3339
102744
d69c45eb83b1 * keyboard.c (tty_read_avail_input): Don't treat a -1 return from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 101964
diff changeset
3340 close_gpm (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
3341 return Qnil;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3342 }
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
3343 #endif /* HAVE_GPM */
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3344
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3345
103617
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3346 #ifndef MSDOS
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3347 /***********************************************************************
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3348 Initialization
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3349 ***********************************************************************/
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3350
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3351 /* 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
3352 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
3353
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
3354 void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3355 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
3356 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3357 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
3358
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3359 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
3360 abort ();
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3361
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3362 t = xmalloc (sizeof (struct tty_output));
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109144
diff changeset
3363 memset (t, 0, sizeof (struct 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
3364
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3365 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
3366
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3367 f->output_data.tty = t;
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3368 }
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3369
100367
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3370 /* Delete frame F's face cache, and its tty-dependent part. */
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3371
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3372 static void
100367
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3373 tty_free_frame_resources (struct frame *f)
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3374 {
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3375 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
3376 abort ();
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3377
100367
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3378 if (FRAME_FACE_CACHE (f))
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3379 free_frame_faces (f);
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3380
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3381 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
3382 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3383
103617
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3384 #else /* MSDOS */
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3385
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3386 /* Delete frame F's face cache. */
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3387
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3388 static void
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3389 tty_free_frame_resources (struct frame *f)
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3390 {
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3391 if (! FRAME_TERMCAP_P (f) && ! FRAME_MSDOS_P (f))
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3392 abort ();
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3393
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3394 if (FRAME_FACE_CACHE (f))
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3395 free_frame_faces (f);
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3396 }
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3397 #endif /* MSDOS */
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3398
84461
7ec30b352b6e * xterm.c (x_create_terminal): Add comment.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84359
diff changeset
3399 /* 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
3400
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3401 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
3402 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
3403 {
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3404 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
3405 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
3406 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
3407 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
3408 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
3409 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
3410 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
3411 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
3412 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
3413 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
3414 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
3415 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
3416 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
3417 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
3418 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
3419 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
3420 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
3421 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
3422 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
3423 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
3424 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
3425 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
3426 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
3427 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
3428 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
3429 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
3430
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3431 /* 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
3432 correctly. */
100367
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3433 terminal->delete_frame_hook = &tty_free_frame_resources;
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3434 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
3435 }
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3436
84461
7ec30b352b6e * xterm.c (x_create_terminal): Add comment.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84359
diff changeset
3437 /* 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
3438
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3439 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
3440 set_tty_hooks (struct terminal *terminal)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3441 {
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3442 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
3443
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3444 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
3445 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
3446
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3447 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
3448 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
3449 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
3450
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3451 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
3452
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3453 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
3454 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
3455 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
3456
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3457 terminal->ring_bell_hook = &tty_ring_bell;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
3458
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3459 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
3460 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
3461 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
3462 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
3463 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
3464
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3465 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
3466 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
3467 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
3468
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3469 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
3470 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
3471 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
3472 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
3473
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3474 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
3475 terminal->frame_up_to_date_hook = 0; /* Not needed. */
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
3476
100367
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3477 terminal->delete_frame_hook = &tty_free_frame_resources;
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3478 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
3479 }
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3480
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3481 /* 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
3482 static void
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3483 dissociate_if_controlling_tty (int fd)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3484 {
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3485 #ifndef DOS_NT
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3486 int pgid;
83154
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3487 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
3488 if (pgid != -1)
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3489 {
109633
ce2dcd6fda75 Fix emacs -Q -f server-start & emacsclient -t on GNU/Linux.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109559
diff changeset
3490 #if defined (USG5)
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3491 setpgrp ();
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3492 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
3493 #elif defined (CYGWIN)
b651dc7c54ac * term.c (dissociate_if_controlling_tty): Call setsid on CYGWIN.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83891
diff changeset
3494 setsid ();
b651dc7c54ac * term.c (dissociate_if_controlling_tty): Call setsid on CYGWIN.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83891
diff changeset
3495 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
3496 #else
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3497 #ifdef TIOCNOTTY /* Try BSD ioctls. */
83154
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3498 sigblock (sigmask (SIGTTOU));
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3499 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
3500 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
3501 {
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3502 no_controlling_tty = 1;
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3503 }
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3504 if (fd != -1)
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3505 emacs_close (fd);
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3506 sigunblock (sigmask (SIGTTOU));
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3507 #else
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3508 /* Unknown system. */
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3509 croak ();
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3510 #endif /* ! TIOCNOTTY */
83158
f948c9fd910c Fix parse error in term.c (ARISAWA Akihiro).
Karoly Lorentey <lorentey@elte.hu>
parents: 83154
diff changeset
3511 #endif /* ! USG */
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3512 }
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3513 #endif /* !DOS_NT */
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3514 }
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3515
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3516 /* 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
3517 type.
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3518
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
3519 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
3520 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
3521 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
3522
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3523 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
3524
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3525 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
3526
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3527 struct terminal *
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109664
diff changeset
3528 init_tty (const char *name, const char *terminal_type, int must_succeed)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3529 {
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
3530 char *area = NULL;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3531 char **address = &area;
52314
529dd59ee898 (term_init): Remove `const' from buffer_size's declaration.
Eli Zaretskii <eliz@gnu.org>
parents: 52294
diff changeset
3532 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
3533 register char *p = NULL;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3534 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
3535 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
3536 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
3537 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
3538
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3539 if (!terminal_type)
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3540 maybe_fatal (must_succeed, 0,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3541 "Unknown terminal type",
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3542 "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
3543
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
3544 if (name == NULL)
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3545 name = DEV_TTY;
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3546 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
3547 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
3548
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3549 /* 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
3550 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
3551 /* 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
3552 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
3553 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
3554 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
3555 if (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3556 return terminal;
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3557
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3558 terminal = create_terminal ();
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3559 #ifdef MSDOS
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3560 if (been_here > 0)
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3561 maybe_fatal (1, 0, "Attempt to create another terminal %s", "",
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3562 name, "");
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3563 been_here = 1;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3564 tty = &the_only_display_info;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3565 #else
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3566 tty = (struct tty_display_info *) xmalloc (sizeof (struct tty_display_info));
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3567 #endif
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109144
diff changeset
3568 memset (tty, 0, sizeof (struct tty_display_info));
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3569 tty->next = tty_list;
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3570 tty_list = tty;
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3571
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3572 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
3573 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
3574 tty->terminal = terminal;
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3575
82991
2b26656ff804 MULTI_KBOARD support for ttys. Input-related bugfixes for X+tty sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82990
diff changeset
3576 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
3577 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
3578
110588
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3579 encode_terminal_src_size = 0;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3580 encode_terminal_dst_size = 0;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3581
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3582 #ifdef HAVE_GPM
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3583 terminal->mouse_position_hook = term_mouse_position;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3584 mouse_face_window = Qnil;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3585 #endif
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3586
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3587
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3588 #ifndef DOS_NT
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3589 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
3590
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
3591 {
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
3592 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
3593 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
3594
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3595 #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
3596 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
3597 /* 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
3598 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
3599 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
3600 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
3601 else
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3602 #else
83074
34a7a8f40548 Fix background-mode on terminal frames (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
3603 /* 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
3604 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
3605 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
3606 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
3607 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
3608 #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
3609
100370
c611d83003ce (init_tty): Move setting the terminal name before the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100367
diff changeset
3610 tty->name = xstrdup (name);
c611d83003ce (init_tty): Move setting the terminal name before the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100367
diff changeset
3611 terminal->name = xstrdup (name);
c611d83003ce (init_tty): Move setting the terminal name before the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100367
diff changeset
3612
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
3613 if (fd < 0)
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3614 maybe_fatal (must_succeed, terminal,
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
3615 "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
3616 "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
3617 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
3618 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
3619 {
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
3620 close (fd);
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3621 maybe_fatal (must_succeed, terminal,
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
3622 "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
3623 "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
3624 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
3625 }
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
3626
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
3627 #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
3628 if (!ctty)
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3629 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
3630 #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
3631
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
3632 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
3633 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
3634 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
3635 }
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3636
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
3637 tty->type = xstrdup (terminal_type);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3638
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3639 add_keyboard_wait_descriptor (fileno (tty->input));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
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 Wcm_clear (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3642
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3643 tty->termcap_term_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
3644
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3645 /* 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
3646 terminal. */
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3647 sigblock (sigmask (SIGTTOU));
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3648 status = tgetent (tty->termcap_term_buffer, terminal_type);
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3649 sigunblock (sigmask (SIGTTOU));
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3650
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3651 if (status < 0)
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3652 {
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3653 #ifdef TERMINFO
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3654 maybe_fatal (must_succeed, terminal,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3655 "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
3656 "Cannot open terminfo database file");
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3657 #else
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3658 maybe_fatal (must_succeed, terminal,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3659 "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
3660 "Cannot open termcap database file");
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3661 #endif
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3662 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3663 if (status == 0)
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3664 {
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3665 maybe_fatal (must_succeed, terminal,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3666 "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
3667 "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
3668 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
3669 use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
107847
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
3670 `setenv TERM ...') to specify the correct type. It may be necessary\n"
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
3671 #ifdef TERMINFO
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
3672 "to do `unset TERMINFO' (C-shell: `unsetenv TERMINFO') as well.",
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3673 #else
107847
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
3674 "to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.",
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
3675 #endif
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3676 terminal_type);
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3677 }
52265
84e49afb2178 (term_init): Use a buffer of size 4096 for tgetent since
Richard M. Stallman <rms@gnu.org>
parents: 51212
diff changeset
3678
52294
d9ae4cdf1ed1 (term_init): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 52293
diff changeset
3679 #ifndef TERMINFO
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3680 if (strlen (tty->termcap_term_buffer) >= buffer_size)
52265
84e49afb2178 (term_init): Use a buffer of size 4096 for tgetent since
Richard M. Stallman <rms@gnu.org>
parents: 51212
diff changeset
3681 abort ();
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3682 buffer_size = strlen (tty->termcap_term_buffer);
52293
473d34d4814c (term_init): Fix previous change; don't rely on the
Kenichi Handa <handa@m17n.org>
parents: 52265
diff changeset
3683 #endif
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3684 tty->termcap_strings_buffer = area = (char *) xmalloc (buffer_size);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3685 tty->TS_ins_line = tgetstr ("al", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3686 tty->TS_ins_multi_lines = tgetstr ("AL", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3687 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
3688 BackTab (tty) = tgetstr ("bt", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3689 tty->TS_clr_to_bottom = tgetstr ("cd", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3690 tty->TS_clr_line = tgetstr ("ce", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3691 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
3692 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
3693 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
3694 CR (tty) = tgetstr ("cr", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3695 tty->TS_set_scroll_region = tgetstr ("cs", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3696 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
3697 RowPosition (tty) = tgetstr ("cv", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3698 tty->TS_del_char = tgetstr ("dc", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3699 tty->TS_del_multi_chars = tgetstr ("DC", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3700 tty->TS_del_line = tgetstr ("dl", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3701 tty->TS_del_multi_lines = tgetstr ("DL", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3702 tty->TS_delete_mode = tgetstr ("dm", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3703 tty->TS_end_delete_mode = tgetstr ("ed", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3704 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
3705 Home (tty) = tgetstr ("ho", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3706 tty->TS_ins_char = tgetstr ("ic", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3707 tty->TS_ins_multi_chars = tgetstr ("IC", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3708 tty->TS_insert_mode = tgetstr ("im", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3709 tty->TS_pad_inserted_char = tgetstr ("ip", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3710 tty->TS_end_keypad_mode = tgetstr ("ke", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3711 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
3712 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
3713 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
3714 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
3715 if (!Down (tty))
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3716 Down (tty) = tgetstr ("nl", address); /* Obsolete name for "do" */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3717 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
3718 Left (tty) = "\b"; /* can't possibly be longer! */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3719 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
3720 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
3721 if (!Left (tty))
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3722 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
3723 tty->TS_pad_char = tgetstr ("pc", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3724 tty->TS_repeat = tgetstr ("rp", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3725 tty->TS_end_standout_mode = tgetstr ("se", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3726 tty->TS_fwd_scroll = tgetstr ("sf", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3727 tty->TS_standout_mode = tgetstr ("so", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3728 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
3729 tty->Wcm->cm_tab = tgetstr ("ta", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3730 tty->TS_end_termcap_modes = tgetstr ("te", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3731 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
3732 Up (tty) = tgetstr ("up", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3733 tty->TS_visible_bell = tgetstr ("vb", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3734 tty->TS_cursor_normal = tgetstr ("ve", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3735 tty->TS_cursor_visible = tgetstr ("vs", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3736 tty->TS_cursor_invisible = tgetstr ("vi", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3737 tty->TS_set_window = tgetstr ("wi", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3738
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3739 tty->TS_enter_underline_mode = tgetstr ("us", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3740 tty->TS_exit_underline_mode = tgetstr ("ue", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3741 tty->TS_enter_bold_mode = tgetstr ("md", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3742 tty->TS_enter_dim_mode = tgetstr ("mh", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3743 tty->TS_enter_blink_mode = tgetstr ("mb", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3744 tty->TS_enter_reverse_mode = tgetstr ("mr", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3745 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
3746 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
3747 tty->TS_exit_attribute_mode = tgetstr ("me", address);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
3748
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3749 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
3750 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
3751 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
3752 MultiRight (tty) = tgetstr ("RI", address);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3753
26425
08c26156186a (term_init): If "op" isn't available, don't support color
Gerd Moellmann <gerd@gnu.org>
parents: 25727
diff changeset
3754 /* 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
3755 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
3756 background. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3757 tty->TS_orig_pair = tgetstr ("op", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3758 if (tty->TS_orig_pair)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3759 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3760 tty->TS_set_foreground = tgetstr ("AF", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3761 tty->TS_set_background = tgetstr ("AB", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3762 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
3763 {
08c26156186a (term_init): If "op" isn't available, don't support color
Gerd Moellmann <gerd@gnu.org>
parents: 25727
diff changeset
3764 /* SVr4. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3765 tty->TS_set_foreground = tgetstr ("Sf", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3766 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
3767 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
3768
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3769 tty->TN_max_colors = tgetnum ("Co");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3770 tty->TN_max_pairs = tgetnum ("pa");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3771
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3772 tty->TN_no_color_video = tgetnum ("NC");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3773 if (tty->TN_no_color_video == -1)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3774 tty->TN_no_color_video = 0;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3775 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3776
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3777 tty_default_color_capabilities (tty, 1);
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
3778
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3779 MagicWrap (tty) = tgetflag ("xn");
11530
a265aaa699e0 (term_init): MagicWrap implies AutoWrap.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
3780 /* 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
3781 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
3782 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
3783 terminal->memory_below_frame = tgetflag ("db");
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3784 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
3785 terminal->must_write_spaces = tgetflag ("in");
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3786 tty->meta_key = tgetflag ("km") || tgetflag ("MT");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3787 tty->TF_insmode_motion = tgetflag ("mi");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3788 tty->TF_standout_motion = tgetflag ("ms");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3789 tty->TF_underscore = tgetflag ("ul");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3790 tty->TF_teleray = tgetflag ("xt");
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3791
110588
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3792 #else /* DOS_NT */
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3793 #ifdef WINDOWSNT
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3794 {
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3795 struct frame *f = XFRAME (selected_frame);
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3796
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3797 initialize_w32_display (terminal);
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3798
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3799 FrameRows (tty) = FRAME_LINES (f);
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3800 FrameCols (tty) = FRAME_COLS (f);
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3801 tty->specified_window = FRAME_LINES (f);
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3802
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3803 FRAME_CAN_HAVE_SCROLL_BARS (f) = 0;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3804 FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3805 terminal->char_ins_del_ok = 1;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3806 baud_rate = 19200;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3807 }
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3808 #else /* MSDOS */
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3809 {
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3810 int height, width;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3811 if (strcmp (terminal_type, "internal") == 0)
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3812 terminal->type = output_msdos_raw;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3813 initialize_msdos_display (terminal);
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3814
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3815 get_tty_size (fileno (tty->input), &width, &height);
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3816 FrameCols (tty) = width;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3817 FrameRows (tty) = height;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3818 terminal->char_ins_del_ok = 0;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3819 init_baud_rate (fileno (tty->input));
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3820 }
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3821 #endif /* MSDOS */
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3822 tty->output = stdout;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3823 tty->input = stdin;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3824 /* The following two are inaccessible from w32console.c. */
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3825 terminal->delete_frame_hook = &tty_free_frame_resources;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3826 terminal->delete_terminal_hook = &delete_tty;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3827
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3828 tty->name = xstrdup (name);
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3829 terminal->name = xstrdup (name);
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3830 tty->type = xstrdup (terminal_type);
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3831
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3832 add_keyboard_wait_descriptor (0);
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3833
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3834 tty->delete_in_insert_mode = 1;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3835
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3836 UseTabs (tty) = 0;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3837 terminal->scroll_region_ok = 0;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3838
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3839 /* Seems to insert lines when it's not supposed to, messing up the
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3840 display. In doing a trace, it didn't seem to be called much, so I
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3841 don't think we're losing anything by turning it off. */
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3842 terminal->line_ins_del_ok = 0;
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3843
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3844 tty->TN_max_colors = 16; /* Required to be non-zero for tty-display-color-p */
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3845 #endif /* DOS_NT */
0995e4af573f Code simplification in term.c.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 110562
diff changeset
3846
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3847 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
3848 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
3849 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
3850 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
3851 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
3852 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
3853 /* 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
3854 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
3855 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
3856 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
3857 current_kboard = terminal->kboard;
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3858 #ifndef DOS_NT
83619
5da6a46ddbd6 * s/darwin.h (SYSTEM_PURESIZE_EXTRA): Define here.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83616
diff changeset
3859 term_get_fkeys (address, terminal->kboard);
97141
840bd675fd85 * s/ms-w32.h (MULTI_KBOARD): Remove.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 97043
diff changeset
3860
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
3861 /* 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
3862 {
4c74d7f1cfa6 (term_init): Avoid type-mismatch calling get_frame_size.
Richard M. Stallman <rms@gnu.org>
parents: 15974
diff changeset
3863 int height, width;
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
3864 get_tty_size (fileno (tty->input), &width, &height);
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3865 FrameCols (tty) = width;
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3866 FrameRows (tty) = height;
16093
4c74d7f1cfa6 (term_init): Avoid type-mismatch calling get_frame_size.
Richard M. Stallman <rms@gnu.org>
parents: 15974
diff changeset
3867 }
4c74d7f1cfa6 (term_init): Avoid type-mismatch calling get_frame_size.
Richard M. Stallman <rms@gnu.org>
parents: 15974
diff changeset
3868
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3869 if (FrameCols (tty) <= 0)
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3870 FrameCols (tty) = tgetnum ("co");
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3871 if (FrameRows (tty) <= 0)
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3872 FrameRows (tty) = tgetnum ("li");
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3873
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3874 if (FrameRows (tty) < 3 || FrameCols (tty) < 3)
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3875 maybe_fatal (must_succeed, terminal,
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3876 "Screen size %dx%d is too small",
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3877 "Screen size %dx%d is too small",
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3878 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
3879
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3880 TabWidth (tty) = tgetnum ("tw");
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3881
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3882 if (!tty->TS_bell)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3883 tty->TS_bell = "\07";
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3884
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3885 if (!tty->TS_fwd_scroll)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3886 tty->TS_fwd_scroll = Down (tty);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3887
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3888 PC = tty->TS_pad_char ? *tty->TS_pad_char : 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3889
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3890 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
3891 TabWidth (tty) = 8;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
3892
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3893 /* Turned off since /etc/termcap seems to have :ta= for most terminals
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3894 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
3895 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
3896 tty->Wcm->cm_tab = "\t";
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3897 */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3898
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3899 /* 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
3900 turn off any that do. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3901 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
3902 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3903 tty->TS_standout_mode = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3904 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
3905 }
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3906 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
3907 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3908 tty->TS_enter_underline_mode = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3909 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
3910 }
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3911
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3912 /* 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
3913 if (tty->TS_standout_mode == 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3914 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3915 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
3916 tty->TS_end_standout_mode = tty->TS_exit_underline_mode;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3917 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3918
5933
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3919 /* 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
3920 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
3921 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
3922 {
8612
86065bec6fc9 (term_init): Added missing argument to tgetstr.
Richard M. Stallman <rms@gnu.org>
parents: 8027
diff changeset
3923 char *s = tgetstr ("me", address);
5933
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3924 if (s != 0)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3925 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
3926 else
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3927 tty->TS_standout_mode = 0;
5933
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3928 }
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3929
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3930 if (tty->TF_teleray)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3931 {
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3932 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
3933 /* 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
3934 tty->TS_standout_mode = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3935 /* 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
3936 CR (tty) = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3937 /* LF can't be trusted either -- can alter hpos */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3938 /* 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
3939 Down (tty) = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3940 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3941
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3942 /* Special handling for certain terminal types known to need it */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3943
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3944 if (!strcmp (terminal_type, "supdup"))
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3945 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3946 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
3947 tty->Wcm->cm_losewrap = 1;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3948 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3949 if (!strncmp (terminal_type, "c10", 3)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3950 || !strcmp (terminal_type, "perq"))
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3951 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3952 /* Supply a makeshift :wi string.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3953 This string is not valid in general since it works only
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3954 for windows starting at the upper left corner;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3955 but that is all Emacs uses.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3956
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
3957 This string works only if the frame is using
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3958 the top of the video memory, because addressing is memory-relative.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3959 So first check the :ti string to see if that is true.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3960
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3961 It would be simpler if the :wi string could go in the termcap
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3962 entry, but it can't because it is not fully valid.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3963 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
3964 if (!tty->TS_set_window)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3965 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3966 p = tty->TS_termcap_modes;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3967 while (*p && strcmp (p, "\033v "))
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3968 p++;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3969 if (*p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3970 tty->TS_set_window = "\033v%C %C %C %C ";
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3971 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3972 /* 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
3973 terminal->must_write_spaces = 1;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3974 /* :ti string typically fails to have \E^G! in it */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3975 /* 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
3976 strcpy (area, tty->TS_termcap_modes);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3977 strcat (area, "\033\007!");
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3978 tty->TS_termcap_modes = area;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3979 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
3980 p = AbsPosition (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3981 /* Change all %+ parameters to %C, to handle
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3982 values above 96 correctly for the C100. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3983 while (*p)
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3984 {
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3985 if (p[0] == '%' && p[1] == '+')
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3986 p[1] = 'C';
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3987 p++;
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3988 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3989 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3990
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3991 tty->specified_window = FrameRows (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3992
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3993 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
3994 {
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3995 maybe_fatal (must_succeed, terminal,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3996 "Terminal type \"%s\" is not powerful enough to run Emacs",
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3997 "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
3998 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
3999 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
4000 use the Bourne shell command `TERM=... export TERM' (C-shell:\n\
107847
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
4001 `setenv TERM ...') to specify the correct type. It may be necessary\n"
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
4002 # ifdef TERMINFO
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
4003 "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
4004 # else /* TERMCAP */
107847
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
4005 "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
4006 # endif /* TERMINFO */
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
4007 terminal_type);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4008 }
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
4009
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
4010 if (FrameRows (tty) <= 0 || FrameCols (tty) <= 0)
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
4011 maybe_fatal (must_succeed, terminal,
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
4012 "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
4013 "Could not determine the frame size");
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4014
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4015 tty->delete_in_insert_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4016 = tty->TS_delete_mode && tty->TS_insert_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4017 && !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
4018
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4019 tty->se_is_so = (tty->TS_standout_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4020 && tty->TS_end_standout_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4021 && !strcmp (tty->TS_standout_mode, tty->TS_end_standout_mode));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4022
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
4023 UseTabs (tty) = tabs_safe_p (fileno (tty->input)) && TabWidth (tty) == 8;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4024
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4025 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
4026 = (tty->Wcm->cm_abs
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4027 && (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
4028
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4029 terminal->line_ins_del_ok
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4030 = (((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
4031 && (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
4032 || (terminal->scroll_region_ok
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4033 && tty->TS_fwd_scroll && tty->TS_rev_scroll));
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
4034
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4035 terminal->char_ins_del_ok
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4036 = ((tty->TS_ins_char || tty->TS_insert_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4037 || 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
4038 && (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
4039
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4040 terminal->fast_clear_end_of_line = tty->TS_clr_line != 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4041
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
4042 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
4043
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
4044 #endif /* not DOS_NT */
84849
ba20cee1aec0 (init_tty): Call init_sys_modes on WINDOWSNT also.
Jason Rumney <jasonr@gnu.org>
parents: 84779
diff changeset
4045
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
4046 /* Init system terminal modes (RAW or CBREAK, etc.). */
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
4047 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
4048
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4049 return terminal;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4050 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4051
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4052
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4053 static void
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4054 vfatal (const char *str, va_list ap)
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4055 {
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4056 fprintf (stderr, "emacs: ");
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4057 vfprintf (stderr, str, ap);
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4058 if (!(strlen (str) > 0 && str[strlen (str) - 1] == '\n'))
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4059 fprintf (stderr, "\n");
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4060 va_end (ap);
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4061 fflush (stderr);
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4062 exit (1);
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4063 }
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4064
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4065
83341
76e51706154e Rename term_init to init_tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83338
diff changeset
4066 /* Auxiliary error-handling function for init_tty.
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
4067 Delete TERMINAL, then call error or fatal with str1 or str2,
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
4068 respectively, according to MUST_SUCCEED. */
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
4069
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
4070 static void
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4071 maybe_fatal (int must_succeed, struct terminal *terminal,
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4072 const char *str1, const char *str2, ...)
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
4073 {
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4074 va_list ap;
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4075 va_start (ap, str2);
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4076 if (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4077 delete_tty (terminal);
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
4078
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
4079 if (must_succeed)
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4080 vfatal (str2, ap);
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
4081 else
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4082 verror (str1, ap);
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4083
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4084 va_end (ap);
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
4085 abort ();
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4086 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4087
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
4088 void
86288
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
4089 fatal (const char *str, ...)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4090 {
86288
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
4091 va_list ap;
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
4092 va_start (ap, str);
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
4093 vfatal (str, ap);
86288
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
4094 va_end (ap);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4095 }
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4096
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4097
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4098
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4099 /* 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
4100
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
4101 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
4102 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
4103 {
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
4104 struct tty_display_info *tty;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
4105
100666
dab9cf44bf3f In comments, write delete_frame instead of Fdelete_frame.
Martin Rudalics <rudalics@gmx.at>
parents: 100370
diff changeset
4106 /* Protect against recursive calls. delete_frame in
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
4107 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
4108 if (!terminal->name)
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
4109 return;
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
4110
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4111 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
4112 abort ();
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
4113
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4114 tty = terminal->display_info.tty;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
4115
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4116 if (tty == tty_list)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4117 tty_list = tty->next;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4118 else
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4119 {
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
4120 struct tty_display_info *p;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4121 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
4122 ;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4123
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4124 if (! p)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4125 /* This should not happen. */
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4126 abort ();
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4127
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
4128 p->next = tty->next;
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
4129 tty->next = 0;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4130 }
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4131
83342
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
4132 /* 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
4133 before delete_terminal. */
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
4134 reset_sys_modes (tty);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
4135
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
4136 delete_terminal (terminal);
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
4137
95481
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
4138 xfree (tty->name);
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
4139 xfree (tty->type);
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
4140
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4141 if (tty->input)
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4142 {
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4143 delete_keyboard_wait_descriptor (fileno (tty->input));
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4144 if (tty->input != stdin)
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4145 fclose (tty->input);
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4146 }
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4147 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
4148 fclose (tty->output);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4149 if (tty->termscript)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4150 fclose (tty->termscript);
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
4151
95481
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
4152 xfree (tty->old_tty);
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
4153 xfree (tty->Wcm);
103624
3e06f0e66062 Remove useless if-before-xfree tests.
Jim Meyering <jim@meyering.net>
parents: 103617
diff changeset
4154 xfree (tty->termcap_strings_buffer);
3e06f0e66062 Remove useless if-before-xfree tests.
Jim Meyering <jim@meyering.net>
parents: 103617
diff changeset
4155 xfree (tty->termcap_term_buffer);
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
4156
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109144
diff changeset
4157 memset (tty, 0, sizeof (struct tty_display_info));
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4158 xfree (tty);
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
4159 }
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
4160
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
4161
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
4162
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
4163 /* 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
4164 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
4165
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4166 void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
4167 mark_ttys (void)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4168 {
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
4169 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
4170
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4171 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
4172 mark_object (tty->top_frame);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4173 }
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4174
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
4175
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
4176
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
4177 void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
4178 syms_of_term (void)
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4179 {
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39914
diff changeset
4180 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
4181 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
4182 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
4183 #ifdef TERMINFO
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4184 system_uses_terminfo = 1;
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4185 #else
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4186 system_uses_terminfo = 0;
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4187 #endif
15974
61249a8fe735 (Vring_bell_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15094
diff changeset
4188
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4189 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
4190 doc: /* Functions to be run after suspending a tty.
103048
b5e8a934cfd1 * term.c (Vsuspend_tty_functions, Vresume_tty_functions): Doc fixes,
Chong Yidong <cyd@stupidchicken.com>
parents: 103047
diff changeset
4191 The functions are run with one argument, the terminal object to be suspended.
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
4192 See `suspend-tty'. */);
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4193 Vsuspend_tty_functions = Qnil;
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4194
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4195
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4196 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
4197 doc: /* Functions to be run after resuming a tty.
103048
b5e8a934cfd1 * term.c (Vsuspend_tty_functions, Vresume_tty_functions): Doc fixes,
Chong Yidong <cyd@stupidchicken.com>
parents: 103047
diff changeset
4198 The functions are run with one argument, the terminal object that was revived.
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
4199 See `resume-tty'. */);
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4200 Vresume_tty_functions = Qnil;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
4201
67935
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4202 DEFVAR_BOOL ("visible-cursor", &visible_cursor,
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4203 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
4204 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
4205 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
4206 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
4207 visible_cursor = 1;
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4208
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
4209 defsubr (&Stty_display_color_p);
42954
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
4210 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
4211 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
4212 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
4213 defsubr (&Scontrolling_tty_p);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
4214 defsubr (&Ssuspend_tty);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
4215 defsubr (&Sresume_tty);
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
4216 #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
4217 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
4218 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
4219
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
4220 staticpro (&mouse_face_window);
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
4221 #endif /* HAVE_GPM */
97021
fb376eec83a9 (syms_of_term): Initialize default_orig_pair, default_set_foreground,
Chong Yidong <cyd@stupidchicken.com>
parents: 96303
diff changeset
4222
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
4223 #ifndef DOS_NT
97021
fb376eec83a9 (syms_of_term): Initialize default_orig_pair, default_set_foreground,
Chong Yidong <cyd@stupidchicken.com>
parents: 96303
diff changeset
4224 default_orig_pair = NULL;
fb376eec83a9 (syms_of_term): Initialize default_orig_pair, default_set_foreground,
Chong Yidong <cyd@stupidchicken.com>
parents: 96303
diff changeset
4225 default_set_foreground = NULL;
fb376eec83a9 (syms_of_term): Initialize default_orig_pair, default_set_foreground,
Chong Yidong <cyd@stupidchicken.com>
parents: 96303
diff changeset
4226 default_set_background = NULL;
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
4227 #endif /* !DOS_NT */
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
4228
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
4229 encode_terminal_src = NULL;
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
4230 encode_terminal_dst = NULL;
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4231 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
4232
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4233
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4234
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52314
diff changeset
4235 /* arch-tag: 498e7449-6f2e-45e2-91dd-b7d4ca488193
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52314
diff changeset
4236 (do not change this comment) */