Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
emacs
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
4
Issues
4
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
emacs
emacs
Commits
d5e7c279
Commit
d5e7c279
authored
Jul 28, 1991
by
Jim Blandy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*** empty log message ***
parent
1d8d96fa
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
125 additions
and
25 deletions
+125
-25
src/alloc.c
src/alloc.c
+1
-1
src/frame.c
src/frame.c
+124
-24
No files found.
src/alloc.c
View file @
d5e7c279
...
...
@@ -781,7 +781,7 @@ make_sequence (nargs, args)
depends on endianness. */
DEFUN
(
"make-rope"
,
Fmake_rope
,
Smake_rope
,
0
,
MANY
,
0
,
"Return a newly created rope containing the arguments of this function.
"Return a newly created rope containing the arguments of this function.
\n
\
A rope is a string, except that its contents will be treated as an
\n
\
array of glyphs, where a glyph is an integer type that may be larger
\n
\
than a character. Emacs is normally configured to use 8-bit glyphs,
\n
\
...
...
src/frame.c
View file @
d5e7c279
...
...
@@ -17,10 +17,13 @@ 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, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include "config.h"
#include "lisp.h"
#include "screen.h"
#include "window.h"
#include "termhooks.h"
Lisp_Object
Vemacs_iconified
;
Lisp_Object
Qscreenp
;
...
...
@@ -28,6 +31,11 @@ Lisp_Object Vscreen_list;
Lisp_Object
Vterminal_screen
;
Lisp_Object
Vglobal_minibuffer_screen
;
/* A screen which is not just a minibuffer, or 0 if there are no
such screens. This is usually the most recent such screen that
was selected. */
struct
screen
*
last_nonminibuf_screen
;
extern
Lisp_Object
Vminibuffer_list
;
extern
Lisp_Object
get_minibuffer
();
...
...
@@ -60,7 +68,9 @@ make_screen (mini_p)
register
Lisp_Object
root_window
;
register
Lisp_Object
mini_window
;
screen
=
Fmake_vector
(
sizeof
(
struct
screen
)
-
sizeof
(
Lisp_Vector
)
+
1
,
screen
=
Fmake_vector
(((
sizeof
(
struct
screen
)
-
(
sizeof
(
Lisp_Vector
)
-
sizeof
(
Lisp_Object
)))
/
sizeof
(
Lisp_Object
)),
make_number
(
0
));
XSETTYPE
(
screen
,
Lisp_Screen
);
s
=
XSCREEN
(
screen
);
...
...
@@ -78,6 +88,7 @@ make_screen (mini_p)
s
->
no_split
=
0
;
s
->
garbaged
=
0
;
s
->
has_minibuffer
=
mini_p
;
s
->
focus_screen
=
screen
;
s
->
param_alist
=
Qnil
;
...
...
@@ -128,8 +139,11 @@ make_screen (mini_p)
:
Fcar
(
Vminibuffer_list
)));
}
s
->
selected_window
=
root_window
;
s
->
root_window
=
root_window
;
s
->
selected_window
=
root_window
;
/* Make sure this window seems more recently used than
a newly-created, never-selected window. */
XFASTINT
(
XWINDOW
(
s
->
selected_window
)
->
use_time
)
=
++
window_select_count
;
Vscreen_list
=
Fcons
(
screen
,
Vscreen_list
);
...
...
@@ -149,7 +163,8 @@ make_screen_without_minibuffer (mini_window)
/* Choose the minibuffer window to use. */
if
(
NULL
(
mini_window
))
{
CHECK_SCREEN
(
Vglobal_minibuffer_screen
,
0
);
if
(
XTYPE
(
Vglobal_minibuffer_screen
)
!=
Lisp_Screen
)
error
(
"global-minibuffer-screen must be set to create minibufferless screens."
);
mini_window
=
XSCREEN
(
Vglobal_minibuffer_screen
)
->
minibuffer_window
;
}
else
...
...
@@ -226,7 +241,7 @@ make_terminal_screen ()
DEFUN
(
"select-screen"
,
Fselect_screen
,
Sselect_screen
,
1
,
2
,
0
,
"Select the screen S. S's selected window becomes
\"
the
\"\n
\
selected window. If the optional parameter NO-ENTER is non-nil, don't
selected window. If the optional parameter NO-ENTER is non-nil, don't
\n
\
focus on that screen."
)
(
screen
,
no_enter
)
Lisp_Object
screen
,
no_enter
;
...
...
@@ -237,6 +252,10 @@ focus on that screen.")
return
screen
;
selected_screen
=
XSCREEN
(
screen
);
if
(
!
EQ
(
SCREEN_ROOT_WINDOW
(
selected_screen
),
SCREEN_MINIBUF_WINDOW
(
selected_screen
)))
last_nonminibuf_screen
=
selected_screen
;
Fselect_window
(
XSCREEN
(
screen
)
->
selected_window
);
#ifdef HAVE_X_WINDOWS
...
...
@@ -317,16 +336,23 @@ next_screen (screen, mini_screen)
for
(
tail
=
Vscreen_list
;
CONSP
(
tail
);
tail
=
XCONS
(
tail
)
->
cdr
)
{
if
(
passed
)
if
(
!
mini_screen
)
{
SCREEN_PTR
s
=
XSCREEN
(
XCONS
(
tail
)
->
car
);
if
(
EQ
(
XCONS
(
tail
)
->
car
,
Vglobal_minibuffer_screen
)
&&
EQ
(
s
->
root_window
,
s
->
minibuffer_window
))
continue
;
}
else
return
XCONS
(
tail
)
->
car
;
{
SCREEN_PTR
s
=
XSCREEN
(
XCONS
(
tail
)
->
car
);
if
(
!
mini_screen
/* Is this screen only a minibuffer? */
&&
EQ
(
SCREEN_ROOT_WINDOW
(
s
),
SCREEN_MINIBUF_WINDOW
(
s
))
/* If we have wrapped all the way around the list (i.e.
the only screen is an all-minibuffer screen), return
it anyway. */
&&
s
!=
XSCREEN
(
screen
))
continue
;
else
return
XCONS
(
tail
)
->
car
;
}
if
(
EQ
(
screen
,
XCONS
(
tail
)
->
car
))
passed
++
;
...
...
@@ -395,20 +421,27 @@ Default is current screen.")
s
=
XSCREEN
(
screen
);
}
/* Don't allow deleted screen to remain selected. */
if
(
s
==
selected_screen
)
/* Are there any other screens besides this one? */
if
(
s
==
selected_screen
&&
EQ
(
next_screen
(
screen
,
1
),
screen
))
error
(
"Attempt to delete the only screen"
);
/* Does this screen have a minibuffer, and is it the surrogate
minibuffer for any other screen? */
if
(
EQ
(
screen
,
WINDOW_SCREEN
(
XWINDOW
(
SCREEN_MINIBUF_WINDOW
(
XSCREEN
(
screen
))))))
{
Lisp_Object
next
;
Lisp_Object
screen2
;
next
=
next_screen
(
screen
,
0
);
if
(
EQ
(
next
,
screen
))
error
(
"Attempt to delete the only screen"
);
Fselect_screen
(
next
,
Qnil
);
for
(
screen2
=
Vscreen_list
;
CONSP
(
2
);
screen2
=
XCONS
(
screen2
)
->
cdr
)
if
(
!
EQ
(
screen2
,
screen
)
&&
EQ
(
screen
,
WINDOW_SCREEN
(
XWINDOW
(
SCREEN_MINIBUF_WINDOW
(
XSCREEN
(
screen2
))))))
error
(
"Attempt to delete a surrogate minibuffer screen"
);
}
/* Don't
allow the global minibuffer screen to be deleted
*/
if
(
s
==
XSCREEN
(
Vglobal_minibuffer_screen
)
)
error
(
"Attempt to delete the global minibuffer screen"
);
/* Don't
let the screen remain selected.
*/
if
(
s
==
selected_screen
)
Fselect_screen
(
next_screen
(
screen
,
1
)
);
/* Don't allow minibuf_window to remain on a deleted screen. */
if
(
EQ
(
s
->
minibuffer_window
,
minibuf_window
))
...
...
@@ -423,8 +456,27 @@ Default is current screen.")
displ
=
s
->
display
;
s
->
display
.
nothing
=
0
;
#ifdef HAVE_X_WINDOWS
if
(
s
->
output_method
==
output_x_window
)
x_destroy_window
(
s
,
displ
);
#endif
/* If we've deleted the last_nonminibuf_screen, then try to find
another one. */
if
(
s
==
last_nonminibuf_screen
)
{
last_nonminibuf_screen
=
0
;
for
(
screen
=
Vscreen_list
;
CONSP
(
screen
);
screen
=
XCONS
(
screen
)
->
cdr
)
{
s
=
XSCREEN
(
XCONS
(
screen
)
->
cdr
);
if
(
!
EQ
(
SCREEN_ROOT_WINDOW
(
s
),
SCREEN_MINIBUF_WINDOW
(
s
)))
{
last_nonminibuf_screen
=
s
;
break
;
}
}
}
return
Qnil
;
}
...
...
@@ -640,6 +692,52 @@ DEFUN ("visible-screen-list", Fvisible_screen_list, Svisible_screen_list,
}
return
value
;
}
DEFUN
(
"redirect-screen-focus"
,
Fredirect_screen_focus
,
Sredirect_screen_focus
,
1
,
2
,
0
,
"Arrange for keystrokes typed at SCREEN to be sent to FOCUS-SCREEN.
\n
\
This means that, after reading a keystroke typed at SCREEN,
\n
\
last-event-screen will be FOCUS-SCREEN.
\n
\
\n
\
If FOCUS-SCREEN is omitted or eq to SCREEN, any existing redirection is
\n
\
cancelled, and the screen again receives its own keystrokes.
\n
\
\n
\
The redirection lasts until the next call to redirect-screen-focus
\n
\
or select-screen.
\n
\
\n
\
This is useful for temporarily redirecting keystrokes to the minibuffer
\n
\
window when a screen doesn't have its own minibuffer."
)
(
screen
,
focus_screen
)
Lisp_Object
screen
,
focus_screen
;
{
CHECK_SCREEN
(
screen
,
0
);
if
(
NULL
(
focus_screen
))
focus_screen
=
screen
;
else
CHECK_SCREEN
(
focus_screen
,
1
);
XSCREEN
(
screen
)
->
focus_screen
=
focus_screen
;
if
(
screen_rehighlight_hook
)
(
*
screen_rehighlight_hook
)
();
return
Qnil
;
}
DEFUN
(
"screen-focus"
,
Fscreen_focus
,
Sscreen_focus
,
1
,
1
,
0
,
"Return the screen to which SCREEN's keystrokes are currently being sent.
\n
\
See redirect-screen-focus."
)
(
screen
)
Lisp_Object
screen
;
{
CHECK_SCREEN
(
screen
,
0
);
return
SCREEN_FOCUS_SCREEN
(
XSCREEN
(
screen
));
}
Lisp_Object
get_screen_param
(
screen
,
prop
)
...
...
@@ -1044,6 +1142,8 @@ and store it in this variable.");
defsubr
(
&
Sdeiconify_screen
);
defsubr
(
&
Sscreen_visible_p
);
defsubr
(
&
Svisible_screen_list
);
defsubr
(
&
Sredirect_screen_focus
);
defsubr
(
&
Sscreen_focus
);
defsubr
(
&
Sscreen_parameters
);
defsubr
(
&
Smodify_screen_parameters
);
defsubr
(
&
Sscreen_pixel_size
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment