unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: "Charles A. Roelli" <charles@aurox.ch>
To: Alan Third <alan@idiocy.org>
Cc: 27645@debbugs.gnu.org, jean.christophe.helary@gmail.com
Subject: bug#27645: MacOS: run GUI Emacs without 'make install'
Date: Sat, 15 Jul 2017 16:58:38 +0200	[thread overview]
Message-ID: <b5475588-f27a-509d-6f37-470578129253@aurox.ch> (raw)
In-Reply-To: <20170712185235.GB23391@breton.holly.idiocy.org>

[-- Attachment #1: Type: text/plain, Size: 1360 bytes --]

On 12/07/2017 20:52, Alan Third wrote:

> On Mon, Jul 10, 2017 at 09:12:14PM +0200, Charles A. Roelli wrote:
>> The patch is attached.
> I haven’t had a chance to test this, but it looks good, thanks for
> working on it.
>
>>   In the top-level directory, use:
>>   
>> -  ./configure --with-ns
>> +  make
>>   
>> -(On macOS, --with-ns is enabled by default.)
>> +This will compile all the files.
> I understand that running make also runs configure, but I think it’s
> worth leaving configure and the stuff about --with-ns in there. If you
> try to build the NS port on anything other than macOS then you really
> need to know about --with-ns.

Thanks, I've put it back.

>
>> -This will compile all the files, but emacs will not be able to be run except
>> -in -nw (terminal) mode.
>> +In order to run Emacs, you must run:
>>   
>> -In order to run Emacs.app, you must run:
>> +  src/emacs
>> +
>> +In order to install Emacs, you must run:
>>   
>>     make install
> I read this as it’s going to install Emacs somewhere on my PC, it
> should probably be something like: ‘To build Emacs.app ...’.
>

It may install it (with --disable-ns-self-contained).  I've clarified 
this (hopefully).

I've also placed the nsterm.m change inside #ifdef NS_IMPL_COCOA, since the
activationPolicy doesn't seem to exist on GNUstep.

See the updated patch again.

[-- Attachment #2: 0001-Enable-GUI-Emacs-without-make-install-on-macOS-Bug-2.patch --]
[-- Type: text/x-patch, Size: 3872 bytes --]

From 37abf2a8e9a30377a2e064f111d546ec083c3363 Mon Sep 17 00:00:00 2001
From: Charles A. Roelli <charles@aurox.ch>
Date: Mon, 10 Jul 2017 21:08:14 +0200
Subject: [PATCH v2] Enable GUI Emacs without 'make install' on macOS (Bug
 #27645)

* nextstep/INSTALL: Correct it, and mention that Emacs can be run
from 'src/emacs'.

* src/nsterm.m (applicationDidFinishLaunching:): When Emacs is
launched outside of a macOS application bundle, change its
activation policy from the default 'prohibited' to 'regular'.

; * etc/NEWS: Mention the change on macOS.
---
 etc/NEWS         |    3 +++
 nextstep/INSTALL |   16 ++++++++++++----
 src/nsterm.m     |   13 +++++++++++++
 3 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index edb7111..36cb80b 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1544,16 +1544,19 @@ execution and return control to the debugger.  If no debugger is
 attached to the receiving process, the call is typically ignored.
 This is in contrast to the default action on POSIX Systems, where it
 causes the receiving process to terminate with a core dump if no
 debugger has been attached to it.
 
 ** 'set-mouse-position' and 'set-mouse-absolute-pixel-position' work
 on macOS.
 
+** Emacs can now be run as a GUI application from the command line on
+macOS.
+
 \f
 ----------------------------------------------------------------------
 This file is part of GNU Emacs.
 
 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 of the License, or
 (at your option) any later version.
diff --git a/nextstep/INSTALL b/nextstep/INSTALL
index 799cd4d..b7e84e0 100644
--- a/nextstep/INSTALL
+++ b/nextstep/INSTALL
@@ -16,25 +16,33 @@ Compilation
 -----------
 
 In the top-level directory, use:
 
   ./configure --with-ns
 
 (On macOS, --with-ns is enabled by default.)
 
-This will compile all the files, but emacs will not be able to be run except
-in -nw (terminal) mode.
+Then run:
 
-In order to run Emacs.app, you must run:
+  make
+
+This will compile all the files.
+
+In order to run Emacs, you must run:
+
+  src/emacs
+
+In order to install Emacs, you must run:
 
   make install
 
 This will assemble the app in nextstep/Emacs.app (i.e., the --prefix
-argument has no effect in this case).
+argument has no effect in this case).  You can then move the Emacs.app
+bundle to a location of your choice.
 
 If you pass the --disable-ns-self-contained option to configure, the lisp
 files will be installed under whatever 'prefix' is set to (defaults to
 /usr/local).  The bundle will be smaller, but depend on these resources (may
 require 'sudo' for "make install").
 
 
 Installation
diff --git a/src/nsterm.m b/src/nsterm.m
index bf83550..7834bac 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -5474,16 +5474,29 @@ - (void)applicationDidFinishLaunching: (NSNotification *)notification
 #ifdef NS_IMPL_COCOA
   [[NSNotificationCenter defaultCenter]
     addObserver:self
        selector:@selector(antialiasThresholdDidChange:)
 	   name:NSAntialiasThresholdChangedNotification
 	 object:nil];
 #endif
 
+#ifdef NS_IMPL_COCOA
+  if ([NSApp activationPolicy] == NSApplicationActivationPolicyProhibited) {
+    /* Set the app's activation policy to regular when we run outside
+       of a bundle.  This is already done for us by Info.plist when we
+       run inside a bundle. */
+    [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
+    [NSApp setApplicationIconImage:
+	     [EmacsImage
+	       allocInitFromFile:
+		 build_string("icons/hicolor/128x128/apps/emacs.png")]];
+  }
+#endif
+
   ns_send_appdefined (-2);
 }
 
 - (void)antialiasThresholdDidChange:(NSNotification *)notification
 {
 #ifdef NS_IMPL_COCOA
   macfont_update_antialias_threshold ();
 #endif
-- 
1.7.4.4


  parent reply	other threads:[~2017-07-15 14:58 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-10 19:06 bug#27645: MacOS: run GUI Emacs without 'make install' Charles A. Roelli
2017-07-10 19:12 ` Charles A. Roelli
2017-07-12 18:52   ` Alan Third
2017-07-12 22:24     ` Jean-Christophe Helary
2017-07-15 14:58     ` Charles A. Roelli [this message]
2017-07-20 18:58       ` Charles A. Roelli
2017-07-20 20:34         ` Alan Third
2017-07-23 15:02           ` Charles A. Roelli
2017-07-24 18:24             ` Charles A. Roelli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b5475588-f27a-509d-6f37-470578129253@aurox.ch \
    --to=charles@aurox.ch \
    --cc=27645@debbugs.gnu.org \
    --cc=alan@idiocy.org \
    --cc=jean.christophe.helary@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).