Mercurial > emacs
annotate lib-src/emacstool.c @ 69215:ef5cd9601f14
(mh-folder-list): Fix problem with passing in a folder and getting
nothing back. Fix problem with passing in empty string and getting the
entire filesystem (or infinite loop). Don't append slash to folder.
These fixes fix problems observed with the pick search. Thanks to
Thomas Baumann for the help (closes SF #1435381).
author | Bill Wohler <wohler@newt.com> |
---|---|
date | Tue, 28 Feb 2006 23:54:53 +0000 |
parents | 3661e9b3c48f |
children | 6d19c76d81c5 c5406394f567 |
rev | line source |
---|---|
36 | 1 /* |
64769
6358e3c6075c
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64083
diff
changeset
|
2 Copyright (C) 1986, 1988, 1990, 1991, 2002, 2003, 2004, |
68647
3661e9b3c48f
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64769
diff
changeset
|
3 2005, 2006 Free Software Foundation, Inc. |
6112
ecaa966abd06
*** empty log message ***
David J. MacKenzie <djm@gnu.org>
parents:
6111
diff
changeset
|
4 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5 This file is part of GNU Emacs. |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
6 |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
7 GNU Emacs is free software; you can redistribute it and/or modify |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
8 it under the terms of the GNU General Public License as published by |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
9 the Free Software Foundation; either version 2, or (at your option) |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
10 any later version. |
6111 | 11 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
12 GNU Emacs is distributed in the hope that it will be useful, |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
15 GNU General Public License for more details. |
6111 | 16 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
18 along with GNU Emacs; see the file COPYING. If not, write to |
64083 | 19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
20 Boston, MA 02110-1301, USA. */ | |
6111 | 21 |
22 /* | |
287 | 23 * For Emacs in SunView/Sun-Windows: (supported by Sun Unix v3.2 or greater) |
42180 | 24 * Insert a notifier filter-function to convert all useful input |
36 | 25 * to "key" sequences that emacs can understand. See: Emacstool(1). |
26 * | |
287 | 27 * Author: Jeff Peck, Sun Microsystems, Inc. <peck@eng.sun.com> |
36 | 28 * |
29 * Original Idea: Ian Batten | |
30 * Updated 15-Mar-88, Jeff Peck: set IN_EMACSTOOL, TERM, TERMCAP | |
287 | 31 * Updated 10-Sep-88, Jeff Peck: add XVIEW and JLE support |
32 * Updated 8-Oct-90, Jeff Peck: add Meta-bit for Xview | |
33 * Updated 6-Mar-91, Jeff Peck: Hack to detect -Wt invocation | |
34 * [note, TTYSW limitation means you must Click-To-Type in Openwin] | |
35 * [fixed in OW3 or use local/tty.o] | |
36 * for better results, this should move to using TERMSW. | |
37 * Updated 10-Mar-91, Jeff Peck, et al: support for TERMSW (TTERM) | |
38 * allows point-to-type even in OW2 | |
39 * | |
40 * [note: xvetool should be started with the "-nw" flag for emacs!] | |
36 | 41 */ |
42 | |
287 | 43 #ifdef XVIEW |
44 #include <xview/xview.h> | |
45 #include <xview/panel.h> | |
46 #include <xview/attr.h> | |
47 #include <xview/tty.h> | |
48 #include <xview/ttysw.h> /* private defines */ | |
49 #include <xview/termsw.h> /* -DTTERM */ | |
50 #include <xview/font.h> /* for testing */ | |
51 #else | |
36 | 52 #include <suntool/sunview.h> |
53 #include <suntool/tty.h> | |
287 | 54 #include <suntool/ttysw.h> |
55 #endif XVIEW | |
56 | |
57 #ifdef JLE | |
58 # include <locale.h> | |
59 #endif JLE | |
60 | |
36 | 61 #include <stdio.h> |
62 #include <sys/file.h> | |
63 | |
64 #define BUFFER_SIZE 128 /* Size of all the buffers */ | |
65 | |
66 /* define WANT_CAPS_LOCK to make f-key T1 (aka F1) behave as CapsLock */ | |
67 #define WANT_CAPS_LOCK | |
68 #ifdef WANT_CAPS_LOCK | |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
287
diff
changeset
|
69 int caps_lock; /* toggle indicator for f-key T1 caps lock */ |
36 | 70 static char *Caps = "[CAPS] "; /* Caps Lock prefix string */ |
71 #define CAPS_LEN 7 /* strlen (Caps) */ | |
72 #endif | |
73 | |
74 static char *mouse_prefix = "\030\000"; /* C-x C-@ */ | |
75 static int m_prefix_length = 2; /* mouse_prefix length */ | |
76 | |
77 static char *key_prefix = "\030*"; /* C-x * */ | |
78 static int k_prefix_length = 2; /* key_prefix length */ | |
79 | |
287 | 80 #ifdef JLE |
81 static char *emacs_name = "nemacs"; /* default run command */ | |
82 static char *title = "NEmacstool - "; /* initial title */ | |
83 #else | |
36 | 84 static char *emacs_name = "emacs"; /* default run command */ |
287 | 85 static char *title = "Emacstool - "; /* initial title */ |
86 #endif JLE | |
87 | |
36 | 88 static char buffer[BUFFER_SIZE]; /* send to ttysw_input */ |
287 | 89 static char *bold_name = 0; /* for -bold option */ |
36 | 90 |
91 Frame frame; /* Base frame for system */ | |
287 | 92 |
93 #ifndef TTERM | |
94 #define SWTYPE TTY | |
95 Tty tty_win; /* Where emacs is reading */ | |
96 #else | |
97 #define SWTYPE TERMSW | |
98 Termsw tty_win; /* Termsw does follow-mouse */ | |
99 #endif TTERM | |
100 | |
101 #ifdef XVIEW | |
102 Xv_Window tty_view; /* Where the events are in Xview*/ | |
103 #else | |
104 Tty tty_view; /* SunView place filler */ | |
105 #endif XVIEW | |
106 | |
36 | 107 int font_width, font_height; /* For translating pixels to chars */ |
287 | 108 int left_margin = 0; /* default window -- frame offset */ |
36 | 109 |
110 int console_fd = 0; /* for debugging: setenv DEBUGEMACSTOOL */ | |
111 FILE *console; /* for debugging: setenv DEBUGEMACSTOOL */ | |
112 | |
113 Icon frame_icon; | |
114 /* make an icon_image for the default frame_icon */ | |
42180 | 115 static short default_image[258] = |
36 | 116 { |
117 #include <images/terminal.icon> | |
118 }; | |
119 mpr_static(icon_image, 64, 64, 1, default_image); | |
120 | |
121 /* | |
122 * Assign a value to a set of keys | |
123 */ | |
124 int | |
125 button_value (event) | |
126 Event *event; | |
127 { | |
128 int retval = 0; | |
129 /* | |
130 * Code up the current situation: | |
131 * | |
132 * 1 = MS_LEFT; | |
133 * 2 = MS_MIDDLE; | |
134 * 4 = MS_RIGHT; | |
135 * 8 = SHIFT; | |
136 * 16 = CONTROL; | |
137 * 32 = META; | |
138 * 64 = DOUBLE; | |
139 * 128 = UP; | |
140 */ | |
141 | |
142 if (MS_LEFT == (event_id (event))) retval = 1; | |
143 if (MS_MIDDLE == (event_id (event))) retval = 2; | |
144 if (MS_RIGHT == (event_id (event))) retval = 4; | |
145 | |
146 if (event_shift_is_down (event)) retval += 8; | |
147 if (event_ctrl_is_down (event)) retval += 16; | |
148 if (event_meta_is_down (event)) retval += 32; | |
149 if (event_is_up (event)) retval += 128; | |
150 return retval; | |
151 } | |
152 | |
153 /* | |
154 * Variables to store the time of the previous mouse event that was | |
155 * sent to emacs. | |
156 * | |
14036 | 157 * The theory is that to time double clicks while ignoring UP buttons, |
36 | 158 * we must keep track of the accumulated time. |
159 * | |
160 * If someone writes a SUN-SET-INPUT-MASK for emacstool, | |
42180 | 161 * That could be used to selectively disable UP events, |
36 | 162 * and then this cruft wouldn't be necessary. |
163 */ | |
164 static long prev_event_sec = 0; | |
165 static long prev_event_usec = 0; | |
166 | |
167 /* | |
168 * Give the time difference in milliseconds, where one second | |
169 * is considered infinite. | |
170 */ | |
171 int | |
172 time_delta (now_sec, now_usec, prev_sec, prev_usec) | |
173 long now_sec, now_usec, prev_sec, prev_usec; | |
174 { | |
175 long sec_delta = now_sec - prev_sec; | |
176 long usec_delta = now_usec - prev_usec; | |
42180 | 177 |
36 | 178 if (usec_delta < 0) { /* "borrow" a second */ |
179 usec_delta += 1000000; | |
180 --sec_delta; | |
181 } | |
42180 | 182 |
183 if (sec_delta >= 10) | |
36 | 184 return (9999); /* Infinity */ |
185 else | |
186 return ((sec_delta * 1000) + (usec_delta / 1000)); | |
187 } | |
188 | |
189 | |
190 /* | |
191 * Filter function to translate selected input events for emacs | |
192 * Mouse button events become ^X^@(button x-col y-line time-delta) . | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
42411
diff
changeset
|
193 * Function keys: ESC-*{c}{lrt} l,r,t for Left, Right, Top; |
36 | 194 * {c} encodes the keynumber as a character [a-o] |
195 */ | |
196 static Notify_value | |
197 input_event_filter_function (window, event, arg, type) | |
287 | 198 #ifdef XVIEW |
199 Xv_Window window; | |
200 #else | |
36 | 201 Window window; |
287 | 202 #endif XVIEW |
36 | 203 Event *event; |
204 Notify_arg arg; | |
205 Notify_event_type type; | |
206 { | |
207 struct timeval time_stamp; | |
208 | |
209 if (console_fd) fprintf(console, "Event: %d\n", event_id(event)); | |
210 | |
211 /* UP L1 is the STOP key */ | |
212 if (event_id(event) == WIN_STOP) { | |
287 | 213 ttysw_input(tty_win, "\007\007\007\007\007\007\007", 7); |
36 | 214 return NOTIFY_IGNORED; |
215 } | |
216 | |
217 /* UP L5 & L7 is Expose & Open, let them pass to sunview */ | |
218 if (event_id(event) == KEY_LEFT(5) || event_id(event) == KEY_LEFT(7)) | |
42180 | 219 if(event_is_up (event)) |
36 | 220 return notify_next_event_func (window, event, arg, type); |
221 else return NOTIFY_IGNORED; | |
222 | |
223 if (event_is_button (event)) { /* do Mouse Button events */ | |
224 /* Commented out so that we send mouse up events too. | |
42180 | 225 if (event_is_up (event)) |
36 | 226 return notify_next_event_func (window, event, arg, type); |
227 */ | |
228 time_stamp = event_time (event); | |
287 | 229 ttysw_input (tty_win, mouse_prefix, m_prefix_length); |
42180 | 230 sprintf (buffer, "(%d %d %d %d)\015", |
36 | 231 button_value (event), |
287 | 232 (event_x (event) - left_margin) / font_width, |
36 | 233 event_y (event) / font_height, |
234 time_delta (time_stamp.tv_sec, time_stamp.tv_usec, | |
235 prev_event_sec, prev_event_usec) | |
236 ); | |
287 | 237 ttysw_input (tty_win, buffer, strlen(buffer)); |
36 | 238 prev_event_sec = time_stamp.tv_sec; |
239 prev_event_usec = time_stamp.tv_usec; | |
240 return NOTIFY_IGNORED; | |
241 } | |
42180 | 242 |
36 | 243 { /* Do the function key events */ |
244 int d; | |
245 char c = (char) 0; | |
246 if ((event_is_key_left (event)) ? | |
42180 | 247 ((d = event_id(event) - KEY_LEFT(1) + 'a'), c='l') : |
36 | 248 ((event_is_key_right (event)) ? |
42180 | 249 ((d = event_id(event) - KEY_RIGHT(1) + 'a'), c='r') : |
36 | 250 ((event_is_key_top (event)) ? |
251 ((d = event_id(event) - KEY_TOP(1) + 'a'), c='t') : 0))) | |
252 { | |
253 if (event_is_up(event)) return NOTIFY_IGNORED; | |
254 if (event_shift_is_down (event)) c = c - 32; | |
255 /* this will give a non-{lrt} for unshifted keys */ | |
256 if (event_ctrl_is_down (event)) c = c - 64; | |
257 if (event_meta_is_down (event)) c = c + 128; | |
258 #ifdef WANT_CAPS_LOCK | |
259 /* set a toggle and relabel window so T1 can act like caps-lock */ | |
42180 | 260 if (event_id(event) == KEY_TOP(1)) |
36 | 261 { |
262 /* make a frame label with and without CAPS */ | |
42180 | 263 strcpy (buffer, Caps); |
36 | 264 title = &buffer[CAPS_LEN]; |
265 strncpy (title, (char *)window_get (frame, FRAME_LABEL), | |
266 BUFFER_SIZE - CAPS_LEN); | |
42180 | 267 buffer[BUFFER_SIZE] = (char) 0; |
36 | 268 if (strncmp (title, Caps, CAPS_LEN) == 0) |
269 title += CAPS_LEN; /* already Caps */ | |
270 caps_lock = (caps_lock ? 0 : CAPS_LEN); | |
271 window_set(frame, FRAME_LABEL, (title -= caps_lock), 0); | |
272 return NOTIFY_IGNORED; | |
273 } | |
274 #endif | |
287 | 275 ttysw_input (tty_win, key_prefix, k_prefix_length); |
36 | 276 sprintf (buffer, "%c%c", d, c); |
287 | 277 ttysw_input(tty_win, buffer, strlen(buffer)); |
36 | 278 |
279 return NOTIFY_IGNORED; | |
280 } | |
281 } | |
42180 | 282 if ((event_is_ascii(event) || event_is_meta(event)) |
36 | 283 && event_is_up(event)) return NOTIFY_IGNORED; |
284 #ifdef WANT_CAPS_LOCK | |
285 /* shift alpha chars to upper case if toggle is set */ | |
286 if ((caps_lock) && event_is_ascii(event) | |
287 && (event_id(event) >= 'a') && (event_id(event) <= 'z')) | |
288 event_set_id(event, (event_id(event) - 32)); | |
289 /* crufty, but it works for now. is there an UPCASE(event)? */ | |
290 #endif | |
287 | 291 #ifndef NO_META_BIT |
292 /* under Openwindows/X, the meta bit is not set in the key event, | |
293 * emacs expects this so we add it in here: | |
294 */ | |
295 if (event_is_ascii(event) && event_meta_is_down(event)) | |
296 event_set_id(event, 128 | event_id(event)); | |
297 #endif | |
36 | 298 return notify_next_event_func (window, event, arg, type); |
299 } | |
300 | |
301 main (argc, argv) | |
302 int argc; | |
303 char **argv; | |
304 { | |
305 int error_code; /* Error codes */ | |
42180 | 306 |
287 | 307 #ifdef JLE |
308 setlocale(LC_ALL, ""); | |
309 #endif JLE | |
310 | |
36 | 311 if(getenv("DEBUGEMACSTOOL")) |
312 console = fdopen (console_fd = open("/dev/console",O_WRONLY), "w"); | |
313 | |
314 putenv("IN_EMACSTOOL=t"); /* notify subprocess that it is in emacstool */ | |
315 | |
287 | 316 if (putenv("TERM=sun") != 0) /* TTY_WIN will be a TERM=sun window */ |
36 | 317 {fprintf (stderr, "%s: Could not set TERM=sun, using `%s'\n", |
318 argv[0], (char *)getenv("TERM")) ;}; | |
319 /* | |
320 * If TERMCAP starts with a slash, it is the pathname of the | |
321 * termcap file, not an entry extracted from it, so KEEP it! | |
322 * Otherwise, it may not relate to the new TERM, so Nuke-It. | |
323 * If there is no TERMCAP environment variable, don't make one. | |
324 */ | |
325 { | |
326 char *termcap ; /* Current TERMCAP value */ | |
327 termcap = (char *)getenv("TERMCAP") ; | |
328 if (termcap && (*termcap != '/')) | |
329 { | |
330 if (putenv("TERMCAP=") != 0) | |
331 {fprintf (stderr, "%s: Could not clear TERMCAP\n", argv[0]) ;} ; | |
332 } ; | |
333 } ; | |
42180 | 334 |
36 | 335 /* find command to run as subprocess in window */ |
287 | 336 if (!(argv[0] = (char *)getenv("EMACSTOOL"))) /* Set emacs command name */ |
42180 | 337 argv[0] = emacs_name; |
287 | 338 /* Emacstool recognizes two special args: -rc <file> and -bold <bold-name> */ |
36 | 339 for (argc = 1; argv[argc]; argc++) /* Use last one on line */ |
287 | 340 { |
341 if(!(strcmp ("-rc", argv[argc]))) /* Override if -rc given */ | |
342 {int i = argc; | |
343 argv[argc--]=0; /* kill the -rc argument */ | |
344 if (argv[i+1]) { /* move to argv[0] and squeeze the rest */ | |
345 argv[0]=argv[i+1]; | |
346 for (; argv[i+2]; (argv[i]=argv[i+2],argv[++i]=0)); | |
347 } | |
348 } | |
349 | |
42180 | 350 if (!(strcmp ("-bold", argv[argc]))) |
287 | 351 {int i = argc; |
352 argv[argc--]=0; /* kill the -bold argument */ | |
353 if (argv[i+1]) { /* move to bold_name and squeeze the rest */ | |
354 bold_name = argv[i+1]; | |
355 for (; argv[i+2]; (argv[i]=argv[i+2],argv[++i]=0)); | |
356 } | |
357 } | |
358 }; | |
36 | 359 |
360 strcpy (buffer, title); | |
361 strncat (buffer, argv[0], /* append run command name */ | |
362 (BUFFER_SIZE - (strlen (buffer)) - (strlen (argv[0]))) - 1); | |
363 | |
287 | 364 error_code = interpose_on_window(argc,argv); |
365 if (error_code != 0) { /* Barf */ | |
366 fprintf (stderr, "notify_interpose_event_func returns %d.\n", error_code); | |
367 exit (1); | |
368 } | |
369 | |
370 #ifdef XVIEW | |
371 xv_main_loop (frame); /* And away we go */ | |
372 #else | |
373 window_main_loop (frame); | |
374 #endif XVIEW | |
375 } | |
36 | 376 |
287 | 377 #ifdef XVIEW |
378 int interpose_on_window(argc,argv) | |
379 int argc; | |
380 char **argv; | |
381 { | |
382 #ifndef TTERM | |
14036 | 383 int i, font_width_adjust = 1; /* hackery, and heuristics */ |
287 | 384 /* if -Wt is not supplied, then font comes out as lucida-14 (width=8) |
385 * rather than the screen.r.12 (width=7) typically used | |
386 * this hack attempts to workaround it. | |
387 * could use a env var EMACSTOOL_DEFAULT_FONT_WIDTH instead */ | |
388 for (i = 1; argv[i]; i++) { | |
389 if (!(strcmp ("-Wt", argv[i]))) | |
390 {font_width_adjust = 0; | |
391 if (console_fd) fprintf(console, "-Wt = %d\n", font_width_adjust); | |
392 break;} | |
393 } | |
394 #endif TTERM | |
395 /* initialize Xview, and strip window args */ | |
396 xv_init(XV_INIT_ARGC_PTR_ARGV, &argc, argv, 0); | |
397 | |
398 /* do this first, so arglist can override it */ | |
399 frame_icon = icon_create (ICON_LABEL, "Emacstool", | |
400 ICON_IMAGE, &icon_image, | |
401 0); | |
402 | |
403 /* Build a frame to run in */ | |
404 frame = xv_create ((Xv_Window)NULL, FRAME, | |
405 FRAME_LABEL, buffer, | |
406 FRAME_ICON, frame_icon, | |
407 0); | |
408 | |
409 /* Create a tty with emacs in it */ | |
410 tty_win = xv_create (frame, SWTYPE, WIN_IS_CLIENT_PANE, | |
42180 | 411 TTY_QUIT_ON_CHILD_DEATH, TRUE, |
287 | 412 TTY_BOLDSTYLE, TTYSW_BOLD_INVERT, |
42180 | 413 TTY_ARGV, argv, |
36 | 414 0); |
415 | |
287 | 416 if (bold_name) { |
417 (void)xv_set(tty_win, TTY_BOLDSTYLE_NAME, bold_name, 0); | |
36 | 418 } |
419 | |
287 | 420 { |
421 Xv_font font; /* declare temp font variable */ | |
422 font = (Xv_font)xv_get (tty_win, XV_FONT); | |
423 font_height = (int)xv_get (font, FONT_DEFAULT_CHAR_HEIGHT); | |
424 font_width = (int)xv_get (font, FONT_DEFAULT_CHAR_WIDTH); | |
425 } | |
426 if (console_fd) fprintf(console, "Width = %d\n", font_width); | |
427 | |
428 #ifndef TTERM | |
429 font_width -= font_width_adjust; /* A guess! font bug in ttysw*/ | |
430 #else | |
431 /* make the termsw act as a tty */ | |
432 xv_set(tty_win, TERMSW_MODE, TTYSW_MODE_TYPE, 0); | |
433 /* termsw has variable offset depending on scrollbar size/location */ | |
434 left_margin = (int)xv_get (tty_win, TEXTSW_LEFT_MARGIN); | |
435 #endif TTERM | |
436 | |
437 tty_view = (Xv_Window) xv_get (tty_win, OPENWIN_NTH_VIEW, 0); | |
438 xv_set(tty_view, | |
42180 | 439 WIN_CONSUME_EVENTS, |
287 | 440 WIN_MOUSE_BUTTONS, WIN_UP_EVENTS, |
441 ACTION_ADJUST, ACTION_MENU, | |
42180 | 442 WIN_ASCII_EVENTS, |
287 | 443 WIN_LEFT_KEYS, WIN_TOP_KEYS, WIN_RIGHT_KEYS, |
444 0, | |
445 0); | |
446 /* Interpose my event function */ | |
42180 | 447 return (int) notify_interpose_event_func |
287 | 448 (tty_view, input_event_filter_function, NOTIFY_SAFE); |
36 | 449 } |
287 | 450 #else |
451 int interpose_on_window (argc, argv) | |
452 int argc; | |
453 char **argv; | |
454 { | |
455 /* do this first, so arglist can override it */ | |
456 frame_icon = icon_create (ICON_LABEL, "Emacstool", | |
457 ICON_IMAGE, &icon_image, | |
458 0); | |
459 | |
460 /* Build a frame to run in */ | |
461 frame = window_create ((Window)NULL, FRAME, | |
462 FRAME_LABEL, buffer, | |
463 FRAME_ICON, frame_icon, | |
464 FRAME_ARGC_PTR_ARGV, &argc, argv, | |
465 0); | |
466 | |
467 /* Create a tty with emacs in it */ | |
42411
c67f88ae0e05
Remove trailing whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
42180
diff
changeset
|
468 tty_win = window_create (frame, TTY, |
c67f88ae0e05
Remove trailing whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
42180
diff
changeset
|
469 TTY_QUIT_ON_CHILD_DEATH, TRUE, |
287 | 470 TTY_BOLDSTYLE, TTYSW_BOLD_INVERT, |
42411
c67f88ae0e05
Remove trailing whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents:
42180
diff
changeset
|
471 TTY_ARGV, argv, |
287 | 472 0); |
473 | |
474 if (bold_name) { | |
475 (void)window_set(tty_win, TTY_BOLDSTYLE_NAME, bold_name, 0); | |
476 } | |
477 | |
478 /* ttysw uses pf_default, one must set WIN_FONT explicitly */ | |
479 window_set (tty_win, WIN_FONT, pf_default(), 0); | |
480 font_height = (int)window_get (tty_win, WIN_ROW_HEIGHT); | |
481 font_width = (int)window_get (tty_win, WIN_COLUMN_WIDTH); | |
482 | |
483 tty_view = tty_win; | |
484 window_set(tty_view, | |
42180 | 485 WIN_CONSUME_PICK_EVENTS, |
287 | 486 WIN_STOP, |
487 WIN_MOUSE_BUTTONS, WIN_UP_EVENTS, | |
488 /* LOC_WINENTER, LOC_WINEXIT, LOC_MOVE, */ | |
489 0, | |
42180 | 490 WIN_CONSUME_KBD_EVENTS, |
287 | 491 WIN_STOP, |
42180 | 492 WIN_ASCII_EVENTS, |
287 | 493 WIN_LEFT_KEYS, WIN_TOP_KEYS, WIN_RIGHT_KEYS, |
494 /* WIN_UP_ASCII_EVENTS, */ | |
495 0, | |
496 0); | |
497 /* Interpose my event function */ | |
42180 | 498 return (int) notify_interpose_event_func |
287 | 499 (tty_view, input_event_filter_function, NOTIFY_SAFE); |
500 } | |
501 #endif XVIEW | |
52401 | 502 |
503 /* arch-tag: 7a2e7105-c059-418a-b3d9-5b5de96abb4e | |
504 (do not change this comment) */ |