Skip to content

Instantly share code, notes, and snippets.

@eikeon
Last active September 27, 2015 05:38
Show Gist options
  • Save eikeon/1219862 to your computer and use it in GitHub Desktop.
Save eikeon/1219862 to your computer and use it in GitHub Desktop.
Emacs 24.0 Lion Fullscreen
diff --git a/src/nsterm.m b/src/nsterm.m
index a45792f..ee5a71b 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -4393,6 +4393,9 @@ ns_term_shutdown (int sig)
{
NSTRACE (applicationDidFinishLaunching);
[NSApp setServicesProvider: NSApp];
+
+ [NSApp setPresentationOptions:NSFullScreenWindowMask];
+
ns_send_appdefined (-2);
}
@@ -5282,6 +5285,7 @@ ns_term_shutdown (int sig)
/* normalize frame to gridded text size */
{
NSTRACE (windowWillResize);
+
/*fprintf (stderr,"Window will resize: %.0f x %.0f\n",frameSize.width,frameSize.height); */
cols = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (emacsframe,
@@ -5500,6 +5504,9 @@ ns_term_shutdown (int sig)
backing: NSBackingStoreBuffered
defer: YES];
+ [win setCollectionBehavior:
+ NSWindowCollectionBehaviorFullScreenPrimary];
+
wr = [win frame];
f->border_width = wr.size.width - r.size.width;
FRAME_NS_TITLEBAR_HEIGHT (f) = wr.size.height - r.size.height;
@@ -5587,6 +5594,40 @@ ns_term_shutdown (int sig)
}
}
+- (NSSize)window:(NSWindow *)window willUseFullScreenContentSize:(NSSize)proposedSize
+{
+ [window setToolbar: nil];
+ return [[window screen] frame].size;
+}
+
+- (void)windowDidExitFullScreen:(NSNotification *)notification
+{
+ //
+}
+
+- (void)windowDidEnterFullScreen:(NSNotification *)notification
+{
+ NSWindow *window = [self window];
+
+ NSRect r = [window contentRectForFrameRect:[window frame]];
+ NSSize size = r.size;
+
+ int new_cols = FRAME_PIXEL_WIDTH_TO_TEXT_COLS(emacsframe, size.width);
+ int new_rows = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES(emacsframe, size.height);
+
+ FRAME_PIXEL_WIDTH (emacsframe) = (int)size.width;
+ FRAME_PIXEL_HEIGHT (emacsframe) = (int)size.height;
+
+ emacsframe->border_width = [window frame].size.width - size.width;
+ //emacsframe->top_pos = [[window screen] frame].size.height - (r.origin.y + r.size.height);
+
+ FRAME_NS_TITLEBAR_HEIGHT (emacsframe) = [window frame].size.height - size.height;
+
+ change_frame_size (emacsframe, new_rows, new_cols, 0, 1, 0); /* pretend, delay, safe */
+ //x_set_window_size (emacsframe, 0, new_cols, new_rows);
+ [[window delegate] windowDidMove:nil];
+}
+
/* Called AFTER method below, but before our windowWillResize call there leads
to windowDidResize -> x_set_window_size. Update emacs' notion of frame
@@ -5604,6 +5645,12 @@ ns_term_shutdown (int sig)
- (NSRect)windowWillUseStandardFrame:(NSWindow *)sender
defaultFrame:(NSRect)defaultFrame
{
+
+ if (FRAME_EXTERNAL_TOOL_BAR (emacsframe)) {
+ [[self window] setToolbar: toolbar];
+ [toolbar setVisible: YES];
+ }
+
NSRect result = [sender frame];
NSTRACE (windowWillUseStandardFrame);
@purcell
Copy link

purcell commented Feb 26, 2012

Nice. For me, each full-screen window has the tool bar, even though tool-bar-mode is disabled. Have you seen the same behaviour?

-Steve

@eikeon
Copy link
Author

eikeon commented Feb 28, 2012

Yeah, I've just been doing my best to ignore it (for me it was empty and covered half of the first time of text). Looks like decent support for lion's fullscreen has yet to make it into emacs HEAD or any of the patches that Homebrew applies. So, I've spent the time to update this patch so that there's not an empty toolbar in fullscreen mode (I just outright remove it). The patch is still buggy if you turn on and off tool bar mode after you've been in fullscreen mode. But seems to work fine for me otherwise.

@purcell
Copy link

purcell commented Feb 29, 2012

Aha, yes -- that behaves much better. I really hope a comprehensive patch gets into Emacs HEAD sooner or later; I picture a 'ns-use-native-fullscreen var to choose whether or not to use Lion fullscreening, and then a version of ns-toggle-fullscreen function which understands both full-screen methods, and an ns-fullscreen-p predicate. I'd buckle down and hack it together myself if I had any faith that a patch would be accepted upstream...

-Steve

@eikeon
Copy link
Author

eikeon commented Dec 22, 2012

Looks like fullscreen support has eventually made it upstream from somewhere. At least I just build emacs from source without this patch and the fullscreen support seems decent.

Not sure when it was introduced, but am now running:

GNU Emacs 24.3.50.1 (i386-apple-darwin12.2.0, NS apple-appkit-1187.34) of 2012-12-22 on gato.local

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment