Browse Source

[bin] Add script for creating emacsclient app on macOS

Colin Powell 3 tuần trước cách đây
mục cha
commit
a092dd07d5
1 tập tin đã thay đổi với 105 bổ sung0 xóa
  1. 105 0
      bin/.bin/create-emacsclient-app-macos.sh

+ 105 - 0
bin/.bin/create-emacsclient-app-macos.sh

@@ -0,0 +1,105 @@
+#!/bin/bash
+
+# Create Emacsclient.app for macOS
+# This script creates a proper .app bundle that uses emacsclient
+
+APP_NAME="Emacsclient"
+APP_DIR="/Applications/${APP_NAME}.app"
+CONTENTS_DIR="${APP_DIR}/Contents"
+MACOS_DIR="${CONTENTS_DIR}/MacOS"
+RESOURCES_DIR="${CONTENTS_DIR}/Resources"
+
+# Adjust these paths based on your system
+EMACS_BIN="/usr/local/bin/emacs"
+EMACSCLIENT_BIN="/usr/local/bin/emacsclient"
+
+# For Apple Silicon Macs with Homebrew, use:
+# EMACS_BIN="/opt/homebrew/bin/emacs"
+# EMACSCLIENT_BIN="/opt/homebrew/bin/emacsclient"
+
+echo "Creating ${APP_NAME}.app..."
+
+# Create directory structure
+mkdir -p "${MACOS_DIR}"
+mkdir -p "${RESOURCES_DIR}"
+
+# Create the launcher script
+cat > "${MACOS_DIR}/${APP_NAME}" << EOF
+#!/bin/bash
+
+# Check if Emacs server is running
+if ! ${EMACSCLIENT_BIN} -e "(boundp 'server-process)" 2>/dev/null | grep -q "t"; then
+    # Start Emacs daemon if not running
+    ${EMACS_BIN} --daemon
+    # Wait a moment for daemon to start
+    sleep 1
+fi
+
+# Open emacsclient with a new frame
+# -c creates a new frame
+# -n returns immediately without waiting
+exec ${EMACSCLIENT_BIN} -c -n "\$@"
+EOF
+
+# Make the launcher executable
+chmod +x "${MACOS_DIR}/${APP_NAME}"
+
+# Create Info.plist
+cat > "${CONTENTS_DIR}/Info.plist" << 'EOF'
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+    <key>CFBundleExecutable</key>
+    <string>Emacsclient</string>
+    <key>CFBundleIconFile</key>
+    <string>Emacs.icns</string>
+    <key>CFBundleIdentifier</key>
+    <string>org.gnu.Emacsclient</string>
+    <key>CFBundleName</key>
+    <string>Emacsclient</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>CFBundleShortVersionString</key>
+    <string>1.0</string>
+    <key>CFBundleVersion</key>
+    <string>1.0</string>
+    <key>LSMinimumSystemVersion</key>
+    <string>10.10</string>
+    <key>NSHighResolutionCapable</key>
+    <true/>
+    <key>CFBundleDocumentTypes</key>
+    <array>
+        <dict>
+            <key>CFBundleTypeExtensions</key>
+            <array>
+                <string>*</string>
+            </array>
+            <key>CFBundleTypeName</key>
+            <string>All Files</string>
+            <key>CFBundleTypeRole</key>
+            <string>Editor</string>
+        </dict>
+    </array>
+</dict>
+</plist>
+EOF
+
+# Copy icon from existing Emacs.app if available
+if [ -f "/Applications/Emacs.app/Contents/Resources/Emacs.icns" ]; then
+    cp "/Applications/Emacs.app/Contents/Resources/Emacs.icns" "${RESOURCES_DIR}/"
+    echo "Icon copied from Emacs.app"
+elif [ -f "/opt/homebrew/Caskroom/emacs/*/Emacs.app/Contents/Resources/Emacs.icns" ]; then
+    cp /opt/homebrew/Caskroom/emacs/*/Emacs.app/Contents/Resources/Emacs.icns "${RESOURCES_DIR}/"
+    echo "Icon copied from Homebrew Emacs.app"
+else
+    echo "Warning: Could not find Emacs.icns icon file"
+fi
+
+echo "Successfully created ${APP_DIR}"
+echo ""
+echo "You can now:"
+echo "1. Double-click Emacsclient in /Applications to launch"
+echo "2. Add it to your Dock"
+echo "3. Set it as default handler for text files"
+echo "4. Open files with: open -a Emacsclient file.txt"