annotate src/term.c @ 110493:4dea687a331f

* lisp/url/url-cache.el (url-cache-expire-time): Doc fix.
author Glenn Morris <rgm@gnu.org>
date Wed, 22 Sep 2010 23:08:57 -0700
parents 41bf9b6f3b91
children ea50a897140e ee58b36ab139
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>
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
26 #include <string.h>
83498
f0987e2f27e2 Clean up tty device handling. Change name of controlling tty from nil to "/dev/tty".
Karoly Lorentey <lorentey@elte.hu>
parents: 83468
diff changeset
27 #include <errno.h>
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
28 #include <sys/file.h>
83644
0ece58f6e0aa Merge from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83635 81817
diff changeset
29
81817
e6ed0991129c Include unistd.h only if HAVE_UNISTD_H.
Richard M. Stallman <rms@gnu.org>
parents: 81811
diff changeset
30 #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
31 #include <unistd.h>
81817
e6ed0991129c Include unistd.h only if HAVE_UNISTD_H.
Richard M. Stallman <rms@gnu.org>
parents: 81811
diff changeset
32 #endif
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39914
diff changeset
33
109653
9cfca8c9fb07 Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents: 109634
diff changeset
34 #ifdef HAVE_SYS_IOCTL_H
9cfca8c9fb07 Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents: 109634
diff changeset
35 #include <sys/ioctl.h>
83095
b448166f5664 Fix #include errors for FreeBSD (Frank Ruell)
Karoly Lorentey <lorentey@elte.hu>
parents: 83086
diff changeset
36 #endif
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
37
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
38 #include <signal.h>
86288
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
39 #include <stdarg.h>
105669
68dd71358159 * alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105661
diff changeset
40 #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
41
53229
33c3c7c16e13 lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
Karoly Lorentey <lorentey@elte.hu>
parents: 53227
diff changeset
42 #include "lisp.h"
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 #include "termchar.h"
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 #include "termopts.h"
88391
1953d0d56cd7 Include "buffer.h" and "character.h".
Kenichi Handa <handa@m17n.org>
parents: 43073
diff changeset
45 #include "buffer.h"
1953d0d56cd7 Include "buffer.h" and "character.h".
Kenichi Handa <handa@m17n.org>
parents: 43073
diff changeset
46 #include "character.h"
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
47 #include "charset.h"
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
48 #include "coding.h"
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
49 #include "composite.h"
31102
6a0caa788013 Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents: 30848
diff changeset
50 #include "keyboard.h"
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
51 #include "frame.h"
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 #include "disptab.h"
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 #include "termhooks.h"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
54 #include "dispextern.h"
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
55 #include "window.h"
39697
0b986bb45526 Include keymap.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
56 #include "keymap.h"
76627
c53e7d075f1a Include blockinput.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 75348
diff changeset
57 #include "blockinput.h"
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
58 #include "syssignal.h"
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
59 #include "systty.h"
81308
16181a4d64bf Include intervals.h to declare Fget_text_property.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81127
diff changeset
60 #include "intervals.h"
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
61 #ifdef MSDOS
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
62 #include "msdos.h"
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
63 static int been_here = -1;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
64 #endif
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
65
33672
a94852aef620 Don't try to include termcap.h; see comment there.
Gerd Moellmann <gerd@gnu.org>
parents: 33006
diff changeset
66 /* 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
67 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
68 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
69 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
70 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
71 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
72 extern int tgetnum (char *id);
25727
46fe79182b54 (OUTPUT_IF, OUTPUT1_IF): Use do-while.
Gerd Moellmann <gerd@gnu.org>
parents: 25675
diff changeset
73
21827
87c7f4bd99da Include cm.h after dispextern.h to avoid name conflicts
Geoff Voelker <voelker@cs.washington.edu>
parents: 21624
diff changeset
74 #include "cm.h"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
75 #ifdef HAVE_X_WINDOWS
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
76 #include "xterm.h"
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
77 #endif
8898
07bca49c7f84 Declare Fmake_sparse_keymap.
Karl Heuer <kwzh@gnu.org>
parents: 8806
diff changeset
78
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
79 #ifndef O_RDWR
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
80 #define O_RDWR 2
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
81 #endif
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
82
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
83 #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
84 #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
85 #endif
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
86
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
87 /* 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
88 #ifdef WINDOWSNT
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
89 #define DEV_TTY "CONOUT$"
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
90 #else
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
91 #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
92 #endif
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
93
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
94 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
95 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
96 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
97 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
98 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
99 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
100 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
101 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
102 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
103 static void delete_tty (struct terminal *);
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
104 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
105 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
106 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
107
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
108
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
109 #define OUTPUT(tty, a) \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
110 emacs_tputs ((tty), a, \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
111 (int) (FRAME_LINES (XFRAME (selected_frame)) \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
112 - curY (tty)), \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
113 cmputc)
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
114
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
115 #define OUTPUT1(tty, a) emacs_tputs ((tty), a, 1, cmputc)
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
116 #define OUTPUTL(tty, a, lines) emacs_tputs ((tty), a, lines, cmputc)
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
117
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
118 #define OUTPUT_IF(tty, a) \
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
119 do { \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
120 if (a) \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
121 emacs_tputs ((tty), a, \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
122 (int) (FRAME_LINES (XFRAME (selected_frame)) \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
123 - curY (tty) ), \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
124 cmputc); \
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
125 } while (0)
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
126
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
127 #define OUTPUT1_IF(tty, a) do { if (a) emacs_tputs ((tty), a, 1, cmputc); } while (0)
15974
61249a8fe735 (Vring_bell_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15094
diff changeset
128
67935
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
129 /* If true, use "vs", otherwise use "ve" to make the cursor visible. */
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
130
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
131 static int visible_cursor;
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
132
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
133 /* Display space properties */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
134
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
135 /* 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
136 Lisp_Object Vsuspend_tty_functions;
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
137
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
138 /* 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
139 Lisp_Object Vresume_tty_functions;
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
140
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
141 /* 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
142 struct tty_display_info *tty_list;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
144 /* 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
145 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
146 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
147 else. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 int no_redraw_on_reenter;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
150 /* 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
151 corresponding attribute cannot be combined with colors. */
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
152
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
153 enum no_color_bit
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
154 {
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
155 NC_STANDOUT = 1 << 0,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
156 NC_UNDERLINE = 1 << 1,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
157 NC_REVERSE = 1 << 2,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
158 NC_BLINK = 1 << 3,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
159 NC_DIM = 1 << 4,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
160 NC_BOLD = 1 << 5,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
161 NC_INVIS = 1 << 6,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
162 NC_PROTECT = 1 << 7,
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
163 NC_ALT_CHARSET = 1 << 8
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
164 };
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
165
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 /* internal state */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167
10771
d564078d10c6 (calculate_costs): Update max_frame_height, max_frame_width.
Richard M. Stallman <rms@gnu.org>
parents: 10481
diff changeset
168 /* The largest frame width in any call to calculate_costs. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
169
51212
332134065648 Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50227
diff changeset
170 int max_frame_cols;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
171
10771
d564078d10c6 (calculate_costs): Update max_frame_height, max_frame_width.
Richard M. Stallman <rms@gnu.org>
parents: 10481
diff changeset
172 /* The largest frame height in any call to calculate_costs. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
173
51212
332134065648 Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50227
diff changeset
174 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
175
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
176 /* 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
177 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
178 static int no_controlling_tty;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
180 /* Provided for lisp packages. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
181
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
182 static int system_uses_terminfo;
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
183
109516
68ca98ae70fb Make building under stricter warning flags somewhat cleaner.
Juanma Barranquero <lekktu@gmail.com>
parents: 109376
diff changeset
184 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
185
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
186 extern char *tgetstr (char *, char **);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
188
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
189 #ifdef HAVE_GPM
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
190 #include <sys/fcntl.h>
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
191
109108
5842e8fabe06 Convert some prototypes to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
192 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
193 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
194
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
195 /* 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
196 struct tty_display_info *gpm_tty = NULL;
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
197
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
198 /* 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
199 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
200 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
201 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
202 MOUSE_FACE_WINDOW. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
203 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
204 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
205 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
206 static Lisp_Object mouse_face_window;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
207 static int mouse_face_face_id;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
208
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
209 static int pos_x, pos_y;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
210 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
211 #endif /* HAVE_GPM */
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
212
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
213 /* 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
214
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
215 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
216 tty_ring_bell (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
218 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
219
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
220 if (tty->output)
15974
61249a8fe735 (Vring_bell_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15094
diff changeset
221 {
83167
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
222 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
223 ? 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
224 : 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
225 fflush (tty->output);
15974
61249a8fe735 (Vring_bell_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15094
diff changeset
226 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
229 /* Set up termcap modes for Emacs. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
231 void
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
232 tty_set_terminal_modes (struct terminal *terminal)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
234 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
235
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
236 if (tty->output)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 {
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
238 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
239 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
240 else
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
241 {
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
242 /* 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
243 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
244 int i;
83382
7a3090aca393 Fix hardcoded stdout usage in term.c. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83370
diff changeset
245 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
246 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
247 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
248 }
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
249
83450
c69d44922688 Merged from miles@gnu.org--gnu-2005 (patch 682)
Karoly Lorentey <lorentey@elte.hu>
parents: 83431 67935
diff changeset
250 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
251 OUTPUT_IF (tty, tty->TS_keypad_mode);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
252 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
253 fflush (tty->output);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
257 /* Reset termcap modes before exiting Emacs. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
259 void
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
260 tty_reset_terminal_modes (struct terminal *terminal)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
262 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
263
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
264 if (tty->output)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
266 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
267 tty_turn_off_insert (tty);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
268 OUTPUT_IF (tty, tty->TS_end_keypad_mode);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
269 OUTPUT_IF (tty, tty->TS_cursor_normal);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
270 OUTPUT_IF (tty, tty->TS_end_termcap_modes);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
271 OUTPUT_IF (tty, tty->TS_orig_pair);
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
272 /* 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
273 current_tty = tty;
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
274 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
275 fflush (tty->output);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
279 /* 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
280
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
281 static void
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
282 tty_update_end (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
284 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
285
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
286 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
287 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
288 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
289 tty_background_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
292 /* 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
293
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
294 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
295 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
296 {
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
297 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
298
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
299 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
300 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
301 tty_set_scroll_region (f, 0, tty->specified_window);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
304 static void
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
305 tty_set_scroll_region (struct frame *f, int start, int stop)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 char *buf;
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
308 struct tty_display_info *tty = FRAME_TTY (f);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
309
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
310 if (tty->TS_set_scroll_region)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
311 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
312 else if (tty->TS_set_scroll_region_1)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
313 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
314 FRAME_LINES (f), start,
1595c5e1e9bb Updating_frame vs. selected_frame in term.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 53226
diff changeset
315 FRAME_LINES (f) - stop,
1595c5e1e9bb Updating_frame vs. selected_frame in term.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 53226
diff changeset
316 FRAME_LINES (f));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 else
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
318 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
319
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
320 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
321 xfree (buf);
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
322 losecursor (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 }
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
324
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
326 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
327 tty_turn_on_insert (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
329 if (!tty->insert_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
330 OUTPUT (tty, tty->TS_insert_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
331 tty->insert_mode = 1;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
334 void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
335 tty_turn_off_insert (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
337 if (tty->insert_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
338 OUTPUT (tty, tty->TS_end_insert_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
339 tty->insert_mode = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
342 /* Handle highlighting. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
344 void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
345 tty_turn_off_highlight (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
347 if (tty->standout_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
348 OUTPUT_IF (tty, tty->TS_end_standout_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
349 tty->standout_mode = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
352 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
353 tty_turn_on_highlight (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
355 if (!tty->standout_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
356 OUTPUT_IF (tty, tty->TS_standout_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
357 tty->standout_mode = 1;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
360 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
361 tty_toggle_highlight (struct tty_display_info *tty)
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
362 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
363 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
364 tty_turn_off_highlight (tty);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
365 else
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
366 tty_turn_on_highlight (tty);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
367 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
368
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
369
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
370 /* Make cursor invisible. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
371
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
372 static void
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
373 tty_hide_cursor (struct tty_display_info *tty)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
374 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
375 if (tty->cursor_hidden == 0)
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
376 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
377 tty->cursor_hidden = 1;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
378 OUTPUT_IF (tty, tty->TS_cursor_invisible);
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
379 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
380 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
381
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
382
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
383 /* Ensure that cursor is visible. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
384
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
385 static void
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
386 tty_show_cursor (struct tty_display_info *tty)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
387 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
388 if (tty->cursor_hidden)
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
389 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
390 tty->cursor_hidden = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
391 OUTPUT_IF (tty, tty->TS_cursor_normal);
67935
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
392 if (visible_cursor)
83450
c69d44922688 Merged from miles@gnu.org--gnu-2005 (patch 682)
Karoly Lorentey <lorentey@elte.hu>
parents: 83431 67935
diff changeset
393 OUTPUT_IF (tty, tty->TS_cursor_visible);
37959
b53edc686faf (tty_cursor_hidden): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 37499
diff changeset
394 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
395 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
396
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
397
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 /* Set standout mode to the state it should be in for
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 empty space inside windows. What this is,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 depends on the user option inverse-video. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
402 static void
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
403 tty_background_highlight (struct tty_display_info *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 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
406 tty_turn_on_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 else
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
408 tty_turn_off_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 /* Set standout mode to the mode specified for the text to be output. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
413 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
414 tty_highlight_if_desired (struct tty_display_info *tty)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 {
40081
07d7dbf18784 (reassert_line_highlight_hook, change_line_highlight_hook): Variables removed.
Miles Bader <miles@gnu.org>
parents: 39988
diff changeset
416 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
417 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
418 else
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
419 tty_turn_off_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
423 /* Move cursor to row/column position VPOS/HPOS. HPOS/VPOS are
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
424 frame-relative coordinates. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
426 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
427 tty_cursor_to (struct frame *f, int vpos, int hpos)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
429 struct tty_display_info *tty = FRAME_TTY (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430
12071
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
431 /* 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
432 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
433 if (! tty->costs_set)
12071
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
434 return;
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
435
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
436 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
437 && curX (tty) == hpos)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 return;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
439 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
440 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
441 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
442 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
443 cmgoto (tty, vpos, hpos);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 /* Similar but don't take any account of the wasted characters. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
448 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
449 tty_raw_cursor_to (struct frame *f, int row, int col)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
451 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
452
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
453 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
454 && curX (tty) == col)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 return;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
456 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
457 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
458 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
459 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
460 cmgoto (tty, row, col);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 /* Erase operations */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
465 /* 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
466
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
467 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
468 tty_clear_to_end (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 register int i;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
471 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
472
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
473 if (tty->TS_clr_to_bottom)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
475 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
476 OUTPUT (tty, tty->TS_clr_to_bottom);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 {
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
480 for (i = curY (tty); i < FRAME_LINES (f); i++)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 {
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
482 cursor_to (f, i, 0);
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
483 clear_end_of_line (f, FRAME_COLS (f));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
488 /* Clear an entire termcap frame. */
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
489
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
490 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
491 tty_clear_frame (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
493 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
494
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
495 if (tty->TS_clr_frame)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
497 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
498 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
499 cmat (tty, 0, 0);
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 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 {
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
503 cursor_to (f, 0, 0);
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
504 clear_to_end (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
508 /* An implementation of clear_end_of_line for termcap frames.
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 Note that the cursor may be moved, on terminals lacking a `ce' string. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
512 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
513 tty_clear_end_of_line (struct frame *f, int first_unused_hpos)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 register int i;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
516 struct tty_display_info *tty = FRAME_TTY (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517
12071
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
518 /* 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
519 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
520 if (! tty->costs_set)
12071
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
521 return;
f85f23c50344 (cursor_to, clear_to_end_of_line_raw):
Karl Heuer <kwzh@gnu.org>
parents: 11530
diff changeset
522
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
523 if (curX (tty) >= first_unused_hpos)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 return;
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
525 tty_background_highlight (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
526 if (tty->TS_clr_line)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
528 OUTPUT1 (tty, tty->TS_clr_line);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 { /* 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
532 tty_turn_off_insert (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
534 /* 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
535 if (AutoWrap (tty)
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
536 && curY (tty) == FrameRows (tty) - 1
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
537 && first_unused_hpos == FrameCols (tty))
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 first_unused_hpos--;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
540 for (i = curX (tty); i < first_unused_hpos; i++)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 {
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
542 if (tty->termscript)
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
543 fputc (' ', tty->termscript);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
544 fputc (' ', tty->output);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 }
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
546 cmplus (tty, first_unused_hpos - curX (tty));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
550 /* 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
551 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
552 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
553 /* 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
554 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
555 static int encode_terminal_dst_size;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
556
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
557 /* 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
558 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
559 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
560
58701
24c51e9d8586 (encode_terminal_code): Don't make it "static".
Kenichi Handa <handa@m17n.org>
parents: 58638
diff changeset
561 unsigned char *
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
562 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
563 {
66238
d3f5aa0f18c4 (encode_terminal_code): Remove unused var src_start.
Kim F. Storm <storm@cua.dk>
parents: 65795
diff changeset
564 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
565 unsigned char *buf;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
566 int nchars, nbytes, required;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
567 register int tlen = GLYPH_TABLE_LENGTH;
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
568 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
569 Lisp_Object charset_list;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
570
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
571 /* 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
572 multibyte-form. But, it may be enlarged on demand if
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
573 Vglyph_table contains a string or a composite glyph is
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
574 encountered. */
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
575 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
576 if (encode_terminal_src_size < required)
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
577 {
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
578 if (encode_terminal_src)
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
579 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
580 else
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
581 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
582 encode_terminal_src_size = required;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
583 }
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
584
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
585 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
586
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
587 buf = encode_terminal_src;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
588 nchars = 0;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
589 while (src < src_end)
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
590 {
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
591 if (src->type == COMPOSITE_GLYPH)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
592 {
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
593 struct composition *cmp;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
594 Lisp_Object gstring;
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
595 int i;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
596
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
597 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
598 if (src->u.cmp.automatic)
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 gstring = composition_gstring_from_id (src->u.cmp.id);
101964
05ec76bd8aa4 (encode_terminal_code): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 101774
diff changeset
601 required = src->u.cmp.to + 1 - src->u.cmp.from;
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
602 }
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
603 else
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
604 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
605 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
606 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
607 }
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
608
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
609 if (encode_terminal_src_size < nbytes + required)
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 encode_terminal_src_size = nbytes + required;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
612 encode_terminal_src = xrealloc (encode_terminal_src,
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
613 encode_terminal_src_size);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
614 buf = encode_terminal_src + nbytes;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
615 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
616
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
617 if (src->u.cmp.automatic)
101964
05ec76bd8aa4 (encode_terminal_code): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 101774
diff changeset
618 for (i = src->u.cmp.from; i <= src->u.cmp.to; i++)
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
619 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
620 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
621 int c = LGLYPH_CHAR (g);
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 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
624 c = '?';
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
625 buf += CHAR_STRING (c, buf);
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
626 nchars++;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
627 }
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
628 else
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
629 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
630 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
631 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
632
101774
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
633 if (c == '\t')
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
634 continue;
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
635 if (char_charset (c, charset_list, NULL))
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
636 {
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
637 if (CHAR_WIDTH (c) == 0
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
638 && 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
639 /* Should be left-padded */
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
640 {
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
641 buf += CHAR_STRING (' ', buf);
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
642 nchars++;
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
643 }
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
644 }
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
645 else
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
646 c = '?';
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
647 buf += CHAR_STRING (c, buf);
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
648 nchars++;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
649 }
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
650 }
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
651 /* 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
652 else if (! CHAR_GLYPH_PADDING_P (*src))
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
653 {
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
654 GLYPH g;
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
655 int c;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
656 Lisp_Object string;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
657
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
658 string = Qnil;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
659 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
660
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
661 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
662 {
98367
758774f72111 (encode_terminal_code): Fix a typo in a comment.
Eli Zaretskii <eliz@gnu.org>
parents: 98155
diff changeset
663 /* 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
664 c = src->u.ch;
26871
aaf45e665b14 (encode_terminal_code): Delete codes for a composite
Kenichi Handa <handa@m17n.org>
parents: 26425
diff changeset
665 }
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
666 else
19035
0b4c1d43cb95 Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 18058
diff changeset
667 {
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
668 /* 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
669 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
670 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
671
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
672 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
673 /* 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
674 (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
675 c = GLYPH_CHAR (g);
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
676 else
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
677 /* 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
678 string = tbase[GLYPH_CHAR (g)];
19035
0b4c1d43cb95 Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 18058
diff changeset
679 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
680
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
681 if (NILP (string))
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
682 {
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
683 nbytes = buf - encode_terminal_src;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
684 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
685 {
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
686 encode_terminal_src_size = nbytes + MAX_MULTIBYTE_LENGTH;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
687 encode_terminal_src = xrealloc (encode_terminal_src,
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
688 encode_terminal_src_size);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
689 buf = encode_terminal_src + nbytes;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
690 }
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
691 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
692 || 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
693 {
89566
86c0ff434620 (encode_terminal_code): Don't handle glyph-table. Check
Kenichi Handa <handa@m17n.org>
parents: 89563
diff changeset
694 /* 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
695 buf += CHAR_STRING (c, buf);
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
696 nchars++;
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
697 }
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
698 else
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
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 /* C is not encodable. */
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
701 *buf++ = '?';
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
702 nchars++;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
703 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
704 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
705 *buf++ = '?';
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
706 nchars++;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
707 src++;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
708 }
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
709 }
19035
0b4c1d43cb95 Minor cleanup.
Richard M. Stallman <rms@gnu.org>
parents: 18058
diff changeset
710 }
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
711 else
23338
0a2b76b09162 (encode_terminal_code): Handle raw 8-bit codes correctly.
Kenichi Handa <handa@m17n.org>
parents: 23066
diff changeset
712 {
109559
4325622babca Remove declarations and unused variables.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109516
diff changeset
713 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
714
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
715 if (! STRING_MULTIBYTE (string))
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
716 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
717 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
718 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
719 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
720 encode_terminal_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
721 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
722 encode_terminal_src_size);
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
723 buf = encode_terminal_src + nbytes;
89563
d193de460ec1 (terminal_encode_buffer, terminal_encode_buf_size): New
Kenichi Handa <handa@m17n.org>
parents: 89483
diff changeset
724 }
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109144
diff changeset
725 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
726 buf += SBYTES (string);
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
727 nchars += SCHARS (string);
23338
0a2b76b09162 (encode_terminal_code): Handle raw 8-bit codes correctly.
Kenichi Handa <handa@m17n.org>
parents: 23066
diff changeset
728 }
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
729 }
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
730 src++;
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
731 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
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 if (nchars == 0)
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
734 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
735 coding->produced = 0;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
736 return NULL;
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
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
739 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
740 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
741 if (encode_terminal_dst_size == 0)
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
742 {
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
743 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
744 if (encode_terminal_dst)
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
745 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
746 encode_terminal_dst_size);
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
747 else
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
748 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
749 }
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
750 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
751 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
752 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
753 /* 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
754 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
755 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
756
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
757 return (encode_terminal_dst);
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
758 }
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
759
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
760
91041
bdb3fe0ba9fa Merge from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 91010 85106
diff changeset
761
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
762 /* 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
763
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
764 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
765 tty_write_glyphs (struct frame *f, struct glyph *string, int len)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
766 {
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
767 unsigned char *conversion_buffer;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
768 struct coding_system *coding;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
770 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
771
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
772 tty_turn_off_insert (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
773 tty_hide_cursor (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
775 /* 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
776 since that would scroll the whole frame on some terminals. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
778 if (AutoWrap (tty)
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
779 && 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
780 && (curX (tty) + len) == FRAME_COLS (f))
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 len --;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
782 if (len <= 0)
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
783 return;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
785 cmplus (tty, len);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
786
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
787 /* 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
788 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
789 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
790 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
791 ? 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
792 /* 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
793 the tail. */
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
794 coding->mode &= ~CODING_MODE_LAST_BLOCK;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
795
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
796 while (len > 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797 {
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
798 /* 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
799 int face_id = string->face_id;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
800 int n;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
801
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
802 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
803 if (string[n].face_id != face_id)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
804 break;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
805
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
806 /* 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
807 tty_highlight_if_desired (tty);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
808 turn_on_face (f, face_id);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
809
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
810 if (n == len)
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
811 /* This is the last run. */
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
812 coding->mode |= CODING_MODE_LAST_BLOCK;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
813 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
814 if (coding->produced > 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815 {
76627
c53e7d075f1a Include blockinput.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 75348
diff changeset
816 BLOCK_INPUT;
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
817 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
818 if (ferror (tty->output))
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
819 clearerr (tty->output);
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
820 if (tty->termscript)
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
821 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
822 UNBLOCK_INPUT;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 }
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
824 len -= n;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
825 string += n;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
826
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
827 /* Turn appearance modes off. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
828 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
829 tty_turn_off_highlight (tty);
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
830 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
831
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
832 cmcheckmagic (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834
84981
a35153116cd0 (term_clear_mouse_face, term_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84969
diff changeset
835 #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
836
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
837 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
838 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
839 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
840 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
841 unsigned char *conversion_buffer;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
842 struct coding_system *coding;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
843
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
844 struct tty_display_info *tty = FRAME_TTY (f);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
845
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
846 tty_turn_off_insert (tty);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
847 tty_hide_cursor (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
848
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
849 /* 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
850 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
851
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
852 if (AutoWrap (tty)
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
853 && curY (tty) + 1 == FRAME_LINES (f)
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
854 && (curX (tty) + len) == FRAME_COLS (f))
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
855 len --;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
856 if (len <= 0)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
857 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
858
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
859 cmplus (tty, len);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
860
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
861 /* 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
862 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
863 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
864 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
865 ? 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
866 /* 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
867 the tail. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
868 coding->mode &= ~CODING_MODE_LAST_BLOCK;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
869
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
870 /* Turn appearance modes of the face. */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
871 tty_highlight_if_desired (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
872 turn_on_face (f, face_id);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
873
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
874 coding->mode |= CODING_MODE_LAST_BLOCK;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
875 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
876 if (coding->produced > 0)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
877 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
878 BLOCK_INPUT;
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
879 fwrite (conversion_buffer, 1, coding->produced, tty->output);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
880 if (ferror (tty->output))
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
881 clearerr (tty->output);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
882 if (tty->termscript)
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
883 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
884 UNBLOCK_INPUT;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
885 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
886
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
887 /* Turn appearance modes off. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
888 turn_off_face (f, face_id);
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
889 tty_turn_off_highlight (tty);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
890
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
891 cmcheckmagic (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
892 }
84981
a35153116cd0 (term_clear_mouse_face, term_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84969
diff changeset
893 #endif
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
894
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
895 /* 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
896
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
897 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
898 tty_insert_glyphs (struct frame *f, struct glyph *start, int len)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
899 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
900 char *buf;
31829
43566b0aec59 Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents: 31102
diff changeset
901 struct glyph *glyph = NULL;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
902 unsigned char *conversion_buffer;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
903 unsigned char space[1];
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
904 struct coding_system *coding;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
905
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
906 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
907
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
908 if (tty->TS_ins_multi_chars)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
910 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
911 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
912 xfree (buf);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
913 if (start)
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
914 write_glyphs (f, start, len);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
915 return;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
916 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
917
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
918 tty_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
919 cmplus (tty, len);
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
920
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
921 if (! start)
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
922 space[0] = SPACEGLYPH;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
923
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
924 /* 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
925 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
926 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
927 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
928 ? 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
929 /* 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
930 the tail. */
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
931 coding->mode &= ~CODING_MODE_LAST_BLOCK;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
932
17191
36caec9c2e52 (insert_glyphs): Fix a bug which turns up when
Kenichi Handa <handa@m17n.org>
parents: 17180
diff changeset
933 while (len-- > 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
935 OUTPUT1_IF (tty, tty->TS_ins_char);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 if (!start)
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
937 {
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
938 conversion_buffer = space;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
939 coding->produced = 1;
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
940 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
941 else
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
942 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
943 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
944 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
945 glyph = start;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
946 ++start;
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
947 /* 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
948 occupies more than one column. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
949 while (len && CHAR_GLYPH_PADDING_P (*start))
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
950 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
951 OUTPUT1_IF (tty, tty->TS_ins_char);
17046
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
952 start++, len--;
84b0e9794a87 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16894
diff changeset
953 }
26999
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
954
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
955 if (len <= 0)
5d0057e6170e (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 26902
diff changeset
956 /* This is the last glyph. */
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
957 coding->mode |= CODING_MODE_LAST_BLOCK;
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
958
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
959 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
960 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
962 if (coding->produced > 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
963 {
76627
c53e7d075f1a Include blockinput.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 75348
diff changeset
964 BLOCK_INPUT;
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
965 fwrite (conversion_buffer, 1, coding->produced, tty->output);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
966 if (ferror (tty->output))
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
967 clearerr (tty->output);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
968 if (tty->termscript)
83231
549734260e34 Merged in changes from CVS trunk.
Karoly Lorentey <lorentey@elte.hu>
parents: 83173 58701
diff changeset
969 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
970 UNBLOCK_INPUT;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
971 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
973 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
974 if (start)
30848
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
975 {
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
976 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
977 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
978 }
10439
1fcbeb4410f6 (write_glyphs, insert_glyphs): Call checkmagic.
Karl Heuer <kwzh@gnu.org>
parents: 10332
diff changeset
979 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
980
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
981 cmcheckmagic (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
984 /* 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
985
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
986 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
987 tty_delete_glyphs (struct frame *f, int n)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989 char *buf;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 register int i;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
992 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
993
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
994 if (tty->delete_in_insert_mode)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
996 tty_turn_on_insert (tty);
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 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1000 tty_turn_off_insert (tty);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1001 OUTPUT_IF (tty, tty->TS_delete_mode);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1004 if (tty->TS_del_multi_chars)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1006 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
1007 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
1008 xfree (buf);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 for (i = 0; i < n; i++)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1012 OUTPUT1 (tty, tty->TS_del_char);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1013 if (!tty->delete_in_insert_mode)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1014 OUTPUT_IF (tty, tty->TS_end_delete_mode);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016
83025
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
1017 /* 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
1018
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1019 static void
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
1020 tty_ins_del_lines (struct frame *f, int vpos, int n)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 {
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1022 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
1023 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
1024 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
1025 char *scroll = n > 0 ? tty->TS_rev_scroll : tty->TS_fwd_scroll;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 register int i = n > 0 ? n : -n;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 register char *buf;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 /* If the lines below the insertion are being pushed
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 into the end of the window, this is the same as clearing;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 and we know the lines are already clear, since the matching
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 deletion has already been done. So can ignore this. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 /* If the lines below the deletion are blank lines coming
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 out of the end of the window, don't bother,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 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
1037 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
1038 && vpos + i >= tty->specified_window)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 return;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1040 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
1041 && vpos + i >= FRAME_LINES (f))
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 return;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
1043
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 if (multi)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 {
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1046 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
1047 tty_background_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1048 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
1049 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
1050 xfree (buf);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 else if (single)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053 {
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1054 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
1055 tty_background_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1056 while (--i >= 0)
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1057 OUTPUT (tty, single);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1058 if (tty->TF_teleray)
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1059 curX (tty) = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062 {
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_set_scroll_region (f, vpos, tty->specified_window);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 if (n < 0)
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1065 raw_cursor_to (f, tty->specified_window - 1, 0);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066 else
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1067 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
1068 tty_background_highlight (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 while (--i >= 0)
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1070 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
1071 tty_set_scroll_region (f, 0, tty->specified_window);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 }
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
1073
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
1074 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
1075 && 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
1076 && n < 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 {
83100
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
1078 cursor_to (f, FRAME_LINES (f) + n, 0);
4970ad4995f5 Eliminated updating_frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 83095
diff changeset
1079 clear_to_end (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 /* Compute cost of sending "str", in characters,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084 not counting any line-dependent padding. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1086 int
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109664
diff changeset
1087 string_cost (const char *str)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 cost = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090 if (str)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 tputs (str, 0, evalcost);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 return cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 /* Compute cost of sending "str", in characters,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1096 counting any line-dependent padding at one line. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 static int
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109664
diff changeset
1099 string_cost_one_line (const char *str)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 cost = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 if (str)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 tputs (str, 1, evalcost);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104 return cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 /* Compute per line amount of line-dependent padding,
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 in tenths of characters. */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 int
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109664
diff changeset
1111 per_line_cost (const char *str)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 cost = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 if (str)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 tputs (str, 0, evalcost);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 cost = - cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 if (str)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118 tputs (str, 10, evalcost);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 return cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122 /* 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
1123 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
1124 The length of this vector is based on max_frame_cols. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 int *char_ins_del_vector;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127
51212
332134065648 Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents: 50227
diff changeset
1128 #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
1129
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 /* ARGSUSED */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 static void
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1132 calculate_ins_del_char_costs (struct frame *f)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 {
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
1134 struct tty_display_info *tty = FRAME_TTY (f);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135 int ins_startup_cost, del_startup_cost;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 int ins_cost_per_char, del_cost_per_char;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 register int i;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 register int *p;
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 if (tty->TS_ins_multi_chars)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142 ins_cost_per_char = 0;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1143 ins_startup_cost = string_cost_one_line (tty->TS_ins_multi_chars);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1144 }
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1145 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
1146 || (tty->TS_insert_mode && tty->TS_end_insert_mode))
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1147 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1148 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
1149 + string_cost (tty->TS_end_insert_mode))) / 100;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1150 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
1151 + string_cost_one_line (tty->TS_pad_inserted_char));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 ins_startup_cost = 9999;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 ins_cost_per_char = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1157 }
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 if (tty->TS_del_multi_chars)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1161 del_cost_per_char = 0;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1162 del_startup_cost = string_cost_one_line (tty->TS_del_multi_chars);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 }
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1164 else if (tty->TS_del_char)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1166 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
1167 + string_cost (tty->TS_end_delete_mode));
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1168 if (tty->delete_in_insert_mode)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 del_startup_cost /= 2;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1170 del_cost_per_char = string_cost_one_line (tty->TS_del_char);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172 else
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 del_startup_cost = 9999;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1175 del_cost_per_char = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1176 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1177
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1178 /* Delete costs are at negative offsets */
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];
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1180 for (i = FRAME_COLS (f); --i >= 0;)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181 *--p = (del_startup_cost += del_cost_per_char);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183 /* Doing nothing is free */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1184 p = &char_ins_del_cost (f)[0];
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 *p++ = 0;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187 /* Insert costs are at positive offsets */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1188 for (i = FRAME_COLS (f); --i >= 0;)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189 *p++ = (ins_startup_cost += ins_cost_per_char);
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
1192 void
83102
a330cf2446ad Fix segfault in term.c (reported by lukhas@free.fr).
Karoly Lorentey <lorentey@elte.hu>
parents: 83100
diff changeset
1193 calculate_costs (struct frame *frame)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 {
10121
3f9f77a9488d (calculate_costs): Set FRAME_COST_BAUD_RATE.
Richard M. Stallman <rms@gnu.org>
parents: 9797
diff changeset
1195 FRAME_COST_BAUD_RATE (frame) = baud_rate;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1196
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
1197 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
1198 {
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1199 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
1200 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
1201 ? 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
1202 : 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
1203
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1204 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
1205
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1206 tty->costs_set = 1;
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1207
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1208 /* 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
1209 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
1210 used afterwards.
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1211
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1212 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
1213 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
1214
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1215 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
1216 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
1217
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1218 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
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 *) 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
1221 (sizeof (int)
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1222 + 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
1223 else
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1224 char_ins_del_vector
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1225 = (int *) xmalloc (sizeof (int)
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1226 + 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
1227
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109144
diff changeset
1228 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
1229 (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
1230
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1231
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1232 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
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_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
1235 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
1236 f, f, 1);
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1237 else
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1238 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
1239 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
1240 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
1241 0, 0, 1);
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1242
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1243 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
1244
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1245 /* 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
1246 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
1247 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
1248 else
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1249 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
1250
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
1251 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
1252 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1253 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1254
1015
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1255 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
1256 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
1257 };
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1258
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
1259 /* 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
1260 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
1261 (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
1262 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
1263 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
1264 */
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
1265
109664
b6bdd59e60ff Use const for some arrays and functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109653
diff changeset
1266 static const struct fkey_table keys[] =
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1267 {
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1268 {"kh", "home"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1269 {"kl", "left"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1270 {"ku", "up"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1271 {"kr", "right"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1272 {"kd", "down"}, /* termcap */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1273 {"%8", "prior"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1274 {"%5", "next"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1275 {"@7", "end"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1276 {"@1", "begin"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1277 {"*6", "select"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1278 {"%9", "print"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1279 {"@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
1280 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1281 * "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
1282 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1283 {"&8", "undo"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1284 {"%0", "redo"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1285 {"%7", "menu"}, /* terminfo --- actually the `options' key */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1286 {"@0", "find"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1287 {"@2", "cancel"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1288 {"%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
1289 /*
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 * "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
1291 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1292 {"&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
1293 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1294 * "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
1295 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1296 {"kE", "clearline"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1297 {"kA", "insertline"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1298 {"kL", "deleteline"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1299 {"kI", "insertchar"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1300 {"kD", "deletechar"}, /* terminfo */
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1301 {"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
1302 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1303 * "kp_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
1304 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1305 {"@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
1306 /*
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1307 * "kp-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
1308 * "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
1309 * "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
1310 * --- 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
1311 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1312 {"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
1313 /*
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 * "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
1315 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1316 {"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
1317 /*
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 * "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
1319 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1320 {"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
1321 /*
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 * "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
1323 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1324 {"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
1325 /*
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 * "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
1327 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1328 {"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
1329 /*
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
1330 * "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
1331 */
42122
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1332 {"k1", "f1"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1333 {"k2", "f2"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1334 {"k3", "f3"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1335 {"k4", "f4"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1336 {"k5", "f5"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1337 {"k6", "f6"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1338 {"k7", "f7"},
706558f91b28 (keys): Add missing braces around initializer.
Pavel Janík <Pavel@Janik.cz>
parents: 40086
diff changeset
1339 {"k8", "f8"},
61591
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1340 {"k9", "f9"},
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1341
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1342 {"&0", "S-cancel"}, /*shifted cancel key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1343 {"&9", "S-begin"}, /*shifted begin key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1344 {"*0", "S-find"}, /*shifted find key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1345 {"*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
1346 {"*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
1347 {"*7", "S-end"}, /*shifted end key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1348 {"*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
1349 {"#1", "S-help"}, /*shifted help key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1350 {"#2", "S-home"}, /*shifted home key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1351 {"#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
1352 {"#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
1353 {"%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
1354 {"%c", "S-next"}, /*shifted next key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1355 {"%e", "S-prior"}, /*shifted previous key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1356 {"%f", "S-print"}, /*shifted print key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1357 {"%g", "S-redo"}, /*shifted redo key*/
b015e12637bc (struct keys): Add support for shifted keys.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 59382
diff changeset
1358 {"%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
1359 {"!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
1360 };
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1361
109516
68ca98ae70fb Make building under stricter warning flags somewhat cleaner.
Juanma Barranquero <lekktu@gmail.com>
parents: 109376
diff changeset
1362 #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
1363 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
1364 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
1365 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
1366
85106
fd282fb888de Add new `input-decode-map' keymap and use it for temrinal
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84981
diff changeset
1367 /* 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
1368 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
1369 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
1370
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
1371 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1372 term_get_fkeys (char **address, KBOARD *kboard)
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1373 {
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1374 /* 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
1375 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
1376 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
1377 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
1378 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
1379 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
1380 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
1381
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
1382 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
1383 term_get_fkeys_kboard = kboard;
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1384 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
1385 }
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1386
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1387 static Lisp_Object
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1388 term_get_fkeys_1 (void)
6248
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1389 {
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1390 int i;
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1391
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
1392 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
1393 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
1394
3359
ef29e2a4fc46 (term_get_fkeys): If not initialized, init Vfunction_key_map.
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
1395 /* 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
1396 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
1397 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
1398
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1399 for (i = 0; i < (sizeof (keys)/sizeof (keys[0])); i++)
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1400 {
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1401 char *sequence = tgetstr (keys[i].cap, address);
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1402 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
1403 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
1404 Fmake_vector (make_number (1),
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1405 intern (keys[i].name)));
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1406 }
1015
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 /* 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
1409 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
1410 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
1411 "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
1412 */
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1413 {
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1414 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
1415 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
1416 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
1417
58c373be762c * term.c (term_get_fkeys): Some systems define `static' to be the
Jim Blandy <jimb@redhat.com>
parents: 969
diff changeset
1418 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
1419 {
43073
c9baf4b00820 (term_get_fkeys_1): If `k0' and `k;' are both specified and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42959
diff changeset
1420 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
1421 /* 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
1422 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
1423 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
1424 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
1425 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
1426 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
1427 }
43073
c9baf4b00820 (term_get_fkeys_1): If `k0' and `k;' are both specified and
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 42959
diff changeset
1428 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
1429 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
1430 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
1431 }
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
1432
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 /* 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
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 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
1436
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1437 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
1438 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
1439 {
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1440 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
1441 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
1442 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
1443 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
1444 else
10481
24756aef26e3 (term_get_fkeys_1): Bug fix for function key above f19.
Richard M. Stallman <rms@gnu.org>
parents: 10439
diff changeset
1445 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
1446
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1447 {
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1448 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
1449 if (sequence)
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1450 {
4543
929e4c850e76 (term_get_fkeys_define_1, term_get_fkeys_define): New functions.
Richard M. Stallman <rms@gnu.org>
parents: 4499
diff changeset
1451 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
1452 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
1453 Fmake_vector (make_number (1),
0e4319197d29 (term_get_fkeys_data): Variable removed.
Roland McGrath <roland@gnu.org>
parents: 5933
diff changeset
1454 intern (fkey)));
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1455 }
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1456 }
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1457 }
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 }
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
1459
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
1460 /*
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
1461 * 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
1462 */
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
1463 {
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1464 #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
1465 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
1466 { \
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1467 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
1468 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
1469 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
1470 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
1471 intern (sym))); \
3489
5c2b4797aab2 (term_get_fkeys): Use correct names for F10 and up.
Richard M. Stallman <rms@gnu.org>
parents: 3359
diff changeset
1472 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1473
2137
8e4d2d1e7c66 Added lots more cookies to fkey_table[], and code to do even more.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1994
diff changeset
1474 /* 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
1475 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
1476 /* 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
1477 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
1478 /* 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
1479 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
1480 /* 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
1481 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
1482
f42e5fd15f6f (term_get_fkeys_1): Workaround for IBM's dialect of terminfo.
Karl Heuer <kwzh@gnu.org>
parents: 8898
diff changeset
1483 /* 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
1484 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
1485 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
1486 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
1487 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
1488 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
1489 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
1490 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
1491 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
1492 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
1493 CONDITIONAL_REASSIGN ("*6", "kU", "select");
2224
49bda4cf498c Supply second arg for tgetstr() calls.
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2179
diff changeset
1494 #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
1495 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1496
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1497 return Qnil;
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1498 }
109516
68ca98ae70fb Make building under stricter warning flags somewhat cleaner.
Juanma Barranquero <lekktu@gmail.com>
parents: 109376
diff changeset
1499 #endif /* not DOS_NT */
533
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1500
31e638e8fe93 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 425
diff changeset
1501
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1502 /***********************************************************************
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1503 Character Display Information
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1504 ***********************************************************************/
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
1505 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
1506 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
1507 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
1508 static void produce_composite_glyph (struct it *);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1509
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1510 /* 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
1511 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
1512 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
1513 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
1514 IT->pixel_width > 1. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1515
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1516 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1517 append_glyph (struct it *it)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1518 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1519 struct glyph *glyph, *end;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1520 int i;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1521
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1522 xassert (it->glyph_row);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1523 glyph = (it->glyph_row->glyphs[it->area]
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1524 + it->glyph_row->used[it->area]);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1525 end = it->glyph_row->glyphs[1 + it->area];
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1526
107598
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1527 /* 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
1528 than append it. */
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1529 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
1530 {
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1531 struct glyph *g;
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1532 int move_by = it->pixel_width;
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1533
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1534 /* Make room for the new glyphs. */
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1535 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
1536 move_by = end - glyph;
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1537 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
1538 g[move_by] = *g;
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1539 glyph = it->glyph_row->glyphs[it->area];
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1540 end = glyph + move_by;
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1541 }
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1542
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1543 /* 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
1544 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
1545 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
1546 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
1547 for (i = 0;
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1548 i < it->pixel_width && glyph < end;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1549 ++i)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1550 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1551 glyph->type = CHAR_GLYPH;
29462
3306af2e4f3d (append_glyph): Revert change of 2000-06-06.
Gerd Moellmann <gerd@gnu.org>
parents: 29448
diff changeset
1552 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
1553 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
1554 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
1555 glyph->padding_p = i > 0;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1556 glyph->charpos = CHARPOS (it->position);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1557 glyph->object = it->object;
107598
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1558 if (it->bidi_p)
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1559 {
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1560 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
1561 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
1562 abort ();
107598
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1563 glyph->bidi_type = it->bidi_it.type;
4bad2c6338cc Retrospective commit from 2009-10-17.
Eli Zaretskii <eliz@gnu.org>
parents: 106244
diff changeset
1564 }
107606
297c59e52ecf Retrospective commit from 2009-12-26.
Eli Zaretskii <eliz@gnu.org>
parents: 107598
diff changeset
1565 else
297c59e52ecf Retrospective commit from 2009-12-26.
Eli Zaretskii <eliz@gnu.org>
parents: 107598
diff changeset
1566 {
297c59e52ecf Retrospective commit from 2009-12-26.
Eli Zaretskii <eliz@gnu.org>
parents: 107598
diff changeset
1567 glyph->resolved_level = 0;
297c59e52ecf Retrospective commit from 2009-12-26.
Eli Zaretskii <eliz@gnu.org>
parents: 107598
diff changeset
1568 glyph->bidi_type = UNKNOWN_BT;
297c59e52ecf Retrospective commit from 2009-12-26.
Eli Zaretskii <eliz@gnu.org>
parents: 107598
diff changeset
1569 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1570
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1571 ++it->glyph_row->used[it->area];
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1572 ++glyph;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1573 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1574 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1575
44372
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1576 /* Produce glyphs for the display element described by IT. *IT
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1577 specifies what we want to produce a glyph for (character, image, ...),
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1578 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
1579 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
1580 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
1581 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
1582 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
1583 display_element_type enumeration.
44372
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 produce_glyphs also stores the result of glyph width, ascent
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1586 etc. computations in *IT.
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1587
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1588 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
1589 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
1590 in xdisp.c for text width and height computations.
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1591
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1592 Callers usually don't call produce_glyphs directly;
65c0edf0d53c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43073
diff changeset
1593 instead they use the macro PRODUCE_GLYPHS. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1594
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1595 void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1596 produce_glyphs (struct it *it)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1597 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1598 /* If a hook is installed, let it do the work. */
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1599
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1600 /* Nothing but characters are supported on terminal frames. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1601 xassert (it->what == IT_CHARACTER
26871
aaf45e665b14 (encode_terminal_code): Delete codes for a composite
Kenichi Handa <handa@m17n.org>
parents: 26425
diff changeset
1602 || it->what == IT_COMPOSITION
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1603 || it->what == IT_STRETCH);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1604
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1605 if (it->what == IT_STRETCH)
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 produce_stretch_glyph (it);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1608 goto done;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1609 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1610
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1611 if (it->what == IT_COMPOSITION)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1612 {
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1613 produce_composite_glyph (it);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1614 goto done;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1615 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1616
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1617 if (it->char_to_display >= 040 && it->char_to_display < 0177)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1618 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1619 it->pixel_width = it->nglyphs = 1;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1620 if (it->glyph_row)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1621 append_glyph (it);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1622 }
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1623 else if (it->char_to_display == '\n')
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1624 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
1625 else if (it->char_to_display == '\t')
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1626 {
28685
b4310b6f3b5e (produce_glyphs): Remove reference to struct it's prompt_width.
Gerd Moellmann <gerd@gnu.org>
parents: 28507
diff changeset
1627 int absolute_x = (it->current_x
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1628 + it->continuation_lines_width);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1629 int next_tab_x
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1630 = (((1 + absolute_x + it->tab_width - 1)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1631 / it->tab_width)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1632 * it->tab_width);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1633 int nspaces;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1634
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1635 /* If part of the TAB has been displayed on the previous line
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1636 which is continued now, continuation_lines_width will have
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1637 been incremented already by the part that fitted on the
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1638 continued line. So, we will get the right number of spaces
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1639 here. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1640 nspaces = next_tab_x - absolute_x;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1641
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1642 if (it->glyph_row)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1643 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1644 int n = nspaces;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1645
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1646 it->char_to_display = ' ';
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1647 it->pixel_width = it->len = 1;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1648
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1649 while (n--)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1650 append_glyph (it);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1651 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1652
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1653 it->pixel_width = nspaces;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1654 it->nglyphs = nspaces;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1655 }
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1656 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
1657 {
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1658 /* 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
1659 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
1660 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
1661 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
1662 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
1663 if (it->glyph_row)
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1664 append_glyph (it);
29262
b7059c9f98ac (produce_glyphs): Don't treat eight-bit-* charsets as multibyte.
Eli Zaretskii <eliz@gnu.org>
parents: 29097
diff changeset
1665 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1666 else
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1667 {
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1668 it->pixel_width = CHAR_WIDTH (it->char_to_display);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1669 it->nglyphs = it->pixel_width;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1670
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1671 if (it->glyph_row)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1672 append_glyph (it);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1673 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1674
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1675 done:
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1676 /* Advance current_x by the pixel width as a convenience for
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1677 the caller. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1678 if (it->area == TEXT_AREA)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1679 it->current_x += it->pixel_width;
25187
39feb68ed3c7 (produce_glyphs): Set iterator's physical height
Gerd Moellmann <gerd@gnu.org>
parents: 25002
diff changeset
1680 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
1681 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
1682 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1683
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1684
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1685 /* 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
1686 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
1687 `(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
1688 being recognized:
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1689
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1690 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
1691 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
1692 point number.
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1693
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1694 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
1695 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
1696
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1697 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1698 produce_stretch_glyph (struct it *it)
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1699 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1700 /* (space :width WIDTH ...) */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1701 Lisp_Object prop, plist;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1702 int width = 0, align_to = -1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1703 int zero_width_ok_p = 0;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1704 double tem;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1705
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1706 /* List should start with `space'. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1707 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
1708 plist = XCDR (it->object);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1709
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1710 /* Compute the width of the stretch. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1711 if ((prop = Fplist_get (plist, QCwidth), !NILP (prop))
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1712 && 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
1713 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1714 /* Absolute width `:width WIDTH' specified and valid. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1715 zero_width_ok_p = 1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1716 width = (int)(tem + 0.5);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1717 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1718 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
1719 && 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
1720 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1721 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
1722 align_to = (align_to < 0
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1723 ? 0
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1724 : 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
1725 else if (align_to < 0)
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1726 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
1727 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
1728 zero_width_ok_p = 1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1729 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1730 else
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1731 /* Nothing specified -> width defaults to canonical char width. */
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1732 width = FRAME_COLUMN_WIDTH (it->f);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1733
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1734 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
1735 width = 1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1736
102831
1f0beb33697b * term.c (produce_stretch_glyph): Reduce width of stretch glyphs
Chong Yidong <cyd@stupidchicken.com>
parents: 102744
diff changeset
1737 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
1738 && 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
1739 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
1740
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1741 if (width > 0 && it->glyph_row)
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1742 {
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1743 Lisp_Object o_object = it->object;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1744 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
1745 int n = width;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1746
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1747 if (!STRINGP (object))
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1748 object = it->w->buffer;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1749 it->object = object;
68661
4e22dd401a52 (append_glyph): Refer to it->char_to_display instead of
Kenichi Handa <handa@m17n.org>
parents: 68651
diff changeset
1750 it->char_to_display = ' ';
54428
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1751 it->pixel_width = it->len = 1;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1752 while (n--)
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1753 append_glyph (it);
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1754 it->object = o_object;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1755 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1756 it->pixel_width = width;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1757 it->nglyphs = width;
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1758 }
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1759
3a86bc69c0e3 (produce_glyphs): Handle IT_STRETCH.
Kim F. Storm <storm@cua.dk>
parents: 54167
diff changeset
1760
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1761 /* 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
1762 Called from produce_composite_glyph for terminal frames if
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1763 IT->glyph_row != NULL. IT->face_id contains the character's
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1764 face. */
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1765
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1766 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1767 append_composite_glyph (struct it *it)
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1768 {
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1769 struct glyph *glyph;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1770
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1771 xassert (it->glyph_row);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1772 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
1773 if (glyph < it->glyph_row->glyphs[1 + it->area])
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1774 {
107996
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1775 /* 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
1776 rather than append it. */
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1777 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
1778 {
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1779 struct glyph *g;
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1780
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1781 /* Make room for the new glyph. */
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1782 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
1783 g[1] = *g;
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1784 glyph = it->glyph_row->glyphs[it->area];
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1785 }
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1786 glyph->type = COMPOSITE_GLYPH;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1787 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
1788 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
1789 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
1790 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1791 glyph->u.cmp.automatic = 0;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1792 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
1793 }
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1794 else
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1795 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1796 glyph->u.cmp.automatic = 1;
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1797 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
1798 glyph->u.cmp.from = it->cmp_it.from;
101964
05ec76bd8aa4 (encode_terminal_code): Adjusted for the change of
Kenichi Handa <handa@m17n.org>
parents: 101774
diff changeset
1799 glyph->u.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
1800 }
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1801
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1802 glyph->face_id = it->face_id;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1803 glyph->padding_p = 0;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1804 glyph->charpos = CHARPOS (it->position);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1805 glyph->object = it->object;
107996
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1806 if (it->bidi_p)
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1807 {
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1808 glyph->resolved_level = it->bidi_it.resolved_level;
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1809 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
1810 abort ();
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1811 glyph->bidi_type = it->bidi_it.type;
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1812 }
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1813 else
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1814 {
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1815 glyph->resolved_level = 0;
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1816 glyph->bidi_type = UNKNOWN_BT;
8ef8b6523597 Fix R2L paragraph display on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107994
diff changeset
1817 }
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1818
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1819 ++it->glyph_row->used[it->area];
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1820 ++glyph;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1821 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1822 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1823
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1824
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1825 /* 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
1826 the composition. We simply produces components of the composition
105426
d0a6d64c3cfc Fix typos in comments.
Juanma Barranquero <lekktu@gmail.com>
parents: 103711
diff changeset
1827 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
1828 correctly. */
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1829
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1830 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1831 produce_composite_glyph (struct it *it)
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1832 {
97830
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1833 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
1834 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1835 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
1836
101774
d4f9e4244d5a (encode_terminal_code): Fix handling of composition.
Kenichi Handa <handa@m17n.org>
parents: 101690
diff changeset
1837 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
1838 }
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1839 else
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1840 {
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1841 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
1842
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1843 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
1844 it->cmp_it.to, NULL);
62a07e57ef40 (encode_terminal_code): Adjusted for the change of struct
Kenichi Handa <handa@m17n.org>
parents: 97720
diff changeset
1845 }
90638
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1846 it->nglyphs = 1;
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1847 if (it->glyph_row)
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1848 append_composite_glyph (it);
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1849 }
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1850
1b46574c9f5d Include "composite.h".
Kenichi Handa <handa@m17n.org>
parents: 90375
diff changeset
1851
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1852 /* Get information about special display element WHAT in an
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1853 environment described by IT. WHAT is one of IT_TRUNCATION or
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1854 IT_CONTINUATION. Maybe produce glyphs for WHAT if IT has a
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1855 non-null glyph_row member. This function ensures that fields like
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1856 face_id, c, len of IT are left untouched. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1857
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1858 void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1859 produce_special_glyphs (struct it *it, enum display_element_type what)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1860 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1861 struct it temp_it;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
1862 Lisp_Object gc;
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1863 GLYPH glyph;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
1864
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1865 temp_it = *it;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1866 temp_it.dp = NULL;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1867 temp_it.what = IT_CHARACTER;
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1868 temp_it.len = 1;
28507
b6f06a755c7d make_number/XINT/XUINT conversions; EQ/== fixes; ==Qnil -> NILP
Ken Raeburn <raeburn@raeburn.org>
parents: 28465
diff changeset
1869 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
1870 memset (&temp_it.current, 0, sizeof temp_it.current);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1871
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1872 if (what == IT_CONTINUATION)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1873 {
107994
5dc04900cbd7 Mirror continuation indicators for R2L lines; fix face extension on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107640
diff changeset
1874 /* 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
1875 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
1876 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
1877 else
5dc04900cbd7 Mirror continuation indicators for R2L lines; fix face extension on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107640
diff changeset
1878 SET_GLYPH_FROM_CHAR (glyph, '\\');
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1879 if (it->dp
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
1880 && (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
1881 && GLYPH_CODE_CHAR_VALID_P (gc))
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1882 {
107994
5dc04900cbd7 Mirror continuation indicators for R2L lines; fix face extension on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107640
diff changeset
1883 /* 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
1884 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
1885 spec_glyph_lookup_face (XWINDOW (it->window), &glyph);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1886 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1887 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1888 else if (what == IT_TRUNCATION)
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1889 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1890 /* Truncation glyph. */
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
1891 SET_GLYPH_FROM_CHAR (glyph, '$');
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1892 if (it->dp
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
1893 && (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
1894 && GLYPH_CODE_CHAR_VALID_P (gc))
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1895 {
107994
5dc04900cbd7 Mirror continuation indicators for R2L lines; fix face extension on TTY.
Eli Zaretskii <eliz@gnu.org>
parents: 107640
diff changeset
1896 /* 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
1897 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
1898 spec_glyph_lookup_face (XWINDOW (it->window), &glyph);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1899 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1900 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1901 else
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1902 abort ();
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1903
110131
cca2a663ef92 Fix handling of 8-bit characters in a display table.
Kenichi Handa <handa@m17n.org>
parents: 110128
diff changeset
1904 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
1905 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
1906 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
1907
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1908 produce_glyphs (&temp_it);
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1909 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
1910 it->nglyphs = temp_it.pixel_width;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1911 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1912
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1913
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1914
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1915 /***********************************************************************
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1916 Faces
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1917 ***********************************************************************/
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1918
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1919 /* 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
1920 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
1921 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
1922 color; the termcap capability `NC' specifies which ones. */
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1923
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1924 #define MAY_USE_WITH_COLORS_P(tty, ATTR) \
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1925 (tty->TN_max_colors > 0 \
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1926 ? (tty->TN_no_color_video & (ATTR)) == 0 \
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1927 : 1)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1928
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
1929 /* 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
1930 FACE_ID is a realized face ID number, in the face cache. */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1931
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1932 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
1933 turn_on_face (struct frame *f, int face_id)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1934 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1935 struct face *face = FACE_FROM_ID (f, face_id);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1936 long fg = face->foreground;
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1937 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
1938 struct tty_display_info *tty = FRAME_TTY (f);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1939
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1940 /* 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
1941 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
1942 if (MAY_USE_WITH_COLORS_P (tty, NC_REVERSE))
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1943 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1944 if (tty->TN_max_colors > 0)
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1945 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1946 if (fg >= 0 && bg >= 0)
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1947 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1948 /* If the terminal supports colors, we can set them
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1949 below without using reverse video. The face's fg
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1950 and bg colors are set as they should appear on
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1951 the screen, i.e. they take the inverse-video'ness
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1952 of the face already into account. */
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1953 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1954 else if (inverse_video)
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1955 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1956 if (fg == FACE_TTY_DEFAULT_FG_COLOR
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1957 || 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
1958 tty_toggle_highlight (tty);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1959 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1960 else
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1961 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1962 if (fg == FACE_TTY_DEFAULT_BG_COLOR
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1963 || 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
1964 tty_toggle_highlight (tty);
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1965 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1966 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1967 else
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1968 {
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1969 /* If we can't display colors, use reverse video
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1970 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
1971 if (inverse_video)
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1972 {
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1973 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
1974 || 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
1975 tty_toggle_highlight (tty);
37499
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1976 }
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1977 else
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1978 {
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1979 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
1980 || 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
1981 tty_toggle_highlight (tty);
37499
b8ff92361366 (turn_on_face): Fix reverse video handling on terminals
Gerd Moellmann <gerd@gnu.org>
parents: 37477
diff changeset
1982 }
37477
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1983 }
6a7ab4d2c7b3 (toggle_highlight): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 35448
diff changeset
1984 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1985
103605
d6ac90c70d24 * term.c (turn_on_face): Allow simultaneously bold and dim
Chong Yidong <cyd@stupidchicken.com>
parents: 103114
diff changeset
1986 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
1987 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
1988
d6ac90c70d24 * term.c (turn_on_face): Allow simultaneously bold and dim
Chong Yidong <cyd@stupidchicken.com>
parents: 103114
diff changeset
1989 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
1990 OUTPUT1_IF (tty, tty->TS_enter_dim_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1991
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1992 /* Alternate charset and blinking not yet used. */
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1993 if (face->tty_alt_charset_p
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1994 && 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
1995 OUTPUT1_IF (tty, tty->TS_enter_alt_charset_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
1996
28465
113efc964095 (TN_no_color_video): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 28200
diff changeset
1997 if (face->tty_blinking_p
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1998 && MAY_USE_WITH_COLORS_P (tty, NC_BLINK))
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
1999 OUTPUT1_IF (tty, tty->TS_enter_blink_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2000
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2001 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
2002 OUTPUT1_IF (tty, tty->TS_enter_underline_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2003
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2004 if (tty->TN_max_colors > 0)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2005 {
65072
462eb3df5c58 (turn_on_face): Check for TS_set_foreground and
Juri Linkov <juri@jurta.org>
parents: 64773
diff changeset
2006 char *ts, *p;
462eb3df5c58 (turn_on_face): Check for TS_set_foreground and
Juri Linkov <juri@jurta.org>
parents: 64773
diff changeset
2007
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
2008 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
2009 if (fg >= 0 && ts)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2010 {
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
2011 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
2012 OUTPUT (tty, p);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2013 xfree (p);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2014 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2015
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
2016 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
2017 if (bg >= 0 && ts)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2018 {
83353
532e0a9335a9 Merged in changes from CVS trunk. Plus added lisp/term tweaks.
Karoly Lorentey <lorentey@elte.hu>
parents: 83346 65072
diff changeset
2019 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
2020 OUTPUT (tty, p);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2021 xfree (p);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2022 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2023 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2024 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
2025
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2026
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2027 /* Turn off appearances of face FACE_ID on tty frame F. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2028
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2029 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
2030 turn_off_face (struct frame *f, int face_id)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2031 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2032 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
2033 struct tty_display_info *tty = FRAME_TTY (f);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2034
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2035 xassert (face != NULL);
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2036
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2037 if (tty->TS_exit_attribute_mode)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2038 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2039 /* Capability "me" will turn off appearance modes double-bright,
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2040 half-bright, reverse-video, standout, underline. It may or
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2041 may not turn off alt-char-mode. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2042 if (face->tty_bold_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2043 || face->tty_dim_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2044 || face->tty_reverse_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2045 || face->tty_alt_charset_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2046 || face->tty_blinking_p
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2047 || face->tty_underline_p)
30848
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
2048 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2049 OUTPUT1_IF (tty, tty->TS_exit_attribute_mode);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2050 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
2051 tty->standout_mode = 0;
30848
fc80dcfc32cd (write_glyphs): Also turn off inverse video after turning
Gerd Moellmann <gerd@gnu.org>
parents: 30836
diff changeset
2052 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2053
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2054 if (face->tty_alt_charset_p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2055 OUTPUT_IF (tty, tty->TS_exit_alt_charset_mode);
25002
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
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2058 {
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2059 /* If we don't have "me" we can only have those appearances
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2060 that have exit sequences defined. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2061 if (face->tty_alt_charset_p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2062 OUTPUT_IF (tty, tty->TS_exit_alt_charset_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2063
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
2064 if (face->tty_underline_p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2065 OUTPUT_IF (tty, tty->TS_exit_underline_mode);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2066 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2067
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2068 /* Switch back to default colors. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2069 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
2070 && ((face->foreground != FACE_TTY_DEFAULT_COLOR
264b83a3a688 Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents: 26871
diff changeset
2071 && 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
2072 || (face->background != FACE_TTY_DEFAULT_COLOR
264b83a3a688 Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents: 26871
diff changeset
2073 && face->background != FACE_TTY_DEFAULT_BG_COLOR)))
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2074 OUTPUT1_IF (tty, tty->TS_orig_pair);
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2075 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
2076
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
2077
45522
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2078 /* 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
2079 capabilities in CAPS simultaneously, with foreground and background
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2080 colors FG and BG. */
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2081
45548
612208417377 C style fix.
Miles Bader <miles@gnu.org>
parents: 45522
diff changeset
2082 int
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
2083 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
2084 unsigned long fg, unsigned long bg)
45522
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2085 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2086 #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
2087 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
2088 return 0;
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2089
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2090 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
2091 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
2092 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
2093 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
2094 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
2095 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
2096
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2097 /* We can do it! */
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2098 return 1;
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2099 }
1513f6afe56f (tty_capable_p): New function.
Miles Bader <miles@gnu.org>
parents: 44890
diff changeset
2100
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2101 /* Return non-zero if the terminal is capable to display colors. */
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2102
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2103 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
2104 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
2105 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
2106
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2107 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
2108 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
2109 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
2110 (Lisp_Object terminal)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2111 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2112 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
2113 if (!t)
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
2114 return Qnil;
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
2115 else
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2116 return t->display_info.tty->TN_max_colors > 0 ? Qt : Qnil;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2117 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2118
42954
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2119 /* Return the number of supported colors. */
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2120 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
2121 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
2122 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
2123
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2124 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
2125 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
2126 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
2127 (Lisp_Object terminal)
42954
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2128 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2129 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
2130 if (!t)
83161
8d62eda26760 Fix byte-compile errors during bootstrap. (Reported by Juraj Kubelka.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83158
diff changeset
2131 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
2132 else
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2133 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
2134 }
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
2135
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2136 #ifndef DOS_NT
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2137
78566
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2138 /* 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
2139 to work around an HPUX compiler bug (?). See
78562
b6a121f8c4ff Comment previous change.
Glenn Morris <rgm@gnu.org>
parents: 78560
diff changeset
2140 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
2141 static int default_max_colors;
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2142 static int default_max_pairs;
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2143 static int default_no_color_video;
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2144 static char *default_orig_pair;
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2145 static char *default_set_foreground;
a23949b99eb1 Tweak previous change (don't init statics).
Glenn Morris <rgm@gnu.org>
parents: 78563
diff changeset
2146 static char *default_set_background;
78560
44134c35ea57 Philippe Waroquiers <philippe.waroquiers at eurocontrol.int>
Glenn Morris <rgm@gnu.org>
parents: 78260
diff changeset
2147
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2148 /* 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
2149 terminal. */
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2150 static void
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
2151 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
2152 {
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2153
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2154 if (save)
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2155 {
95481
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
2156 xfree (default_orig_pair);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2157 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
2158
95481
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
2159 xfree (default_set_foreground);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2160 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
2161 : NULL;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2162
95481
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
2163 xfree (default_set_background);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2164 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
2165 : NULL;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2166
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2167 default_max_colors = tty->TN_max_colors;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2168 default_max_pairs = tty->TN_max_pairs;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2169 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
2170 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2171 else
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2172 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2173 tty->TS_orig_pair = default_orig_pair;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2174 tty->TS_set_foreground = default_set_foreground;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2175 tty->TS_set_background = default_set_background;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2176 tty->TN_max_colors = default_max_colors;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2177 tty->TN_max_pairs = default_max_pairs;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2178 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
2179 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2180 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2181
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2182 /* 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
2183 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
2184 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
2185 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
2186 static void
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
2187 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
2188 {
52652
31a3a92c1a03 (tty_setup_colors): Treat any negative argument as -1.
Eli Zaretskii <eliz@gnu.org>
parents: 52579
diff changeset
2189 /* 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
2190 if (mode < -1)
31a3a92c1a03 (tty_setup_colors): Treat any negative argument as -1.
Eli Zaretskii <eliz@gnu.org>
parents: 52579
diff changeset
2191 mode = -1;
31a3a92c1a03 (tty_setup_colors): Treat any negative argument as -1.
Eli Zaretskii <eliz@gnu.org>
parents: 52579
diff changeset
2192
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2193 switch (mode)
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2194 {
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2195 case -1: /* no colors at all */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2196 tty->TN_max_colors = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2197 tty->TN_max_pairs = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2198 tty->TN_no_color_video = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2199 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
2200 break;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2201 case 0: /* default colors, if any */
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2202 default:
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2203 tty_default_color_capabilities (tty, 0);
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2204 break;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2205 case 8: /* 8 standard ANSI colors */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2206 tty->TS_orig_pair = "\033[0m";
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2207 #ifdef TERMINFO
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2208 tty->TS_set_foreground = "\033[3%p1%dm";
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2209 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
2210 #else
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2211 tty->TS_set_foreground = "\033[3%dm";
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2212 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
2213 #endif
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2214 tty->TN_max_colors = 8;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2215 tty->TN_max_pairs = 64;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
2216 tty->TN_no_color_video = 0;
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2217 break;
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2218 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2219 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2220
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2221 void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
2222 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
2223 {
107984
bef5d1738c0b Make variable forwarding explicit rather the using special values.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107847
diff changeset
2224 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
2225 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
2226 int mode;
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2227 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
2228 = 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
2229
93984
ddcecf318c8a (set_tty_color_mode): Left over typo.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 93883
diff changeset
2230 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
2231 val = CONSP (tem) ? XCDR (tem) : Qnil;
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2232
52579
611336925095 (set_tty_color_mode): Use INTEGERP to test whether a
Eli Zaretskii <eliz@gnu.org>
parents: 52401
diff changeset
2233 if (INTEGERP (val))
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2234 color_mode = val;
107984
bef5d1738c0b Make variable forwarding explicit rather the using special values.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107847
diff changeset
2235 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
2236 {
107984
bef5d1738c0b Make variable forwarding explicit rather the using special values.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107847
diff changeset
2237 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
2238 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
2239 }
107984
bef5d1738c0b Make variable forwarding explicit rather the using special values.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107847
diff changeset
2240 else
bef5d1738c0b Make variable forwarding explicit rather the using special values.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107847
diff changeset
2241 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
2242
93883
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2243 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
2244
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2245 if (mode != tty->previous_color_mode)
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2246 {
93883
722fdbc7a012 * xdisp.c (redisplay_internal): Reset tty's color_mode when switching
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92281
diff changeset
2247 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
2248 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
2249 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
2250 /* 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
2251 safe_call (1, &funsym);
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2252 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2253 }
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
2254
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2255 #endif /* !DOS_NT */
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2256
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2257
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2258
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2259 /* 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
2260
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2261 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
2262 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
2263 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2264 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
2265
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2266 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
2267 {
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2268 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
2269 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
2270 else
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2271 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
2272 }
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2273
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2274 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
2275 }
69ebc75cb461 Implemented display ids for multiple emacsclients on the same tty. Plus assorted bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83161
diff changeset
2276
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
2277 /* 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
2278 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
2279
83342
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
2280 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
2281
c66ebcc29777 Removed %T in mode-line-format. Trivial documentation changes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83021
diff changeset
2282 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
2283
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2284 struct terminal *
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109664
diff changeset
2285 get_named_tty (const char *name)
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2286 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2287 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
2288
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
2289 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
2290 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
2291
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
2292 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
2293 {
97720
b2594691f8f2 (get_named_tty): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents: 97658
diff changeset
2294 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
2295 && !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
2296 && 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
2297 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
2298 }
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2299
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2300 return 0;
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2301 }
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2302
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
2303
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2304 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
2305 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
2306 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
2307
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2308 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
2309 selected frame's terminal). */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2310 (Lisp_Object terminal)
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2311 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2312 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
2313
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2314 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
2315 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
2316
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2317 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
2318 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
2319 else
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2320 return Qnil;
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2321 }
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2322
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2323 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
2324 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
2325
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2326 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
2327 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
2328 TERMINAL is not on a tty device. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2329 (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
2330 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2331 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
2332
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2333 if ((t->type != output_termcap && t->type != output_msdos_raw)
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2334 || 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
2335 return Qnil;
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2336 else
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2337 return Qt;
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2338 }
6b4b299e2cd5 Fix suspend-frame on the controlling tty (reported by Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83168
diff changeset
2339
83311
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2340 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
2341 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
2342 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
2343 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
2344 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
2345
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2346 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
2347 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
2348 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
2349 (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
2350 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2351 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
2352
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2353 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
2354 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
2355 return Qnil;
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2356 }
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2357
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2358
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2359
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2360 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
2361 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
2362
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2363 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
2364 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
2365 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
2366 not updated.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2367
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2368 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
2369 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
2370
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
2371 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
2372 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
2373 terminal device.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2374
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2375 `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
2376 suspended.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2377
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2378 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
2379 (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
2380 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2381 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
2382 FILE *f;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2383
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2384 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
2385 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
2386
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2387 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
2388
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2389 if (f)
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2390 {
84769
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2391 /* 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
2392 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
2393 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
2394 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
2395 {
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2396 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
2397 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
2398 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
2399 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
2400 }
cbcb89640ef2 * xt-mouse.el (xterm-mouse-mode): Re-enable suspend-tty-functions.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84768
diff changeset
2401
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2402 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
2403 delete_keyboard_wait_descriptor (fileno (f));
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2404
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2405 #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
2406 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
2407 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
2408 fclose (t->display_info.tty->output);
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2409 #endif
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2410
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2411 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
2412 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
2413
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2414 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
2415 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
2416
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2417 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2418
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
2419 /* 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
2420 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
2421
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2422 return Qnil;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2423 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2424
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2425 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
2426 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
2427 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
2428 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
2429
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2430 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
2431 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
2432
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
2433 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
2434 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
2435 device.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2436
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2437 `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
2438 suspended.
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2439
103047
997f1f1cac08 * term.c (Ftty_display_color_p, Ftty_display_color_cells)
Chong Yidong <cyd@stupidchicken.com>
parents: 102831
diff changeset
2440 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
2441 frame's terminal). */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2442 (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
2443 {
83512
5d328dadd0f4 Make `tty-display-color-p' follow its doc string. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83502
diff changeset
2444 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
2445 int fd;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2446
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2447 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
2448 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
2449
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2450 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
2451 {
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2452 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
2453 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
2454
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2455 #ifdef MSDOS
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2456 t->display_info.tty->output = stdout;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2457 t->display_info.tty->input = stdin;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2458 #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
2459 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
2460
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
2461 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
2462 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
2463
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
2464 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
2465 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
2466
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2467 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
2468 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
2469 #endif
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
2470
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2471 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
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 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
2474 {
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
2475 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
2476 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
2477 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
2478 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
2479
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
2480 /* 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
2481 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
2482 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
2483 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
2484 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
2485 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
2486 }
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2487
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
2488 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
2489
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
2490 /* 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
2491 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
2492 {
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2493 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
2494 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
2495 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
2496 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
2497 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2498 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2499
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
2500 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
2501
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2502 return Qnil;
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
2503 }
83311
c016d82bf02b Merged from miles@gnu.org--gnu-2005 (patch 423-434)
Karoly Lorentey <lorentey@elte.hu>
parents: 83299 63549
diff changeset
2504
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
2505
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
2506 /***********************************************************************
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2507 Mouse
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2508 ***********************************************************************/
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2509
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
2510 #ifdef HAVE_GPM
81107
a9d423c1c1d4 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 81102
diff changeset
2511 void
a9d423c1c1d4 Whitespace fix.
Richard M. Stallman <rms@gnu.org>
parents: 81102
diff changeset
2512 term_mouse_moveto (int x, int y)
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2513 {
81811
c10410a3aa36 Include unistd.h for ttyname, used in handle_one_term_event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 81308
diff changeset
2514 /* TODO: how to set mouse position?
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2515 const char *name;
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2516 int fd;
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2517 name = (const char *) ttyname (0);
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2518 fd = open (name, O_WRONLY);
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2519 SOME_FUNCTION (x, y, fd);
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2520 close (fd);
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2521 last_mouse_x = x;
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2522 last_mouse_y = y; */
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2523 }
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2524
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2525 static void
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2526 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
2527 {
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2528 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
2529 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
2530 int i;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2531
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2532 struct frame *f = XFRAME (w->frame);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2533 struct tty_display_info *tty = FRAME_TTY (f);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2534
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2535 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
2536 to do anything. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2537 w->current_matrix != NULL
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2538 /* 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
2539 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
2540 && 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
2541 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2542 /* 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
2543 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
2544 the highlight region. */
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2545
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2546 /* Save current cursor co-ordinates */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2547 save_y = curY (tty);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2548 save_x = curX (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2549
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2550 /* 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
2551 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
2552 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2553 int start_hpos, end_hpos, nglyphs;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2554 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
2555
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2556 /* 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
2557 if (!row->enabled_p)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2558 continue;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2559
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2560 /* 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
2561 if (i == mouse_face_beg_row)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2562 start_hpos = mouse_face_beg_col;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2563 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2564 start_hpos = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2565
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2566 if (i == mouse_face_end_row)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2567 end_hpos = mouse_face_end_col;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2568 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2569 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2570 end_hpos = row->used[TEXT_AREA];
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2571 if (draw == DRAW_NORMAL_TEXT)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2572 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
2573 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2574
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2575 if (end_hpos <= start_hpos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2576 continue;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2577 /* 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
2578 mouse-face. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2579 row->mouse_face_p = draw > 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2580
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2581 nglyphs = end_hpos - start_hpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2582
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2583 if (end_hpos >= row->used[TEXT_AREA])
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2584 nglyphs = row->used[TEXT_AREA] - start_hpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2585
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2586 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
2587 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
2588 + WINDOW_LEFT_EDGE_X (w);
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
2589
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2590 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
2591
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2592 if (draw == DRAW_MOUSE_FACE)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2593 {
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2594 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
2595 nglyphs, mouse_face_face_id);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2596 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2597 else /* draw == DRAW_NORMAL_TEXT */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2598 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
2599 }
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
2600 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
2601 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2602 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2603
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2604 static void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
2605 term_clear_mouse_face (void)
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2606 {
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2607 if (!NILP (mouse_face_window))
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2608 term_show_mouse_face (DRAW_NORMAL_TEXT);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2609
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2610 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
2611 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
2612 mouse_face_window = Qnil;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2613 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2614
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2615 /* 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
2616 *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
2617 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
2618 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
2619 - taken from msdos.c */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2620 static int
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2621 fast_find_position (struct window *w, int pos, int *hpos, int *vpos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2622 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2623 int i, lastcol, line_start_position, maybe_next_line_p = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2624 int yb = window_text_bottom_y (w);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2625 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
2626
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2627 while (row->y < yb)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2628 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2629 if (row->used[TEXT_AREA])
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2630 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
2631 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2632 line_start_position = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2633
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2634 if (line_start_position > pos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2635 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2636 /* 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
2637 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
2638 else if (line_start_position == pos
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2639 && pos == BUF_ZV (XBUFFER (w->buffer)))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2640 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2641 maybe_next_line_p = 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2642 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2643 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2644 else if (line_start_position > 0)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2645 best_row = row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2646
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2647 /* 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
2648 never-never land... */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2649 if (row->y + 1 >= yb)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2650 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2651
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2652 ++row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2653 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2654
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2655 /* Find the right column within BEST_ROW. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2656 lastcol = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2657 row = best_row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2658 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
2659 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2660 struct glyph *glyph = row->glyphs[TEXT_AREA] + i;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2661 int charpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2662
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2663 charpos = glyph->charpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2664 if (charpos == pos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2665 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2666 *hpos = i;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2667 *vpos = row->y;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2668 return 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2669 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2670 else if (charpos > pos)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2671 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2672 else if (charpos > 0)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2673 lastcol = i;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2674 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2675
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2676 /* 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
2677 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
2678 use the start of the following line. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2679 if (maybe_next_line_p)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2680 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2681 ++row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2682 lastcol = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2683 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2684
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2685 *vpos = row->y;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2686 *hpos = lastcol + 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2687 return 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2688 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2689
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2690 static void
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2691 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
2692 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2693 enum window_part part;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2694 Lisp_Object window;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2695 struct window *w;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2696 struct buffer *b;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2697
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2698 if (NILP (Vmouse_highlight)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2699 || !f->glyphs_initialized_p)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2700 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2701
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2702 /* Which window is that in? */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2703 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
2704
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2705 /* Not on a window -> return. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2706 if (!WINDOWP (window))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2707 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2708
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
2709 if (!EQ (window, mouse_face_window))
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2710 term_clear_mouse_face ();
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2711
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2712 w = XWINDOW (window);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2713
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2714 /* 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
2715 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
2716 b = XBUFFER (w->buffer);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2717 if (part == ON_TEXT
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2718 && EQ (w->window_end_valid, w->buffer)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2719 && XFASTINT (w->last_modified) == BUF_MODIFF (b)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2720 && 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
2721 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2722 int pos, i, nrows = w->current_matrix->nrows;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2723 struct glyph_row *row;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2724 struct glyph *glyph;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2725
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2726 /* Find the glyph under X/Y. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2727 glyph = NULL;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2728 if (y >= 0 && y < nrows)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2729 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2730 row = MATRIX_ROW (w->current_matrix, y);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2731 /* 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
2732 not enabled. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2733 for (i = 0; i <= y; i++)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2734 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
2735 break;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2736 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
2737 && row->displays_text_p
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2738 && x < window_box_width (w, TEXT_AREA))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2739 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2740 glyph = row->glyphs[TEXT_AREA];
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2741 if (x >= row->used[TEXT_AREA])
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2742 glyph = NULL;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2743 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2744 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2745 glyph += x;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2746 if (!BUFFERP (glyph->object))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2747 glyph = NULL;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2748 }
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 }
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 /* 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
2753 if (glyph == NULL)
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 term_clear_mouse_face ();
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2756 return;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2757 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2758
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2759 if (!BUFFERP (glyph->object))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2760 abort ();
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2761 pos = glyph->charpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2762
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2763 /* Check for mouse-face. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2764 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2765 Lisp_Object mouse_face, overlay, position, *overlay_vec;
81083
223bb8e66f74 * xfaces.c (syms_of_xfaces): Delete stray semicolon.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 80994
diff changeset
2766 int noverlays, obegv, ozv;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2767 struct buffer *obuf;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2768
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2769 /* 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
2770 if (pos > BUF_Z (b))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2771 return;
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 /* 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
2774 overlays_at and compute_char_face. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2775 obuf = current_buffer;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2776 current_buffer = b;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2777 obegv = BEGV;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2778 ozv = ZV;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2779 BEGV = BEG;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2780 ZV = Z;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2781
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2782 /* Is this char mouse-active? */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2783 XSETINT (position, pos);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2784
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2785 /* 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
2786 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
2787 /* Sort overlays into increasing priority order. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2788 noverlays = sort_overlays (overlay_vec, noverlays, w);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2789
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2790 /* 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
2791 if (!(EQ (window, mouse_face_window)
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2792 && y >= mouse_face_beg_row
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2793 && y <= mouse_face_end_row
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2794 && (y > mouse_face_beg_row
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2795 || x >= mouse_face_beg_col)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2796 && (y < mouse_face_end_row
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2797 || x < mouse_face_end_col
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2798 || mouse_face_past_end)))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2799 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2800 /* 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
2801 term_clear_mouse_face ();
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2802
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2803 /* Find the 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
2804 property. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2805 overlay = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2806 for (i = noverlays - 1; i >= 0; --i)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2807 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2808 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
2809 if (!NILP (mouse_face))
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 overlay = overlay_vec[i];
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 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2815
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2816 /* 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
2817 if (NILP (overlay))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2818 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
2819 w->buffer);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2820
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2821 /* Handle the overlay case. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2822 if (!NILP (overlay))
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 /* 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
2825 should be active. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2826 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
2827 EMACS_INT ignore;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2828
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 before = Foverlay_start (overlay);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2831 after = Foverlay_end (overlay);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2832 /* Record this as the current active region. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2833 fast_find_position (w, XFASTINT (before),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2834 &mouse_face_beg_col,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2835 &mouse_face_beg_row);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2836
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2837 mouse_face_past_end
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2838 = !fast_find_position (w, XFASTINT (after),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2839 &mouse_face_end_col,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2840 &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
2841 mouse_face_window = window;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2842
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2843 mouse_face_face_id
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2844 = 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
2845 &ignore, pos + 1, 1, -1);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2846
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2847 /* Display it as active. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2848 term_show_mouse_face (DRAW_MOUSE_FACE);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2849 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2850 /* Handle the text property case. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2851 else if (!NILP (mouse_face))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2852 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2853 /* 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
2854 should be active. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2855 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
2856 EMACS_INT ignore;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2857
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2858 beginning = Fmarker_position (w->start);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2859 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
2860 before
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2861 = 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
2862 Qmouse_face,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2863 w->buffer, beginning);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2864 after
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2865 = Fnext_single_property_change (position, Qmouse_face,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2866 w->buffer, end);
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 /* Record this as the current active region. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2869 fast_find_position (w, XFASTINT (before),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2870 &mouse_face_beg_col,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2871 &mouse_face_beg_row);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2872 mouse_face_past_end
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2873 = !fast_find_position (w, XFASTINT (after),
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2874 &mouse_face_end_col,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2875 &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
2876 mouse_face_window = window;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2877
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2878 mouse_face_face_id
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2879 = 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
2880 &ignore, pos + 1, 1, -1);
80979
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 /* Display it as active. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2883 term_show_mouse_face (DRAW_MOUSE_FACE);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2884 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2885 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2886
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2887 /* Look for a `help-echo' property. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2888 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2889 Lisp_Object help;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2890
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2891 /* Check overlays first. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2892 help = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2893 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
2894 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2895 overlay = overlay_vec[i];
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2896 help = Foverlay_get (overlay, Qhelp_echo);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2897 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2898
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2899 if (!NILP (help))
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 help_echo_string = help;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2902 help_echo_window = window;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2903 help_echo_object = overlay;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2904 help_echo_pos = pos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2905 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2906 /* Try text properties. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2907 else if (NILP (help)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2908 && ((STRINGP (glyph->object)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2909 && glyph->charpos >= 0
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2910 && glyph->charpos < SCHARS (glyph->object))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2911 || (BUFFERP (glyph->object)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2912 && glyph->charpos >= BEGV
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2913 && glyph->charpos < ZV)))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2914 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2915 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
2916 Qhelp_echo, glyph->object);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2917 if (!NILP (help))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2918 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2919 help_echo_string = help;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2920 help_echo_window = window;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2921 help_echo_object = glyph->object;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2922 help_echo_pos = glyph->charpos;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2923 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2924 }
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
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2927 BEGV = obegv;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2928 ZV = ozv;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2929 current_buffer = obuf;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2930 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2931 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2932 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2933
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2934 static int
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2935 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
2936 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2937 /* 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
2938 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
2939 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2940 frame->mouse_moved = 1;
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2941 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
2942 /* Remember which glyph we're now on. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2943 last_mouse_x = event->x;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2944 last_mouse_y = event->y;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2945 return 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2946 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2947 return 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2948 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2949
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2950 /* Return the current position of the mouse.
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2951
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2952 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
2953 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
2954 garbage.
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2955
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2956 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
2957 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
2958
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2959 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
2960
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2961 This clears mouse_moved until the next motion
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2962 event arrives. */
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2963 static void
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2964 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
2965 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
2966 Lisp_Object *y, unsigned long *time)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2967 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2968 struct timeval now;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2969
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2970 *fp = SELECTED_FRAME ();
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2971 (*fp)->mouse_moved = 0;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2972
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2973 *bar_window = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2974 *part = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2975
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
2976 XSETINT (*x, last_mouse_x);
81102
a00e7c5f2faa (mouse_face_window): Rename...
Nick Roberts <nickrob@snap.net.nz>
parents: 81083
diff changeset
2977 XSETINT (*y, last_mouse_y);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2978 gettimeofday(&now, 0);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2979 *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
2980 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2981
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2982 /* 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
2983
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2984 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
2985 the mouse. */
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 static Lisp_Object
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2988 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
2989 struct frame *f)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2990 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2991 struct timeval now;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2992 int i, j;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2993
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2994 result->kind = GPM_CLICK_EVENT;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2995 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
2996 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2997 if (event->buttons & j) {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2998 result->code = i; /* button number */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
2999 break;
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 gettimeofday(&now, 0);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3003 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
3004
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3005 if (event->type & GPM_UP)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3006 result->modifiers = up_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3007 else if (event->type & GPM_DOWN)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3008 result->modifiers = down_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3009 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3010 result->modifiers = 0;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
3011
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3012 if (event->type & GPM_SINGLE)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3013 result->modifiers |= click_modifier;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
3014
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3015 if (event->type & GPM_DOUBLE)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3016 result->modifiers |= double_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3017
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3018 if (event->type & GPM_TRIPLE)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3019 result->modifiers |= triple_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3020
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3021 if (event->type & GPM_DRAG)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3022 result->modifiers |= drag_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3023
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3024 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
3025
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3026 /* 1 << KG_SHIFT */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3027 if (event->modifiers & (1 << 0))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3028 result->modifiers |= shift_modifier;
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 /* 1 << KG_CTRL */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3031 if (event->modifiers & (1 << 2))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3032 result->modifiers |= ctrl_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3033
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3034 /* 1 << KG_ALT || KG_ALTGR */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3035 if (event->modifiers & (1 << 3)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3036 || event->modifiers & (1 << 1))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3037 result->modifiers |= meta_modifier;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3038 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3039
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3040 XSETINT (result->x, event->x);
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3041 XSETINT (result->y, event->y);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3042 XSETFRAME (result->frame_or_window, f);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3043 result->arg = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3044 return Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3045 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3046
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
3047 int
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
3048 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
3049 {
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
3050 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
3051 struct input_event ie;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3052 int do_help = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3053 int count = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3054
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3055 EVENT_INIT (ie);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3056 ie.kind = NO_EVENT;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3057 ie.arg = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3058
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3059 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
3060 previous_help_echo_string = help_echo_string;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3061 help_echo_string = Qnil;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3062
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3063 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
3064
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3065 if (!term_mouse_movement (f, event))
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3066 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
3067
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3068 /* 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
3069 has changed, generate a HELP_EVENT. */
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3070 if (!NILP (help_echo_string)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3071 || !NILP (previous_help_echo_string))
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3072 do_help = 1;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3073
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3074 goto done;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3075 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3076 else {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3077 f->mouse_moved = 0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3078 term_mouse_click (&ie, event, f);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3079 }
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3080
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3081 done:
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3082 if (ie.kind != NO_EVENT)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3083 {
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3084 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
3085 count++;
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
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3088 if (do_help
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3089 && !(hold_quit && hold_quit->kind != NO_EVENT))
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 Lisp_Object frame;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3092
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3093 if (f)
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3094 XSETFRAME (frame, f);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3095 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3096 frame = Qnil;
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 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
3099 help_echo_object, help_echo_pos);
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3100 count++;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3101 }
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 return count;
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
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3106 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
3107 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
3108 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
3109 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
3110 (void)
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3111 {
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3112 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
3113 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
3114 = ((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
3115 ? (f)->terminal->display_info.tty : NULL);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3116 Gpm_Connect connection;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3117
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
3118 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
3119 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
3120 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
3121 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
3122 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
3123 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
3124
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3125 connection.eventMask = ~0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3126 connection.defaultMask = ~GPM_HARD;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3127 connection.maxMod = ~0;
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3128 connection.minMod = 0;
81127
d620b28641cd (term_mouse_highlight): Remove unused variables.
Nick Roberts <nickrob@snap.net.nz>
parents: 81107
diff changeset
3129 gpm_zerobased = 1;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3130
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3131 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
3132 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
3133 else
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3134 {
84768
53194ec05789 * termhooks.h (term_gpm): Delete. Use gpm_tty's NULLness instead.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84692
diff changeset
3135 gpm_tty = tty;
84955
dfbee4931a6a (Fterm_open_connection): Add comment.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84849
diff changeset
3136 /* `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
3137 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
3138 before calling init_sys_modes. */
83622
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
3139 reset_sys_modes (tty);
0a3247aa24a4 Merged from emacs--devo--0
Miles Bader <miles@gnu.org>
parents: 83619 80994
diff changeset
3140 init_sys_modes (tty);
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3141 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
3142 return Qnil;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3143 }
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
98155
314662df7c17 * term.c (close_gpm): New fun extracted from Fgpm_mouse_stop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 97830
diff changeset
3146 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
3147 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
3148 {
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
3149 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
3150 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
3151 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
3152 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
3153 }
314662df7c17 * term.c (close_gpm): New fun extracted from Fgpm_mouse_stop.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 97830
diff changeset
3154
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3155 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
3156 0, 0, 0,
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3157 doc: /* Close a connection to Gpm. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
3158 (void)
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3159 {
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
3160 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
3161 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
3162 = ((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
3163 ? (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
3164
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
3165 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
3166 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
3167
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
3168 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
3169 return Qnil;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3170 }
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
3171 #endif /* HAVE_GPM */
80979
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
103617
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3174 #ifndef MSDOS
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3175 /***********************************************************************
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3176 Initialization
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3177 ***********************************************************************/
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3178
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3179 /* 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
3180 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
3181
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
3182 void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3183 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
3184 {
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3185 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
3186
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3187 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
3188 abort ();
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3189
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3190 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
3191 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
3192
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3193 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
3194
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3195 f->output_data.tty = t;
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3196 }
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3197
100367
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3198 /* 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
3199
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3200 static void
100367
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3201 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
3202 {
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3203 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
3204 abort ();
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3205
100367
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3206 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
3207 free_frame_faces (f);
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3208
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3209 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
3210 }
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3211
103617
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3212 #else /* MSDOS */
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3213
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3214 /* Delete frame F's face cache. */
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3215
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3216 static void
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3217 tty_free_frame_resources (struct frame *f)
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3218 {
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3219 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
3220 abort ();
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3221
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3222 if (FRAME_FACE_CACHE (f))
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3223 free_frame_faces (f);
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3224 }
9342805096db (create_tty_output) [MSDOS]: #ifdef away.
Eli Zaretskii <eliz@gnu.org>
parents: 103605
diff changeset
3225 #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
3226
84461
7ec30b352b6e * xterm.c (x_create_terminal): Add comment.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84359
diff changeset
3227 /* 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
3228
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3229 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
3230 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
3231 {
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3232 terminal->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
3233 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
3234 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
3235 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
3236 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
3237 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
3238 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
3239 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
3240 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
3241 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
3242 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
3243 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
3244 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
3245 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
3246 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
3247 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
3248 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
3249 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
3250 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
3251 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
3252 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
3253 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
3254 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
3255 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
3256 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
3257 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
3258
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3259 /* 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
3260 correctly. */
100367
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3261 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
3262 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
3263 }
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3264
84461
7ec30b352b6e * xterm.c (x_create_terminal): Add comment.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 84359
diff changeset
3265 /* 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
3266
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3267 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
3268 set_tty_hooks (struct terminal *terminal)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3269 {
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3270 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
3271
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3272 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
3273 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
3274
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3275 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
3276 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
3277 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
3278
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3279 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
3280
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3281 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
3282 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
3283 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
3284
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3285 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
3286
83521
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3287 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
3288 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
3289 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
3290 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
3291 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
3292
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3293 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
3294 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
3295 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
3296
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3297 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
3298 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
3299 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
3300 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
3301
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3302 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
3303 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
3304
100367
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3305 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
3306 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
3307 }
40a5d8a15056 Fix crashes in redisplay functions on suspended tty frames. (Reported by Dan Nicolaescu.)
Karoly Lorentey <lorentey@elte.hu>
parents: 83512
diff changeset
3308
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3309 /* 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
3310 static void
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3311 dissociate_if_controlling_tty (int fd)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3312 {
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3313 #ifndef DOS_NT
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3314 int pgid;
83154
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3315 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
3316 if (pgid != -1)
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3317 {
109633
ce2dcd6fda75 Fix emacs -Q -f server-start & emacsclient -t on GNU/Linux.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109559
diff changeset
3318 #if defined (USG5)
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3319 setpgrp ();
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3320 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
3321 #elif defined (CYGWIN)
b651dc7c54ac * term.c (dissociate_if_controlling_tty): Call setsid on CYGWIN.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83891
diff changeset
3322 setsid ();
b651dc7c54ac * term.c (dissociate_if_controlling_tty): Call setsid on CYGWIN.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83891
diff changeset
3323 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
3324 #else
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3325 #ifdef TIOCNOTTY /* Try BSD ioctls. */
83154
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3326 sigblock (sigmask (SIGTTOU));
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3327 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
3328 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
3329 {
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3330 no_controlling_tty = 1;
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3331 }
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3332 if (fd != -1)
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3333 emacs_close (fd);
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3334 sigunblock (sigmask (SIGTTOU));
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3335 #else
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3336 /* Unknown system. */
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3337 croak ();
ae72b7a6c292 Dissociate from the controlling tty correctly on FreeBSD.
Karoly Lorentey <lorentey@elte.hu>
parents: 83147
diff changeset
3338 #endif /* ! TIOCNOTTY */
83158
f948c9fd910c Fix parse error in term.c (ARISAWA Akihiro).
Karoly Lorentey <lorentey@elte.hu>
parents: 83154
diff changeset
3339 #endif /* ! USG */
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3340 }
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3341 #endif /* !DOS_NT */
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3342 }
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3343
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3344 /* 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
3345 type.
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3346
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
3347 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
3348 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
3349 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
3350
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3351 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
3352
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3353 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
3354
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3355 struct terminal *
109726
64732fa6188a Use const char* instead of char*.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109664
diff changeset
3356 init_tty (const char *name, const char *terminal_type, int must_succeed)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3357 {
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
3358 char *area = NULL;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3359 char **address = &area;
52314
529dd59ee898 (term_init): Remove `const' from buffer_size's declaration.
Eli Zaretskii <eliz@gnu.org>
parents: 52294
diff changeset
3360 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
3361 register char *p = NULL;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3362 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
3363 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
3364 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
3365 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
3366
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3367 if (!terminal_type)
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3368 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
3369 "Unknown terminal type",
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3370 "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
3371
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
3372 if (name == NULL)
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3373 name = DEV_TTY;
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3374 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
3375 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
3376
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3377 /* 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
3378 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
3379 /* 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
3380 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
3381 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
3382 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
3383 if (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3384 return terminal;
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3385
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3386 terminal = create_terminal ();
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3387 #ifdef MSDOS
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3388 if (been_here > 0)
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3389 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
3390 name, "");
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3391 been_here = 1;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3392 tty = &the_only_display_info;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3393 #else
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3394 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
3395 #endif
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109144
diff changeset
3396 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
3397 tty->next = tty_list;
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3398 tty_list = tty;
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3399
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3400 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
3401 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
3402 tty->terminal = terminal;
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3403
82991
2b26656ff804 MULTI_KBOARD support for ttys. Input-related bugfixes for X+tty sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82990
diff changeset
3404 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
3405 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
3406
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3407 #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
3408 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
3409
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
3410 {
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
3411 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
3412 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
3413
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3414 #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
3415 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
3416 /* 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
3417 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
3418 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
3419 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
3420 else
83032
b8237c556f0e Fix the case when emacsclient is run on Emacs's controlling tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83027
diff changeset
3421 #else
83074
34a7a8f40548 Fix background-mode on terminal frames (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83065
diff changeset
3422 /* 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
3423 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
3424 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
3425 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
3426 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
3427 #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
3428
100370
c611d83003ce (init_tty): Move setting the terminal name before the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100367
diff changeset
3429 tty->name = xstrdup (name);
c611d83003ce (init_tty): Move setting the terminal name before the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100367
diff changeset
3430 terminal->name = xstrdup (name);
c611d83003ce (init_tty): Move setting the terminal name before the
Dan Nicolaescu <dann@ics.uci.edu>
parents: 100367
diff changeset
3431
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
3432 if (fd < 0)
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3433 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
3434 "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
3435 "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
3436 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
3437 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
3438 {
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
3439 close (fd);
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3440 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
3441 "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
3442 "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
3443 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
3444 }
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
3445
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
3446 #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
3447 if (!ctty)
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3448 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
3449 #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
3450
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
3451 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
3452 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
3453 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
3454 }
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3455
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
3456 tty->type = xstrdup (terminal_type);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3457
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3458 add_keyboard_wait_descriptor (fileno (tty->input));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3459
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3460 #endif /* !DOS_NT */
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3461
90059
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
3462 encode_terminal_src_size = 0;
9b0bfaaaec9c Sync to the change in HEAD on 2004-11-30.
Kenichi Handa <handa@m17n.org>
parents: 90054
diff changeset
3463 encode_terminal_dst_size = 0;
58638
67bea14002c3 (encode_terminal_buf, encode_terminal_bufsize): New
Kenichi Handa <handa@m17n.org>
parents: 54428
diff changeset
3464
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
3465 #ifdef HAVE_GPM
83630
28201311b297 * term.c (init_tty): Use terminal specific mouse_position_hook.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83629
diff changeset
3466 terminal->mouse_position_hook = term_mouse_position;
84968
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
3467 mouse_face_window = Qnil;
80979
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3468 #endif
3d81d0b44577 (write_glyphs_with_face): New function.
Nick Roberts <nickrob@snap.net.nz>
parents: 76627
diff changeset
3469
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3470 #ifdef DOS_NT
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3471 #ifdef WINDOWSNT
83883
cbc88cef4fca (init_tty) [WINDOWSNT]: Pass terminal to
Jason Rumney <jasonr@gnu.org>
parents: 83875
diff changeset
3472 initialize_w32_display (terminal);
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3473 #else /* MSDOS */
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3474 if (strcmp (terminal_type, "internal") == 0)
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3475 terminal->type = output_msdos_raw;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3476 initialize_msdos_display (terminal);
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3477 #endif /* MSDOS */
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3478 tty->output = stdout;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3479 tty->input = stdin;
83889
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3480 /* The following two are inaccessible from w32console.c. */
100367
b6b22701e97c (tty_free_frame_resources): Renamed from delete_tty_output; all
Chong Yidong <cyd@stupidchicken.com>
parents: 100276
diff changeset
3481 terminal->delete_frame_hook = &tty_free_frame_resources;
83889
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3482 terminal->delete_terminal_hook = &delete_tty;
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3483
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3484 tty->name = xstrdup (name);
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3485 terminal->name = xstrdup (name);
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3486 tty->type = xstrdup (terminal_type);
83616
b78afd4acd43 * term.c (init_tty): Better initialize ttys in windows.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83582
diff changeset
3487
83889
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3488 add_keyboard_wait_descriptor (0);
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3489
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3490 Wcm_clear (tty);
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3491
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3492 #ifdef WINDOWSNT
83582
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3493 {
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3494 struct frame *f = XFRAME (selected_frame);
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3495
83889
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3496 FrameRows (tty) = FRAME_LINES (f);
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3497 FrameCols (tty) = FRAME_COLS (f);
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3498 tty->specified_window = FRAME_LINES (f);
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3499
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3500 FRAME_CAN_HAVE_SCROLL_BARS (f) = 0;
2855c55ba18b (init_tty) [WINDOWSNT]: Add hooks that are not accessible
Jason Rumney <jasonr@gnu.org>
parents: 83883
diff changeset
3501 FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none;
83582
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3502 }
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3503 #else /* MSDOS */
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3504 {
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3505 int height, width;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3506 get_tty_size (fileno (tty->input), &width, &height);
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3507 FrameCols (tty) = width;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3508 FrameRows (tty) = height;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3509 }
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3510 #endif /* MSDOS */
83582
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3511 tty->delete_in_insert_mode = 1;
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3512
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3513 UseTabs (tty) = 0;
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3514 terminal->scroll_region_ok = 0;
83342
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
3515
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
3516 /* Seems to insert lines when it's not supposed to, messing up the
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3517 display. In doing a trace, it didn't seem to be called much, so I
83342
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
3518 don't think we're losing anything by turning it off. */
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3519 terminal->line_ins_del_ok = 0;
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3520 #ifdef WINDOWSNT
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3521 terminal->char_ins_del_ok = 1;
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3522 baud_rate = 19200;
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3523 #else /* MSDOS */
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3524 terminal->char_ins_del_ok = 0;
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3525 init_baud_rate (fileno (tty->input));
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3526 #endif /* MSDOS */
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3527
83582
a6ca8e4443e4 (dissociate_if_controlling_tty) [WINDOWSNT]: Don't define function body.
Jason Rumney <jasonr@gnu.org>
parents: 83560
diff changeset
3528 tty->TN_max_colors = 16; /* Required to be non-zero for tty-display-color-p */
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3529
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3530 #else /* not DOS_NT */
9797
05d9072c5a38 (term_init) [WINDOWSNT]: Do some Windows-specific
Richard M. Stallman <rms@gnu.org>
parents: 9658
diff changeset
3531
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3532 Wcm_clear (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3533
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3534 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
3535
83086
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3536 /* 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
3537 terminal. */
347ce3d5d79c Fix dropping of the controlling tty on Solaris (Dan Nicolaescu).
Karoly Lorentey <lorentey@elte.hu>
parents: 83082
diff changeset
3538 sigblock (sigmask (SIGTTOU));
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3539 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
3540 sigunblock (sigmask (SIGTTOU));
84779
67e430e38471 (DEV_TTY): New macro. Provide a definition for MS-Windows.
Eli Zaretskii <eliz@gnu.org>
parents: 84769
diff changeset
3541
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3542 if (status < 0)
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3543 {
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3544 #ifdef TERMINFO
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3545 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
3546 "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
3547 "Cannot open terminfo database file");
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3548 #else
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3549 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
3550 "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
3551 "Cannot open termcap database file");
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3552 #endif
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3553 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3554 if (status == 0)
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3555 {
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3556 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
3557 "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
3558 "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
3559 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
3560 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
3561 `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
3562 #ifdef TERMINFO
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
3563 "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
3564 #else
107847
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
3565 "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
3566 #endif
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3567 terminal_type);
10824
894369e950f5 (term_init) [TERMINFO]: Make error message more accurate.
Karl Heuer <kwzh@gnu.org>
parents: 10771
diff changeset
3568 }
52265
84e49afb2178 (term_init): Use a buffer of size 4096 for tgetent since
Richard M. Stallman <rms@gnu.org>
parents: 51212
diff changeset
3569
52294
d9ae4cdf1ed1 (term_init): Fix previous change
Kenichi Handa <handa@m17n.org>
parents: 52293
diff changeset
3570 #ifndef TERMINFO
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3571 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
3572 abort ();
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3573 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
3574 #endif
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3575 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
3576 tty->TS_ins_line = tgetstr ("al", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3577 tty->TS_ins_multi_lines = tgetstr ("AL", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3578 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
3579 BackTab (tty) = tgetstr ("bt", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3580 tty->TS_clr_to_bottom = tgetstr ("cd", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3581 tty->TS_clr_line = tgetstr ("ce", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3582 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
3583 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
3584 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
3585 CR (tty) = tgetstr ("cr", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3586 tty->TS_set_scroll_region = tgetstr ("cs", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3587 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
3588 RowPosition (tty) = tgetstr ("cv", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3589 tty->TS_del_char = tgetstr ("dc", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3590 tty->TS_del_multi_chars = tgetstr ("DC", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3591 tty->TS_del_line = tgetstr ("dl", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3592 tty->TS_del_multi_lines = tgetstr ("DL", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3593 tty->TS_delete_mode = tgetstr ("dm", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3594 tty->TS_end_delete_mode = tgetstr ("ed", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3595 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
3596 Home (tty) = tgetstr ("ho", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3597 tty->TS_ins_char = tgetstr ("ic", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3598 tty->TS_ins_multi_chars = tgetstr ("IC", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3599 tty->TS_insert_mode = tgetstr ("im", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3600 tty->TS_pad_inserted_char = tgetstr ("ip", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3601 tty->TS_end_keypad_mode = tgetstr ("ke", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3602 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
3603 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
3604 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
3605 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
3606 if (!Down (tty))
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3607 Down (tty) = tgetstr ("nl", address); /* Obsolete name for "do" */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3608 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
3609 Left (tty) = "\b"; /* can't possibly be longer! */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3610 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
3611 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
3612 if (!Left (tty))
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3613 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
3614 tty->TS_pad_char = tgetstr ("pc", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3615 tty->TS_repeat = tgetstr ("rp", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3616 tty->TS_end_standout_mode = tgetstr ("se", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3617 tty->TS_fwd_scroll = tgetstr ("sf", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3618 tty->TS_standout_mode = tgetstr ("so", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3619 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
3620 tty->Wcm->cm_tab = tgetstr ("ta", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3621 tty->TS_end_termcap_modes = tgetstr ("te", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3622 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
3623 Up (tty) = tgetstr ("up", address);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3624 tty->TS_visible_bell = tgetstr ("vb", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3625 tty->TS_cursor_normal = tgetstr ("ve", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3626 tty->TS_cursor_visible = tgetstr ("vs", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3627 tty->TS_cursor_invisible = tgetstr ("vi", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3628 tty->TS_set_window = tgetstr ("wi", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3629
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3630 tty->TS_enter_underline_mode = tgetstr ("us", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3631 tty->TS_exit_underline_mode = tgetstr ("ue", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3632 tty->TS_enter_bold_mode = tgetstr ("md", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3633 tty->TS_enter_dim_mode = tgetstr ("mh", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3634 tty->TS_enter_blink_mode = tgetstr ("mb", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3635 tty->TS_enter_reverse_mode = tgetstr ("mr", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3636 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
3637 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
3638 tty->TS_exit_attribute_mode = tgetstr ("me", address);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
3639
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3640 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
3641 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
3642 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
3643 MultiRight (tty) = tgetstr ("RI", address);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3644
26425
08c26156186a (term_init): If "op" isn't available, don't support color
Gerd Moellmann <gerd@gnu.org>
parents: 25727
diff changeset
3645 /* 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
3646 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
3647 background. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3648 tty->TS_orig_pair = tgetstr ("op", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3649 if (tty->TS_orig_pair)
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3650 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3651 tty->TS_set_foreground = tgetstr ("AF", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3652 tty->TS_set_background = tgetstr ("AB", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3653 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
3654 {
08c26156186a (term_init): If "op" isn't available, don't support color
Gerd Moellmann <gerd@gnu.org>
parents: 25727
diff changeset
3655 /* SVr4. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3656 tty->TS_set_foreground = tgetstr ("Sf", address);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3657 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
3658 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
3659
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3660 tty->TN_max_colors = tgetnum ("Co");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3661 tty->TN_max_pairs = tgetnum ("pa");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3662
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3663 tty->TN_no_color_video = tgetnum ("NC");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3664 if (tty->TN_no_color_video == -1)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3665 tty->TN_no_color_video = 0;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3666 }
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
3667
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3668 tty_default_color_capabilities (tty, 1);
42742
73fcf65b58d3 (tty_default_color_capabilities, tty_setup_colors)
Eli Zaretskii <eliz@gnu.org>
parents: 42122
diff changeset
3669
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3670 MagicWrap (tty) = tgetflag ("xn");
11530
a265aaa699e0 (term_init): MagicWrap implies AutoWrap.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
3671 /* 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
3672 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
3673 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
3674 terminal->memory_below_frame = tgetflag ("db");
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3675 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
3676 terminal->must_write_spaces = tgetflag ("in");
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3677 tty->meta_key = tgetflag ("km") || tgetflag ("MT");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3678 tty->TF_insmode_motion = tgetflag ("mi");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3679 tty->TF_standout_motion = tgetflag ("ms");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3680 tty->TF_underscore = tgetflag ("ul");
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3681 tty->TF_teleray = tgetflag ("xt");
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3682
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3683 #endif /* !DOS_NT */
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3684 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
3685 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
3686 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
3687 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
3688 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
3689 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
3690 /* 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
3691 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
3692 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
3693 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
3694 current_kboard = terminal->kboard;
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3695 #ifndef DOS_NT
83619
5da6a46ddbd6 * s/darwin.h (SYSTEM_PURESIZE_EXTRA): Define here.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83616
diff changeset
3696 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
3697
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
3698 /* 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
3699 {
4c74d7f1cfa6 (term_init): Avoid type-mismatch calling get_frame_size.
Richard M. Stallman <rms@gnu.org>
parents: 15974
diff changeset
3700 int height, width;
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
3701 get_tty_size (fileno (tty->input), &width, &height);
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3702 FrameCols (tty) = width;
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3703 FrameRows (tty) = height;
16093
4c74d7f1cfa6 (term_init): Avoid type-mismatch calling get_frame_size.
Richard M. Stallman <rms@gnu.org>
parents: 15974
diff changeset
3704 }
4c74d7f1cfa6 (term_init): Avoid type-mismatch calling get_frame_size.
Richard M. Stallman <rms@gnu.org>
parents: 15974
diff changeset
3705
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3706 if (FrameCols (tty) <= 0)
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3707 FrameCols (tty) = tgetnum ("co");
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3708 if (FrameRows (tty) <= 0)
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3709 FrameRows (tty) = tgetnum ("li");
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3710
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3711 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
3712 maybe_fatal (must_succeed, terminal,
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3713 "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
3714 "Screen size %dx%d is too small",
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3715 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
3716
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3717 TabWidth (tty) = tgetnum ("tw");
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3718
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3719 if (!tty->TS_bell)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3720 tty->TS_bell = "\07";
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3721
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3722 if (!tty->TS_fwd_scroll)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3723 tty->TS_fwd_scroll = Down (tty);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3724
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3725 PC = tty->TS_pad_char ? *tty->TS_pad_char : 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3726
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3727 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
3728 TabWidth (tty) = 8;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46559
diff changeset
3729
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3730 /* Turned off since /etc/termcap seems to have :ta= for most terminals
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3731 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
3732 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
3733 tty->Wcm->cm_tab = "\t";
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3734 */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3735
40086
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3736 /* 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
3737 turn off any that do. */
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3738 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
3739 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3740 tty->TS_standout_mode = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3741 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
3742 }
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3743 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
3744 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3745 tty->TS_enter_underline_mode = 0;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3746 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
3747 }
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3748
050b19294988 (TN_standout_width, TF_xs, TN_magic_cookie_glitch_ul): Variables removed.
Miles Bader <miles@gnu.org>
parents: 40081
diff changeset
3749 /* 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
3750 if (tty->TS_standout_mode == 0)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3751 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3752 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
3753 tty->TS_end_standout_mode = tty->TS_exit_underline_mode;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3754 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3755
5933
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3756 /* 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
3757 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
3758 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
3759 {
8612
86065bec6fc9 (term_init): Added missing argument to tgetstr.
Richard M. Stallman <rms@gnu.org>
parents: 8027
diff changeset
3760 char *s = tgetstr ("me", address);
5933
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3761 if (s != 0)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3762 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
3763 else
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3764 tty->TS_standout_mode = 0;
5933
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3765 }
560cee2048ed (term_init): If no `se', use `me';
Richard M. Stallman <rms@gnu.org>
parents: 5648
diff changeset
3766
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3767 if (tty->TF_teleray)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3768 {
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3769 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
3770 /* 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
3771 tty->TS_standout_mode = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3772 /* 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
3773 CR (tty) = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3774 /* LF can't be trusted either -- can alter hpos */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3775 /* 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
3776 Down (tty) = 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3777 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3778
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3779 /* Special handling for certain terminal types known to need it */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3780
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3781 if (!strcmp (terminal_type, "supdup"))
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3782 {
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 = 1;
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3784 tty->Wcm->cm_losewrap = 1;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3785 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3786 if (!strncmp (terminal_type, "c10", 3)
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3787 || !strcmp (terminal_type, "perq"))
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3788 {
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3789 /* Supply a makeshift :wi string.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3790 This string is not valid in general since it works only
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3791 for windows starting at the upper left corner;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3792 but that is all Emacs uses.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3793
765
e4093444f9f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
3794 This string works only if the frame is using
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3795 the top of the video memory, because addressing is memory-relative.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3796 So first check the :ti string to see if that is true.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3797
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3798 It would be simpler if the :wi string could go in the termcap
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3799 entry, but it can't because it is not fully valid.
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3800 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
3801 if (!tty->TS_set_window)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3802 {
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3803 p = tty->TS_termcap_modes;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3804 while (*p && strcmp (p, "\033v "))
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3805 p++;
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3806 if (*p)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3807 tty->TS_set_window = "\033v%C %C %C %C ";
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3808 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3809 /* 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
3810 terminal->must_write_spaces = 1;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3811 /* :ti string typically fails to have \E^G! in it */
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3812 /* 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
3813 strcpy (area, tty->TS_termcap_modes);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3814 strcat (area, "\033\007!");
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3815 tty->TS_termcap_modes = area;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3816 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
3817 p = AbsPosition (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3818 /* Change all %+ parameters to %C, to handle
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3819 values above 96 correctly for the C100. */
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3820 while (*p)
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3821 {
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3822 if (p[0] == '%' && p[1] == '+')
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3823 p[1] = 'C';
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3824 p++;
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3825 }
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3826 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3827
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3828 tty->specified_window = FrameRows (tty);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3829
53232
22aaf1e5fbe6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents: 53229
diff changeset
3830 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
3831 {
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
3832 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
3833 "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
3834 "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
3835 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
3836 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
3837 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
3838 `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
3839 # ifdef TERMINFO
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
3840 "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
3841 # else /* TERMCAP */
107847
e81bca2fba28 (init_tty): Move common text outside of #ifdef TERMINFO.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 107640
diff changeset
3842 "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
3843 # endif /* TERMINFO */
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3844 terminal_type);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3845 }
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3846
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3847 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
3848 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
3849 "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
3850 "Could not determine the frame size");
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3851
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3852 tty->delete_in_insert_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3853 = tty->TS_delete_mode && tty->TS_insert_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3854 && !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
3855
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3856 tty->se_is_so = (tty->TS_standout_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3857 && tty->TS_end_standout_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3858 && !strcmp (tty->TS_standout_mode, tty->TS_end_standout_mode));
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3859
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
3860 UseTabs (tty) = tabs_safe_p (fileno (tty->input)) && TabWidth (tty) == 8;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3861
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3862 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
3863 = (tty->Wcm->cm_abs
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3864 && (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
3865
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3866 terminal->line_ins_del_ok
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3867 = (((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
3868 && (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
3869 || (terminal->scroll_region_ok
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3870 && tty->TS_fwd_scroll && tty->TS_rev_scroll));
53226
dd3018b4785b Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents: 53225
diff changeset
3871
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3872 terminal->char_ins_del_ok
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3873 = ((tty->TS_ins_char || tty->TS_insert_mode
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3874 || 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
3875 && (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
3876
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3877 terminal->fast_clear_end_of_line = tty->TS_clr_line != 0;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3878
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
3879 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
3880
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
3881 #endif /* not DOS_NT */
84849
ba20cee1aec0 (init_tty): Call init_sys_modes on WINDOWSNT also.
Jason Rumney <jasonr@gnu.org>
parents: 84779
diff changeset
3882
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3883 /* Init system terminal modes (RAW or CBREAK, etc.). */
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3884 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
3885
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3886 return terminal;
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3887 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3888
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3889
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3890 static void
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3891 vfatal (const char *str, va_list ap)
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3892 {
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3893 fprintf (stderr, "emacs: ");
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3894 vfprintf (stderr, str, ap);
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3895 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
3896 fprintf (stderr, "\n");
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3897 va_end (ap);
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3898 fflush (stderr);
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3899 exit (1);
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3900 }
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3901
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3902
83341
76e51706154e Rename term_init to init_tty.
Karoly Lorentey <lorentey@elte.hu>
parents: 83338
diff changeset
3903 /* 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
3904 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
3905 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
3906
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3907 static void
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3908 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
3909 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
3910 {
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3911 va_list ap;
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3912 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
3913 if (terminal)
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3914 delete_tty (terminal);
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
3915
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3916 if (must_succeed)
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3917 vfatal (str2, ap);
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3918 else
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3919 verror (str1, ap);
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3920
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3921 va_end (ap);
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3922 abort ();
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3923 }
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3924
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
3925 void
86288
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
3926 fatal (const char *str, ...)
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3927 {
86288
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
3928 va_list ap;
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
3929 va_start (ap, str);
109375
3e07e13fe30a Convert maybe_fatal to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109179
diff changeset
3930 vfatal (str, ap);
86288
145903731829 * term.c: Include stdarg.h.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 85614
diff changeset
3931 va_end (ap);
253
96e7be36ffe5 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3932 }
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
3933
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3934
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3935
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3936 /* Delete 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
3937
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
3938 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
3939 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
3940 {
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3941 struct tty_display_info *tty;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
3942
100666
dab9cf44bf3f In comments, write delete_frame instead of Fdelete_frame.
Martin Rudalics <rudalics@gmx.at>
parents: 100370
diff changeset
3943 /* 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
3944 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
3945 if (!terminal->name)
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3946 return;
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3947
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3948 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
3949 abort ();
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3950
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3951 tty = terminal->display_info.tty;
92281
4bf10a5a835d (encode_terminal_code, produce_special_glyphs): Likewise.
Kim F. Storm <storm@cua.dk>
parents: 92237
diff changeset
3952
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3953 if (tty == tty_list)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3954 tty_list = tty->next;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3955 else
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3956 {
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
3957 struct tty_display_info *p;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3958 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
3959 ;
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3960
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3961 if (! p)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3962 /* This should not happen. */
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3963 abort ();
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3964
53341
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3965 p->next = tty->next;
d4e6a050c9b1 Bugfix festival.
Karoly Lorentey <lorentey@elte.hu>
parents: 53340
diff changeset
3966 tty->next = 0;
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3967 }
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3968
83342
9216636c02fc Rename `struct display' to `struct device'. Update function, parameter and variable names accordingly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83341
diff changeset
3969 /* 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
3970 before delete_terminal. */
83008
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3971 reset_sys_modes (tty);
040dd41ed7d0 Hookified termcap devices, added bootstrap display device, plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 83004
diff changeset
3972
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83420
diff changeset
3973 delete_terminal (terminal);
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3974
95481
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
3975 xfree (tty->name);
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
3976 xfree (tty->type);
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3977
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3978 if (tty->input)
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3979 {
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3980 delete_keyboard_wait_descriptor (fileno (tty->input));
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3981 if (tty->input != stdin)
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3982 fclose (tty->input);
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3983 }
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
3984 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
3985 fclose (tty->output);
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3986 if (tty->termscript)
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
3987 fclose (tty->termscript);
82990
2ecd1f669db9 Fixed X support, preliminary support for X-tty combo sessions.
Karoly Lorentey <lorentey@elte.hu>
parents: 82989
diff changeset
3988
95481
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 94963
diff changeset
3989 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
3990 xfree (tty->Wcm);
103624
3e06f0e66062 Remove useless if-before-xfree tests.
Jim Meyering <jim@meyering.net>
parents: 103617
diff changeset
3991 xfree (tty->termcap_strings_buffer);
3e06f0e66062 Remove useless if-before-xfree tests.
Jim Meyering <jim@meyering.net>
parents: 103617
diff changeset
3992 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
3993
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109144
diff changeset
3994 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
3995 xfree (tty);
63549
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
3996 }
bda22724fc82 (produce_special_glyphs): Use spec_glyph_lookup_face.
Richard M. Stallman <rms@gnu.org>
parents: 61591
diff changeset
3997
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3998
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
3999
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
4000 /* 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
4001 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
4002
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4003 void
83420
521d3f18b3d1 Reimplement terminal parameters in C; clean up term.c, create terminal.c.
Karoly Lorentey <lorentey@elte.hu>
parents: 83416
diff changeset
4004 mark_ttys (void)
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4005 {
82989
f3845715a5f6 Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents: 82988
diff changeset
4006 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
4007
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4008 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
4009 mark_object (tty->top_frame);
53233
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4010 }
fe9b37bee5f7 Fully eliminated global tty state variables.
Karoly Lorentey <lorentey@elte.hu>
parents: 53232
diff changeset
4011
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
4012
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 82995
diff changeset
4013
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 20711
diff changeset
4014 void
109144
7dceae91724c Convert most remaining function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents: 109108
diff changeset
4015 syms_of_term (void)
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4016 {
39988
eac4e9ae201c Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents: 39914
diff changeset
4017 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
4018 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
4019 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
4020 #ifdef TERMINFO
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4021 system_uses_terminfo = 1;
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4022 #else
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4023 system_uses_terminfo = 0;
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4024 #endif
15974
61249a8fe735 (Vring_bell_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 15094
diff changeset
4025
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4026 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
4027 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
4028 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
4029 See `suspend-tty'. */);
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4030 Vsuspend_tty_functions = Qnil;
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4031
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4032
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4033 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
4034 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
4035 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
4036 See `resume-tty'. */);
83891
dab32bc3edc8 * server.el (server-start, server-unload-hook): Undo previous
Dan Nicolaescu <dann@ics.uci.edu>
parents: 83889
diff changeset
4037 Vresume_tty_functions = Qnil;
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
4038
67935
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4039 DEFVAR_BOOL ("visible-cursor", &visible_cursor,
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4040 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
4041 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
4042 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
4043 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
4044 visible_cursor = 1;
52bbc53dbce1 (visible_cursor): New boolean var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 66238
diff changeset
4045
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
4046 defsubr (&Stty_display_color_p);
42954
e514d4931d6f (Ftty_display_color_cells): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 42808
diff changeset
4047 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
4048 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
4049 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
4050 defsubr (&Scontrolling_tty_p);
83065
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
4051 defsubr (&Ssuspend_tty);
a871be7b26a5 Implemented suspending of emacsclient frames.
Karoly Lorentey <lorentey@elte.hu>
parents: 83050
diff changeset
4052 defsubr (&Sresume_tty);
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
4053 #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
4054 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
4055 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
4056
85eb2660cbe3 (mouse_face_window): Rename from Qmouse_face_window. Update all users.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84955
diff changeset
4057 staticpro (&mouse_face_window);
80994
62b6aa7f8c37 Use HAVE_GPM instead of HAVE_GPM_H.
Nick Roberts <nickrob@snap.net.nz>
parents: 80979
diff changeset
4058 #endif /* HAVE_GPM */
97021
fb376eec83a9 (syms_of_term): Initialize default_orig_pair, default_set_foreground,
Chong Yidong <cyd@stupidchicken.com>
parents: 96303
diff changeset
4059
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
4060 #ifndef DOS_NT
97021
fb376eec83a9 (syms_of_term): Initialize default_orig_pair, default_set_foreground,
Chong Yidong <cyd@stupidchicken.com>
parents: 96303
diff changeset
4061 default_orig_pair = NULL;
fb376eec83a9 (syms_of_term): Initialize default_orig_pair, default_set_foreground,
Chong Yidong <cyd@stupidchicken.com>
parents: 96303
diff changeset
4062 default_set_foreground = NULL;
fb376eec83a9 (syms_of_term): Initialize default_orig_pair, default_set_foreground,
Chong Yidong <cyd@stupidchicken.com>
parents: 96303
diff changeset
4063 default_set_background = NULL;
97658
53d01aafa957 [MSDOS]: Include msdos.h.
Eli Zaretskii <eliz@gnu.org>
parents: 97142
diff changeset
4064 #endif /* !DOS_NT */
100276
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
4065
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
4066 encode_terminal_src = NULL;
8f4457a692c5 (encode_terminal_code): Free any previous memory blocks
Chong Yidong <cyd@stupidchicken.com>
parents: 98367
diff changeset
4067 encode_terminal_dst = NULL;
6752
f9236145bad7 (system_uses_terminfo): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 6652
diff changeset
4068 }
25002
28d5af43eeb6 Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 24431
diff changeset
4069
82988
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4070
f82e3a6f5ccb A few more bugfixes and new features.
Karoly Lorentey <lorentey@elte.hu>
parents: 82987
diff changeset
4071
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52314
diff changeset
4072 /* arch-tag: 498e7449-6f2e-45e2-91dd-b7d4ca488193
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52314
diff changeset
4073 (do not change this comment) */