X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/bfab7c6ec74dc55d640ef36f8cb1790a1420f991..bdeb0411a2fd52eb75cac953987b690a9f6d3011:/src/dispnew.c
diff --git a/src/dispnew.c b/src/dispnew.c
index ccfac54575..307515f7bf 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -5,10 +5,10 @@
This file is part of GNU Emacs.
-GNU Emacs is free software; you can redistribute it and/or modify
+GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -16,9 +16,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA. */
+along with GNU Emacs. If not, see . */
#include
#include
@@ -61,9 +59,9 @@ Boston, MA 02110-1301, USA. */
#include "w32term.h"
#endif /* HAVE_NTGUI */
-#ifdef MAC_OS
-#include "macterm.h"
-#endif /* MAC_OS */
+#ifdef HAVE_NS
+#include "nsterm.h"
+#endif
/* Include systime.h after xterm.h to avoid double inclusion of time.h. */
@@ -324,7 +322,9 @@ static struct frame *frame_matrix_frame;
matrix adjustments. Redisplay must stop, and glyph matrices must
be adjusted when this flag becomes non-zero during display. The
reason fonts can be loaded so late is that fonts of fontsets are
- loaded on demand. */
+ loaded on demand. Another reason is that a line contains many
+ characters displayed by zero width or very narrow glyphs of
+ variable-width fonts. */
int fonts_changed_p;
@@ -3390,7 +3390,7 @@ DEFUN ("redraw-frame", Fredraw_frame, Sredraw_frame, 1, 1, 0,
update_begin (f);
#ifdef MSDOS
if (FRAME_MSDOS_P (f))
- set_terminal_modes (FRAME_TERMINAL (f));
+ FRAME_TERMINAL (f)->set_terminal_modes_hook (FRAME_TERMINAL (f));
#endif
clear_frame (f);
clear_current_matrices (f);
@@ -3514,6 +3514,7 @@ direct_output_for_insert (g)
|| g == '\t'
|| g == '\n'
|| g == '\r'
+ || (g == ' ' && !NILP (current_buffer->word_wrap))
/* Give up if unable to display the cursor in the window. */
|| w->cursor.vpos < 0
/* Give up if we are showing a message or just cleared the message
@@ -5302,22 +5303,26 @@ update_frame_1 (f, force_p, inhibit_id_p)
Also flush out if likely to have more than 1k buffered
otherwise. I'm told that some telnet connections get
really screwed by more than 1k output at once. */
- int outq = PENDING_OUTPUT_COUNT (FRAME_TTY (f)->output);
- if (outq > 900
- || (outq > 20 && ((i - 1) % preempt_count == 0)))
+ FILE *display_output = FRAME_TTY (f)->output;
+ if (display_output)
{
- fflush (FRAME_TTY (f)->output);
- if (preempt_count == 1)
+ int outq = PENDING_OUTPUT_COUNT (display_output);
+ if (outq > 900
+ || (outq > 20 && ((i - 1) % preempt_count == 0)))
{
+ fflush (display_output);
+ if (preempt_count == 1)
+ {
#ifdef EMACS_OUTQSIZE
- if (EMACS_OUTQSIZE (0, &outq) < 0)
- /* Probably not a tty. Ignore the error and reset
- the outq count. */
- outq = PENDING_OUTPUT_COUNT (FRAME_TTY (f->output));
+ if (EMACS_OUTQSIZE (0, &outq) < 0)
+ /* Probably not a tty. Ignore the error and reset
+ the outq count. */
+ outq = PENDING_OUTPUT_COUNT (FRAME_TTY (f->output));
#endif
- outq *= 10;
- if (baud_rate <= outq && baud_rate > 0)
- sleep (outq / baud_rate);
+ outq *= 10;
+ if (baud_rate <= outq && baud_rate > 0)
+ sleep (outq / baud_rate);
+ }
}
}
}
@@ -6819,6 +6824,10 @@ init_display ()
signal (SIGWINCH, window_change_signal);
#endif /* SIGWINCH */
+ /* If running as a daemon, no need to initialize any frames/terminal. */
+ if (is_daemon)
+ return;
+
/* If the user wants to use a window system, we shouldn't bother
initializing the terminal. This is especially important when the
terminal is so dumb that emacs gives up before and doesn't bother
@@ -6831,12 +6840,7 @@ init_display ()
if (! inhibit_window_system && ! display_arg)
{
char *display;
-#ifdef VMS
- display = getenv ("DECW$DISPLAY");
-#else
display = getenv ("DISPLAY");
-#endif
-
display_arg = (display != 0 && *display != 0);
if (display_arg && !x_display_ok (display))
@@ -6856,8 +6860,6 @@ init_display ()
Vinitial_window_system = intern ("x");
#ifdef HAVE_X11
Vwindow_system_version = make_number (11);
-#else
- Vwindow_system_version = make_number (10);
#endif
#if defined (GNU_LINUX) && defined (HAVE_LIBNCURSES)
/* In some versions of ncurses,
@@ -6880,15 +6882,19 @@ init_display ()
}
#endif /* HAVE_NTGUI */
-#ifdef MAC_OS
- if (!inhibit_window_system)
+#ifdef HAVE_NS
+ if (!inhibit_window_system
+#ifndef CANNOT_DUMP
+ && initialized
+#endif
+ )
{
- Vinitial_window_system = intern ("mac");
- Vwindow_system_version = make_number (1);
+ Vinitial_window_system = intern("ns");
+ Vwindow_system_version = make_number(10);
adjust_frame_glyphs_initially ();
return;
}
-#endif /* MAC_OS */
+#endif
/* If no window system has been specified, try to use the terminal. */
if (! isatty (0))
@@ -6905,40 +6911,15 @@ init_display ()
#endif
if (!terminal_type)
{
-#ifdef VMS
- fprintf (stderr, "Please specify your terminal type.\n\
-For types defined in VMS, use set term /device=TYPE.\n\
-For types not defined in VMS, use define emacs_term \"TYPE\".\n\
-\(The quotation marks are necessary since terminal types are lower case.)\n");
-#else /* not VMS */
-
#ifdef HAVE_WINDOW_SYSTEM
if (! inhibit_window_system)
fprintf (stderr, "Please set the environment variable DISPLAY or TERM (see `tset').\n");
else
#endif /* HAVE_WINDOW_SYSTEM */
fprintf (stderr, "Please set the environment variable TERM; see `tset'.\n");
-#endif /* not VMS */
exit (1);
}
-#ifdef VMS
- /* VMS DCL tends to up-case things, so down-case term type.
- Hardly any uppercase letters in terminal types; should be none. */
- {
- char *new = (char *) xmalloc (strlen (terminal_type) + 1);
- char *p;
-
- strcpy (new, terminal_type);
-
- for (p = new; *p; p++)
- if (isupper (*p))
- *p = tolower (*p);
-
- terminal_type = new;
- }
-#endif /* VMS */
-
{
struct terminal *t;
struct frame *f = XFRAME (selected_frame);
@@ -6967,7 +6948,13 @@ For types not defined in VMS, use define emacs_term \"TYPE\".\n\
Fmodify_frame_parameters
(selected_frame, Fcons (Fcons (Qtty_type,
Ftty_type (selected_frame)), Qnil));
- Fmodify_frame_parameters (selected_frame, Fcons (Fcons (Qtty, Qnil), Qnil));
+ if (t->display_info.tty->name)
+ Fmodify_frame_parameters (selected_frame,
+ Fcons (Fcons (Qtty, build_string (t->display_info.tty->name)),
+ Qnil));
+ else
+ Fmodify_frame_parameters (selected_frame, Fcons (Fcons (Qtty, Qnil),
+ Qnil));
}
{
@@ -6989,13 +6976,6 @@ For types not defined in VMS, use define emacs_term \"TYPE\".\n\
/* Set up faces of the initial terminal frame of a dumped Emacs. */
if (initialized
&& !noninteractive
-#ifdef MSDOS
- /* The MSDOS terminal turns on its ``window system'' relatively
- late into the startup, so we cannot do the frame faces'
- initialization just yet. It will be done later by pc-win.el
- and internal_terminal_init. */
- && (strcmp (terminal_type, "internal") != 0 || inhibit_window_system)
-#endif
&& NILP (Vinitial_window_system))
{
/* For the initial frame, we don't have any way of knowing what
@@ -7057,6 +7037,18 @@ WINDOW nil or omitted means report on the selected window. */)
return w->cursor_off_p ? Qnil : Qt;
}
+DEFUN ("last-nonminibuffer-frame", Flast_nonminibuf_frame,
+ Slast_nonminibuf_frame, 0, 0, 0,
+ doc: /* Value is last nonminibuffer frame. */)
+ ()
+{
+ Lisp_Object frame = Qnil;
+
+ if (last_nonminibuf_frame)
+ XSETFRAME (frame, last_nonminibuf_frame);
+
+ return frame;
+}
/***********************************************************************
Initialization
@@ -7075,6 +7067,7 @@ syms_of_display ()
defsubr (&Ssend_string_to_terminal);
defsubr (&Sinternal_show_cursor);
defsubr (&Sinternal_show_cursor_p);
+ defsubr (&Slast_nonminibuf_frame);
#if GLYPH_DEBUG
defsubr (&Sdump_redisplay_history);