merging Emacs.app (NeXTstep port)

This commit is contained in:
Adrian Robert 2008-07-15 18:15:18 +00:00
parent 1391cd5487
commit edfda78355
97 changed files with 20892 additions and 307 deletions

View file

@ -1,3 +1,15 @@
2008-07-15 Adrian Robert <Adrian.B.Robert@gmail.com>
Changes and additions for NeXTstep windowing system (Cocoa and
GNUstep) support.
* configure.in: Add support for NS window system: --with-ns (default
off), --enable-ns-app, --enable-cocoa-experimental-ctrl-g; improve add
sparc detection for FreeBSD variants, checks for Cocoa and GNUstep,
disable font backend if window system is "none", not if !HAVE_X11.
* Makefile.in: Add ns-emacs to INFO_FILES, add ns_appdir variable.
(install-arch-dep): Add commands to assemble NS .app package.
2008-07-10 Dan Nicolaescu <dann@ics.uci.edu>
* configure.in: Use macppc for Darwin. Remove references to

View file

@ -137,7 +137,7 @@ man1dir=$(mandir)/man1
infodir=@infodir@
INFO_FILES=ada-mode autotype calc ccmode cl dbus dired-x ebrowse ediff \
efaq eintr elisp emacs emacs-mime epa erc eshell eudc \
flymake forms gnus idlwave info message mh-e newsticker \
flymake forms gnus idlwave info message mh-e newsticker ns-emacs \
nxml-mode org pcl-cvs pgg rcirc reftex remember sasl sc ses \
sieve speedbar tramp vip viper widget woman smtpmail url
@ -167,6 +167,9 @@ x_default_search_path=@x_default_search_path@
# Location to install Emacs.app on Mac OS X
carbon_appdir=@carbon_appdir@
# Location to install Emacs.app under NeXT/Open/GNUstep / Cocoa
ns_appdir=@ns_appdir@
# Where the etc/emacs.desktop file is to be installed.
desktopdir=$(datarootdir)/applications
@ -411,6 +414,14 @@ install-arch-dep: mkdir
(cd $(DESTDIR)${carbon_appdir}/Emacs.app; umask 022; tar -xvf - \
&& cat > /dev/null))) || exit 1; \
fi
if test "${ns_appdir}" != ""; then \
umask 022; mkdir -p ${ns_appdir}/Emacs.app; \
(cd nextstep/build/Emacs.app; (tar -chf - . | \
(cd ${ns_appdir}/Emacs.app; umask 022; tar -xvf - \
&& cat > /dev/null))) || exit 1; \
( cd site-lisp ; tar chf - . ) | \
( cd ${datadir}/$(EMACSFULL)/site-lisp ; tar xf - ) \
fi
## http://lists.gnu.org/archive/html/emacs-devel/2007-10/msg01672.html
## Needs to be the user running install, so configure can't set it.

View file

@ -3,7 +3,6 @@ of their use. Feel free to add more macros and more categories.
** Distinguishing OSes **
MAC_OS Compiling for the `mac' window-system.
MAC_OS8 Compiling for Mac OS Classic (v8 or v9). No longer supported, all code using it can be removed.
MAC_OSX Compiling for Mac OS X. Not bare Darwin.
CYGWIN Compiling the Cygwin port.
@ -23,7 +22,11 @@ USE_LISP_UNION_TYPE Define it in lisp.h to make Lisp_Object be a union type inst
** Distinguishing GUIs **
HAVE_NTGUI Use the native W32 GUI for windows, frames, menus&scrollbars.
MAC_OS Compiling for the `mac' window-system.
HAVE_CARBON Compile support for the Carbon GUI. Requires MAC_OS?
HAVE_NS Use the NeXT/OpenStep/Cocoa UI under Mac OS X or GNUstep.
NS_IMPL_GNUSTEP Compile support for GNUSTEP implementation of NS GUI API.
NS_IMPL_COCOA Compile support for Cocoa (Apple) implementation of NS GUI API.
HAVE_X11 Compile support for the X11 GUI.
HAVE_X_WINDOWS Compile support for X Window system
X11 ?? Makefile.in suggests it's equivalent to HAVE_X11

View file

@ -1,3 +1,7 @@
2008-07-15 Adrian Robert <Adrian.B.Robert@gmail.com>
* CPP_DEFINES: Add NS port related defines.
2008-06-16 Glenn Morris <rgm@gnu.org>
* admin.el (set-version): Add doc/lispref/vol1.texi,vol2.texi,

309
configure vendored
View file

@ -734,6 +734,7 @@ X_TOOLKIT_TYPE
machfile
opsysfile
carbon_appdir
ns_appdir
LTLIBOBJS'
ac_subst_files=''
ac_precious_vars='build_alias
@ -1332,6 +1333,9 @@ Optional Features:
--enable-carbon-app[=DIR]
specify install directory for Emacs.app on Mac OS X
[DIR=/Application]
--enable-ns-app[=DIR] [DIR=/Applications]
specify install directory for Emacs.app under NS
--enable-cocoa-experimental-ctrl-g enable experimental improved ctrl-g recognition
--enable-asserts compile code with asserts enabled
--enable-maintainer-mode
enable make rules and dependencies not useful (and
@ -1367,6 +1371,7 @@ Optional Packages:
--without-xaw3d don't use Xaw3d
--without-xim don't use X11 XIM
--with-carbon use Carbon GUI on Mac OS X. This is unsupported!
--with-ns use nextstep (Cocoa or GNUstep) windowing system
--without-gpm don't use -lgpm for mouse support on a GNU/Linux
console
--without-dbus don't compile with D-Bus support
@ -2087,6 +2092,14 @@ else
fi
# Check whether --with-ns was given.
if test "${with_ns+set}" = set; then
withval=$with_ns;
else
with_ns=no
fi
# Check whether --with-gpm was given.
if test "${with_gpm+set}" = set; then
@ -2155,6 +2168,20 @@ if test "${enable_carbon_app+set}" = set; then
fi
# Check whether --enable-ns-app was given.
if test "${enable_ns_app+set}" = set; then
enableval=$enable_ns_app; ns_appdir_x=${enableval}
fi
# Check whether --enable-cocoa-experimental-ctrl-g was given.
if test "${enable_cocoa_experimental_ctrl_g+set}" = set; then
enableval=$enable_cocoa_experimental_ctrl_g; EN_COCOA_EXPERIMENTAL_CTRL_G=yes
else
EN_COCOA_EXPERIMENTAL_CTRL_G=no
fi
# Check whether --enable-asserts was given.
if test "${enable_asserts+set}" = set; then
enableval=$enable_asserts; USE_XASSERTS=$enableval
@ -2378,16 +2405,17 @@ machine='' opsys='' unported=no
case "${canonical}" in
## FreeBSD ports
*-*-freebsd* )
*-*-*freebsd* )
opsys=freebsd
case "${canonical}" in
alpha*-*-freebsd*) machine=alpha ;;
arm*-*-freebsd*) machine=arm ;;
ia64-*-freebsd*) machine=ia64 ;;
sparc-*-freebsd*) machine=sparc ;;
sparc64-*-freebsd*) machine=sparc ;;
powerpc-*-freebsd*) machine=macppc ;;
i[3456]86-*-freebsd*) machine=intel386 ;;
amd64-*-freebsd*|x86_64-*-freebsd*) machine=amdx86-64 ;;
amd64-*-freebsd*|x86_64-*-*freebsd*) machine=amdx86-64 ;;
esac
;;
@ -2397,6 +2425,7 @@ case "${canonical}" in
case "${canonical}" in
alpha*-*-kfreebsd*) machine=alpha ;;
ia64-*-kfreebsd*) machine=ia64 ;;
sparc-*-kfreebsd*) machine=sparc ;;
sparc64-*-kfreebsd*) machine=sparc ;;
powerpc-*-kfreebsd*) machine=macppc ;;
i[3456]86-*-kfreebsd*) machine=intel386 ;;
@ -9308,6 +9337,179 @@ if test "${HAVE_CARBON}" = yes; then
window_system=mac
fi
HAVE_NS=no
COCOA=no
GNUSTEP=no
tmp_CPPFLAGS="$CPPFLAGS"
tmp_CFLAGS="$CFLAGS"
CPPFLAGS="$CPPFLAGS -x objective-c"
CFLAGS="$CFLAGS -x objective-c"
if test "${with_ns}" != no; then
if test "${opsys}" = darwin; then
COCOA=yes
elif test -f /etc/GNUstep/GNUstep.conf; then
GNUSTEP=yes
GNUSTEP_SYSTEM_HEADERS="$(source /etc/GNUstep/GNUstep.conf; echo $GNUSTEP_SYSTEM_HEADERS)"
GNUSTEP_SYSTEM_LIBRARIES="$(source /etc/GNUstep/GNUstep.conf; echo $GNUSTEP_SYSTEM_LIBRARIES)"
CPPFLAGS="$CPPFLAGS -I${GNUSTEP_SYSTEM_HEADERS}"
CFLAGS="$CFLAGS -I${GNUSTEP_SYSTEM_HEADERS}"
REAL_CFLAGS="$REAL_CFLAGS -I${GNUSTEP_SYSTEM_HEADERS}"
LDFLAGS="$LDFLAGS -L${GNUSTEP_SYSTEM_LIBRARIES}"
fi
if test "${ac_cv_header_AppKit_AppKit_h+set}" = set; then
{ echo "$as_me:$LINENO: checking for AppKit/AppKit.h" >&5
echo $ECHO_N "checking for AppKit/AppKit.h... $ECHO_C" >&6; }
if test "${ac_cv_header_AppKit_AppKit_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
fi
{ echo "$as_me:$LINENO: result: $ac_cv_header_AppKit_AppKit_h" >&5
echo "${ECHO_T}$ac_cv_header_AppKit_AppKit_h" >&6; }
else
# Is the header compilable?
{ echo "$as_me:$LINENO: checking AppKit/AppKit.h usability" >&5
echo $ECHO_N "checking AppKit/AppKit.h usability... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
$ac_includes_default
#include <AppKit/AppKit.h>
_ACEOF
rm -f conftest.$ac_objext
if { (ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(eval "$ac_compile") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
ac_header_compiler=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_header_compiler=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
echo "${ECHO_T}$ac_header_compiler" >&6; }
# Is the header present?
{ echo "$as_me:$LINENO: checking AppKit/AppKit.h presence" >&5
echo $ECHO_N "checking AppKit/AppKit.h presence... $ECHO_C" >&6; }
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <AppKit/AppKit.h>
_ACEOF
if { (ac_try="$ac_cpp conftest.$ac_ext"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } >/dev/null && {
test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
test ! -s conftest.err
}; then
ac_header_preproc=yes
else
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_header_preproc=no
fi
rm -f conftest.err conftest.$ac_ext
{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
echo "${ECHO_T}$ac_header_preproc" >&6; }
# So? What about this header?
case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
yes:no: )
{ echo "$as_me:$LINENO: WARNING: AppKit/AppKit.h: accepted by the compiler, rejected by the preprocessor!" >&5
echo "$as_me: WARNING: AppKit/AppKit.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
{ echo "$as_me:$LINENO: WARNING: AppKit/AppKit.h: proceeding with the compiler's result" >&5
echo "$as_me: WARNING: AppKit/AppKit.h: proceeding with the compiler's result" >&2;}
ac_header_preproc=yes
;;
no:yes:* )
{ echo "$as_me:$LINENO: WARNING: AppKit/AppKit.h: present but cannot be compiled" >&5
echo "$as_me: WARNING: AppKit/AppKit.h: present but cannot be compiled" >&2;}
{ echo "$as_me:$LINENO: WARNING: AppKit/AppKit.h: check for missing prerequisite headers?" >&5
echo "$as_me: WARNING: AppKit/AppKit.h: check for missing prerequisite headers?" >&2;}
{ echo "$as_me:$LINENO: WARNING: AppKit/AppKit.h: see the Autoconf documentation" >&5
echo "$as_me: WARNING: AppKit/AppKit.h: see the Autoconf documentation" >&2;}
{ echo "$as_me:$LINENO: WARNING: AppKit/AppKit.h: section \"Present But Cannot Be Compiled\"" >&5
echo "$as_me: WARNING: AppKit/AppKit.h: section \"Present But Cannot Be Compiled\"" >&2;}
{ echo "$as_me:$LINENO: WARNING: AppKit/AppKit.h: proceeding with the preprocessor's result" >&5
echo "$as_me: WARNING: AppKit/AppKit.h: proceeding with the preprocessor's result" >&2;}
{ echo "$as_me:$LINENO: WARNING: AppKit/AppKit.h: in the future, the compiler will take precedence" >&5
echo "$as_me: WARNING: AppKit/AppKit.h: in the future, the compiler will take precedence" >&2;}
;;
esac
{ echo "$as_me:$LINENO: checking for AppKit/AppKit.h" >&5
echo $ECHO_N "checking for AppKit/AppKit.h... $ECHO_C" >&6; }
if test "${ac_cv_header_AppKit_AppKit_h+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_cv_header_AppKit_AppKit_h=$ac_header_preproc
fi
{ echo "$as_me:$LINENO: result: $ac_cv_header_AppKit_AppKit_h" >&5
echo "${ECHO_T}$ac_cv_header_AppKit_AppKit_h" >&6; }
fi
if test $ac_cv_header_AppKit_AppKit_h = yes; then
HAVE_NS=yes
fi
fi
if test "${window_system}" = x11 && test "${HAVE_NS}" = yes; then
if test "${with_ns+set}" != set \
&& test "${ns_appdir_x+set}" != set; then
HAVE_NS=no
fi
fi
if test "${window_system}" = mac && test "${HAVE_NS}" = yes; then
if test "${with_ns+set}" != set \
&& test "${ns_appdir_x+set}" != set; then
HAVE_NS=no
else
HAVE_CARBON=no
fi
fi
if test "${HAVE_NS}" = yes; then
window_system=nextstep
with_xft=no
with_freetype=no
fi
CFLAGS="$tmp_CFLAGS"
CPPFLAGS="$tmp_CPPFLAGS"
case "${window_system}" in
x11 )
HAVE_X_WINDOWS=yes
@ -9321,7 +9523,7 @@ case "${window_system}" in
* ) USE_X_TOOLKIT=maybe ;;
esac
;;
mac | none )
nextstep | mac | none )
HAVE_X_WINDOWS=no
HAVE_X11=no
USE_X_TOOLKIT=none
@ -9396,9 +9598,6 @@ case ${HAVE_X11} in
yes ) HAVE_MENUS=yes ;;
esac
### Compute the unexec source name from the object name.
UNEXEC_SRC="`echo ${unexec} | sed 's/\.o/.c/'`"
# Do the opsystem or machine files prohibit the use of the GNU malloc?
# Assume not, until told otherwise.
GNU_MALLOC=yes
@ -12313,6 +12512,12 @@ _ACEOF
elif test "${HAVE_CARBON}" = "yes"; then
cat >>confdefs.h <<\_ACEOF
#define USE_TOOLKIT_SCROLL_BARS 1
_ACEOF
USE_TOOLKIT_SCROLL_BARS=yes
elif test "${HAVE_NS}" = "yes"; then
cat >>confdefs.h <<\_ACEOF
#define USE_TOOLKIT_SCROLL_BARS 1
_ACEOF
USE_TOOLKIT_SCROLL_BARS=yes
@ -14943,6 +15148,46 @@ done
# We also have mouse menus.
HAVE_MENUS=yes
fi
### Use NeXTstep API to implement GUI.
if test "${HAVE_NS}" = "yes"; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_NS 1
_ACEOF
## Specify the install directory
ns_appdir=
if test "${ns_appdir_x}" != ""; then
case ${ns_appdir_x} in
y | ye | yes) ns_appdir=/Applications ;;
* ) ns_appdir=${ns_appdir_x} ;;
esac
fi
if test "${COCOA}" = "yes"; then
cat >>confdefs.h <<\_ACEOF
#define NS_IMPL_COCOA 1
_ACEOF
fi
if test "${EN_COCOA_EXPERIMENTAL_CTRL_G}" = "yes"; then
cat >>confdefs.h <<\_ACEOF
#define COCOA_EXPERIMENTAL_CTRL_G 1
_ACEOF
fi
if test "${GNUSTEP}" = "yes"; then
cat >>confdefs.h <<\_ACEOF
#define NS_IMPL_GNUSTEP 1
_ACEOF
fi
# We also have mouse menus.
HAVE_MENUS=yes
fi
### Use session management (-lSM -lICE) if available
HAVE_X_SM=no
@ -16688,7 +16933,6 @@ cat >>conftest.$ac_ext <<_ACEOF
# endif
#endif
#include <limits.h>
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
@ -16837,15 +17081,12 @@ main ()
isn't worth using anyway. */
alarm (60);
for (;;)
{
t = (time_t_max << 1) + 1;
if (t <= time_t_max)
break;
time_t_max = t;
}
time_t_min = - ((time_t) ~ (time_t) 0 == (time_t) -1) - time_t_max;
for (time_t_max = 1; 0 < time_t_max; time_t_max *= 2)
continue;
time_t_max--;
if ((time_t) -1 < 0)
for (time_t_min = -1; (time_t) (time_t_min * 2) < 0; time_t_min *= 2)
continue;
delta = time_t_max / 997; /* a suitable prime number */
for (i = 0; i < N_STRINGS; i++)
{
@ -16860,12 +17101,10 @@ main ()
&& mktime_test ((time_t) (60 * 60 * 24))))
return 1;
for (j = 1; ; j <<= 1)
for (j = 1; 0 < j; j *= 2)
if (! bigtime_test (j))
return 1;
else if (INT_MAX / 2 < j)
break;
if (! bigtime_test (INT_MAX))
if (! bigtime_test (j - 1))
return 1;
}
return ! (irix_6_4_bug () && spring_forward_gap () && year_2050_test ());
@ -18774,13 +19013,11 @@ _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <sys/types.h> /* for off_t */
#include <stdio.h>
#include <stdio.h>
int
main ()
{
int (*fp) (FILE *, off_t, int) = fseeko;
return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0);
;
return 0;
}
@ -18820,13 +19057,11 @@ cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#define _LARGEFILE_SOURCE 1
#include <sys/types.h> /* for off_t */
#include <stdio.h>
#include <stdio.h>
int
main ()
{
int (*fp) (FILE *, off_t, int) = fseeko;
return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0);
;
return 0;
}
@ -23961,6 +24196,7 @@ fi
cat >>confdefs.h <<_ACEOF
@ -24106,12 +24342,11 @@ echo " Does Emacs use -lrsvg-2? ${HAVE_RSVG}"
echo " Does Emacs use -lgpm? ${HAVE_GPM}"
echo " Does Emacs use -ldbus? ${HAVE_DBUS}"
if test "${USE_FONT_BACKEND}" = "yes"; then
echo " Does Emacs use -lfreetype? ${HAVE_FREETYPE}"
echo " Does Emacs use -lm17n-flt? ${HAVE_M17N_FLT}"
echo " Does Emacs use -lotf? ${HAVE_LIBOTF}"
echo " Does Emacs use -lxft? ${HAVE_XFT}"
fi
echo " Does Emacs use -lfreetype? ${HAVE_FREETYPE}"
echo " Does Emacs use -lm17n-flt? ${HAVE_M17N_FLT}"
echo " Does Emacs use -lotf? ${HAVE_LIBOTF}"
echo " Does Emacs use -lxft? ${HAVE_XFT}"
echo " Does Emacs use X toolkit scroll bars? ${USE_TOOLKIT_SCROLL_BARS}"
echo
@ -24985,10 +25220,11 @@ X_TOOLKIT_TYPE!$X_TOOLKIT_TYPE$ac_delim
machfile!$machfile$ac_delim
opsysfile!$opsysfile$ac_delim
carbon_appdir!$carbon_appdir$ac_delim
ns_appdir!$ns_appdir$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 22; then
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 23; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
@ -25449,9 +25685,6 @@ if test ! -f src/.gdbinit && test -f $srcdir/src/.gdbinit; then
echo source $srcdir/src/.gdbinit > src/.gdbinit
fi
# This is how we know whether to re-run configure in certain cases.
touch src/config.stamp
;;
esac

View file

@ -21,7 +21,7 @@ dnl
dnl You should have received a copy of the GNU General Public License
dnl along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
AC_PREREQ(2.61)dnl
AC_PREREQ(2.61)
AC_INIT(emacs, 23.0.60)
AC_CONFIG_HEADER(src/config.h:src/config.in)
AC_CONFIG_SRCDIR(src/lisp.h)
@ -142,6 +142,7 @@ OPTION_DEFAULT_ON([toolkit-scroll-bars],[don't use Motif or Xaw3d scroll bars])
OPTION_DEFAULT_ON([xaw3d],[don't use Xaw3d])
OPTION_DEFAULT_ON([xim],[don't use X11 XIM])
OPTION_DEFAULT_OFF([carbon],[use Carbon GUI on Mac OS X. This is unsupported!])
OPTION_DEFAULT_OFF([ns],[use nextstep (Cocoa or GNUstep) windowing system])
OPTION_DEFAULT_ON([gpm],[don't use -lgpm for mouse support on a GNU/Linux console])
OPTION_DEFAULT_ON([dbus],[don't compile with D-Bus support])
@ -175,6 +176,16 @@ AC_ARG_ENABLE(carbon-app,
[DIR=/Application]])],
[ carbon_appdir_x=${enableval}])
AC_ARG_ENABLE(ns-app,
[[ --enable-ns-app[=DIR] [DIR=/Applications]
specify install directory for Emacs.app under NS]],
[ ns_appdir_x=${enableval}])
AC_ARG_ENABLE(cocoa-experimental-ctrl-g,
[ --enable-cocoa-experimental-ctrl-g enable experimental improved ctrl-g recognition],
EN_COCOA_EXPERIMENTAL_CTRL_G=yes,
EN_COCOA_EXPERIMENTAL_CTRL_G=no)
AC_ARG_ENABLE(asserts,
[AS_HELP_STRING([--enable-asserts], [compile code with asserts enabled])],
USE_XASSERTS=$enableval,
@ -283,16 +294,17 @@ machine='' opsys='' unported=no
case "${canonical}" in
## FreeBSD ports
*-*-freebsd* )
*-*-*freebsd* )
opsys=freebsd
case "${canonical}" in
alpha*-*-freebsd*) machine=alpha ;;
arm*-*-freebsd*) machine=arm ;;
ia64-*-freebsd*) machine=ia64 ;;
sparc-*-freebsd*) machine=sparc ;;
sparc64-*-freebsd*) machine=sparc ;;
powerpc-*-freebsd*) machine=macppc ;;
i[3456]86-*-freebsd*) machine=intel386 ;;
amd64-*-freebsd*|x86_64-*-freebsd*) machine=amdx86-64 ;;
amd64-*-freebsd*|x86_64-*-*freebsd*) machine=amdx86-64 ;;
esac
;;
@ -302,6 +314,7 @@ case "${canonical}" in
case "${canonical}" in
alpha*-*-kfreebsd*) machine=alpha ;;
ia64-*-kfreebsd*) machine=ia64 ;;
sparc-*-kfreebsd*) machine=sparc ;;
sparc64-*-kfreebsd*) machine=sparc ;;
powerpc-*-kfreebsd*) machine=macppc ;;
i[3456]86-*-kfreebsd*) machine=intel386 ;;
@ -1221,6 +1234,50 @@ if test "${HAVE_CARBON}" = yes; then
window_system=mac
fi
HAVE_NS=no
COCOA=no
GNUSTEP=no
tmp_CPPFLAGS="$CPPFLAGS"
tmp_CFLAGS="$CFLAGS"
CPPFLAGS="$CPPFLAGS -x objective-c"
CFLAGS="$CFLAGS -x objective-c"
if test "${with_ns}" != no; then
if test "${opsys}" = darwin; then
COCOA=yes
elif test -f /etc/GNUstep/GNUstep.conf; then
GNUSTEP=yes
GNUSTEP_SYSTEM_HEADERS="$(source /etc/GNUstep/GNUstep.conf; echo $GNUSTEP_SYSTEM_HEADERS)"
GNUSTEP_SYSTEM_LIBRARIES="$(source /etc/GNUstep/GNUstep.conf; echo $GNUSTEP_SYSTEM_LIBRARIES)"
CPPFLAGS="$CPPFLAGS -I${GNUSTEP_SYSTEM_HEADERS}"
CFLAGS="$CFLAGS -I${GNUSTEP_SYSTEM_HEADERS}"
REAL_CFLAGS="$REAL_CFLAGS -I${GNUSTEP_SYSTEM_HEADERS}"
LDFLAGS="$LDFLAGS -L${GNUSTEP_SYSTEM_LIBRARIES}"
fi
AC_CHECK_HEADER(AppKit/AppKit.h, HAVE_NS=yes)
fi
if test "${window_system}" = x11 && test "${HAVE_NS}" = yes; then
if test "${with_ns+set}" != set \
&& test "${ns_appdir_x+set}" != set; then
HAVE_NS=no
fi
fi
if test "${window_system}" = mac && test "${HAVE_NS}" = yes; then
if test "${with_ns+set}" != set \
&& test "${ns_appdir_x+set}" != set; then
HAVE_NS=no
else
HAVE_CARBON=no
fi
fi
if test "${HAVE_NS}" = yes; then
window_system=nextstep
with_xft=no
with_freetype=no
fi
CFLAGS="$tmp_CFLAGS"
CPPFLAGS="$tmp_CPPFLAGS"
case "${window_system}" in
x11 )
HAVE_X_WINDOWS=yes
@ -1238,7 +1295,7 @@ dnl use the toolkit if we have gtk, or X11R5 or newer.
* ) USE_X_TOOLKIT=maybe ;;
esac
;;
mac | none )
nextstep | mac | none )
HAVE_X_WINDOWS=no
HAVE_X11=no
USE_X_TOOLKIT=none
@ -1710,6 +1767,9 @@ if test "${with_toolkit_scroll_bars}" != "no"; then
elif test "${HAVE_CARBON}" = "yes"; then
AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
USE_TOOLKIT_SCROLL_BARS=yes
elif test "${HAVE_NS}" = "yes"; then
AC_DEFINE(USE_TOOLKIT_SCROLL_BARS)
USE_TOOLKIT_SCROLL_BARS=yes
fi
fi
@ -2019,6 +2079,30 @@ if test "${HAVE_CARBON}" = "yes"; then
# We also have mouse menus.
HAVE_MENUS=yes
fi
### Use NeXTstep API to implement GUI.
if test "${HAVE_NS}" = "yes"; then
AC_DEFINE(HAVE_NS, 1, [Define to 1 if you are using the NeXTstep API, either GNUstep or Cocoa on Mac OS X.])
## Specify the install directory
ns_appdir=
if test "${ns_appdir_x}" != ""; then
case ${ns_appdir_x} in
y | ye | yes) ns_appdir=/Applications ;;
* ) ns_appdir=${ns_appdir_x} ;;
esac
fi
if test "${COCOA}" = "yes"; then
AC_DEFINE(NS_IMPL_COCOA, 1, [Define to 1 if you are using NS windowing under MacOS X.])
fi
if test "${EN_COCOA_EXPERIMENTAL_CTRL_G}" = "yes"; then
AC_DEFINE(COCOA_EXPERIMENTAL_CTRL_G, 1, [Define to 1 if you are trying experimental enhanced Ctrl-g support using NS windowing under MacOS X.])
fi
if test "${GNUSTEP}" = "yes"; then
AC_DEFINE(NS_IMPL_GNUSTEP, 1, [Define to 1 if you are using NS windowing under GNUstep.])
fi
# We also have mouse menus.
HAVE_MENUS=yes
fi
### Use session management (-lSM -lICE) if available
HAVE_X_SM=no
@ -2414,6 +2498,7 @@ AC_SUBST(machfile)
AC_SUBST(opsysfile)
AC_SUBST(GETLOADAVG_LIBS)
AC_SUBST(carbon_appdir)
AC_SUBST(ns_appdir)
AC_DEFINE_UNQUOTED(EMACS_CONFIGURATION, "${canonical}",
[Define to the canonical Emacs configuration name.])
@ -2503,8 +2588,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
])dnl
AH_BOTTOM([
/* If we're using any sort of window system, define some consequences. */
#ifdef HAVE_X_WINDOWS
/* If we're using X11/Carbon/GNUstep, define some consequences. */
#if defined HAVE_X_WINDOWS || defined(HAVE_CARBON) || defined(HAVE_NS)
#define HAVE_WINDOW_SYSTEM
#define MULTI_KBOARD
#define HAVE_MOUSE
@ -2516,13 +2601,15 @@ AH_BOTTOM([
#define MULTI_KBOARD
#endif
/* If we're using the Carbon API on Mac OS X, define a few more
variables as well. */
#ifdef HAVE_CARBON
#define HAVE_WINDOW_SYSTEM
#define HAVE_MOUSE
/* Sadly for now, GNUstep dump does not work. */
#ifdef NS_IMPL_GNUSTEP
#define CANNOT_DUMP
#endif
/* PENDING: These are used for the Carbon port only. */
#undef MAC_OS
#undef MAC_OSX
/* Define USER_FULL_NAME to return a string
that is the user's full name.
It can assume that the variable `pw'
@ -2575,6 +2662,28 @@ AH_BOTTOM([
#include config_opsysfile
#include config_machfile
/* Set up some defines, C and LD flags for NeXTstep interface on GNUstep.
(There is probably a better place to do this, but right now the Cocoa
side does this in s/darwin.h, following the Carbon port, and we cannot
parallel this exactly since GNUstep is multi-OS. */
#ifdef HAVE_NS
# ifdef C_SWITCH_SYSTEM
# undef C_SWITCH_SYSTEM
# endif
# ifdef NS_IMPL_GNUSTEP
/* See also .m.o rule in Makefile.in */
# define C_SWITCH_X_SYSTEM -MMD -MP -D_REENTRANT -fPIC -fno-strict-aliasing
# define LD_SWITCH_SITE -lgnustep-gui -lgnustep-base -lobjc $(CONFIG_SYSTEM_LIBS) -lpthread
# define GNU_OBJC_CFLAGS -fgnu-runtime -Wno-import -fconstant-string-class=NSConstantString -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGSWARN -DGSDIAGNOSE
# define OTHER_FILES ns-app
# else /* COCOA */
# define C_SWITCH_X_SYSTEM
# define GNU_OBJC_CFLAGS
# endif /* COCOA */
#endif /* HAVE_NS */
/* If no remapping takes place, static variables cannot be dumped as
pure, so don't worry about the `static' keyword. */
#ifdef NO_REMAP

View file

@ -1,3 +1,8 @@
2008-07-15 Adrian Robert <Adrian.B.Robert@gmail.com>
* ns-emacs.texi: New file, documents features of Emacs port under
NeXTstep windowing.
2008-07-15 Chong Yidong <cyd@stupidchicken.com>
* entering.texi (Entering Emacs): Update prev node.

1019
doc/emacs/ns-emacs.texi Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,8 @@
2008-07-15 Adrian Robert <Adrian.B.Robert@gmail.com>
* Emacs.clr: New file, add support for X color names to NS display
implementations.
2008-07-12 Juri Linkov <juri@jurta.org>
* HELLO: Use more correct IPA characters for English pronunciation.

758
etc/Emacs.clr Normal file
View file

@ -0,0 +1,758 @@
757
0 1.000 0.980 0.980 1.0 snow
0 0.973 0.973 1.000 1.0 ghost white
0 0.973 0.973 1.000 1.0 GhostWhite
0 0.961 0.961 0.961 1.0 white smoke
0 0.961 0.961 0.961 1.0 WhiteSmoke
0 0.863 0.863 0.863 1.0 gainsboro
0 1.000 0.980 0.941 1.0 floral white
0 1.000 0.980 0.941 1.0 FloralWhite
0 0.992 0.961 0.902 1.0 old lace
0 0.992 0.961 0.902 1.0 OldLace
0 0.980 0.941 0.902 1.0 linen
0 0.980 0.922 0.843 1.0 antique white
0 0.980 0.922 0.843 1.0 AntiqueWhite
0 1.000 0.937 0.835 1.0 papaya whip
0 1.000 0.937 0.835 1.0 PapayaWhip
0 1.000 0.922 0.804 1.0 blanched almond
0 1.000 0.922 0.804 1.0 BlanchedAlmond
0 1.000 0.894 0.769 1.0 bisque
0 1.000 0.855 0.725 1.0 peach puff
0 1.000 0.855 0.725 1.0 PeachPuff
0 1.000 0.871 0.678 1.0 navajo white
0 1.000 0.871 0.678 1.0 NavajoWhite
0 1.000 0.894 0.710 1.0 moccasin
0 1.000 0.973 0.863 1.0 cornsilk
0 1.000 1.000 0.941 1.0 ivory
0 1.000 0.980 0.804 1.0 lemon chiffon
0 1.000 0.980 0.804 1.0 LemonChiffon
0 1.000 0.961 0.933 1.0 seashell
0 0.941 1.000 0.941 1.0 honeydew
0 0.961 1.000 0.980 1.0 mint cream
0 0.961 1.000 0.980 1.0 MintCream
0 0.941 1.000 1.000 1.0 azure
0 0.941 0.973 1.000 1.0 alice blue
0 0.941 0.973 1.000 1.0 AliceBlue
0 0.902 0.902 0.980 1.0 lavender
0 1.000 0.941 0.961 1.0 lavender blush
0 1.000 0.941 0.961 1.0 LavenderBlush
0 1.000 0.894 0.882 1.0 misty rose
0 1.000 0.894 0.882 1.0 MistyRose
0 1.000 1.000 1.000 1.0 white
0 0.000 0.000 0.000 1.0 black
0 0.184 0.310 0.310 1.0 dark slate gray
0 0.184 0.310 0.310 1.0 DarkSlateGray
0 0.184 0.310 0.310 1.0 dark slate grey
0 0.184 0.310 0.310 1.0 DarkSlateGrey
0 0.412 0.412 0.412 1.0 dim gray
0 0.412 0.412 0.412 1.0 DimGray
0 0.412 0.412 0.412 1.0 dim grey
0 0.412 0.412 0.412 1.0 DimGrey
0 0.439 0.502 0.565 1.0 slate gray
0 0.439 0.502 0.565 1.0 SlateGray
0 0.439 0.502 0.565 1.0 slate grey
0 0.439 0.502 0.565 1.0 SlateGrey
0 0.467 0.533 0.600 1.0 light slate gray
0 0.467 0.533 0.600 1.0 LightSlateGray
0 0.467 0.533 0.600 1.0 light slate grey
0 0.467 0.533 0.600 1.0 LightSlateGrey
0 0.745 0.745 0.745 1.0 gray
0 0.745 0.745 0.745 1.0 grey
0 0.827 0.827 0.827 1.0 light grey
0 0.827 0.827 0.827 1.0 LightGrey
0 0.827 0.827 0.827 1.0 light gray
0 0.827 0.827 0.827 1.0 LightGray
0 0.098 0.098 0.439 1.0 midnight blue
0 0.098 0.098 0.439 1.0 MidnightBlue
0 0.000 0.000 0.502 1.0 navy
0 0.000 0.000 0.502 1.0 navy blue
0 0.000 0.000 0.502 1.0 NavyBlue
0 0.392 0.584 0.929 1.0 cornflower blue
0 0.392 0.584 0.929 1.0 CornflowerBlue
0 0.282 0.239 0.545 1.0 dark slate blue
0 0.282 0.239 0.545 1.0 DarkSlateBlue
0 0.416 0.353 0.804 1.0 slate blue
0 0.416 0.353 0.804 1.0 SlateBlue
0 0.482 0.408 0.933 1.0 medium slate blue
0 0.482 0.408 0.933 1.0 MediumSlateBlue
0 0.518 0.439 1.000 1.0 light slate blue
0 0.518 0.439 1.000 1.0 LightSlateBlue
0 0.000 0.000 0.804 1.0 medium blue
0 0.000 0.000 0.804 1.0 MediumBlue
0 0.255 0.412 0.882 1.0 royal blue
0 0.255 0.412 0.882 1.0 RoyalBlue
0 0.000 0.000 1.000 1.0 blue
0 0.118 0.565 1.000 1.0 dodger blue
0 0.118 0.565 1.000 1.0 DodgerBlue
0 0.000 0.749 1.000 1.0 deep sky blue
0 0.000 0.749 1.000 1.0 DeepSkyBlue
0 0.529 0.808 0.922 1.0 sky blue
0 0.529 0.808 0.922 1.0 SkyBlue
0 0.529 0.808 0.980 1.0 light sky blue
0 0.529 0.808 0.980 1.0 LightSkyBlue
0 0.275 0.510 0.706 1.0 steel blue
0 0.275 0.510 0.706 1.0 SteelBlue
0 0.690 0.769 0.871 1.0 light steel blue
0 0.690 0.769 0.871 1.0 LightSteelBlue
0 0.678 0.847 0.902 1.0 light blue
0 0.678 0.847 0.902 1.0 LightBlue
0 0.690 0.878 0.902 1.0 powder blue
0 0.690 0.878 0.902 1.0 PowderBlue
0 0.686 0.933 0.933 1.0 pale turquoise
0 0.686 0.933 0.933 1.0 PaleTurquoise
0 0.000 0.808 0.820 1.0 dark turquoise
0 0.000 0.808 0.820 1.0 DarkTurquoise
0 0.282 0.820 0.800 1.0 medium turquoise
0 0.282 0.820 0.800 1.0 MediumTurquoise
0 0.251 0.878 0.816 1.0 turquoise
0 0.000 1.000 1.000 1.0 cyan
0 0.878 1.000 1.000 1.0 light cyan
0 0.878 1.000 1.000 1.0 LightCyan
0 0.373 0.620 0.627 1.0 cadet blue
0 0.373 0.620 0.627 1.0 CadetBlue
0 0.400 0.804 0.667 1.0 medium aquamarine
0 0.400 0.804 0.667 1.0 MediumAquamarine
0 0.498 1.000 0.831 1.0 aquamarine
0 0.000 0.392 0.000 1.0 dark green
0 0.000 0.392 0.000 1.0 DarkGreen
0 0.333 0.420 0.184 1.0 dark olive green
0 0.333 0.420 0.184 1.0 DarkOliveGreen
0 0.561 0.737 0.561 1.0 dark sea green
0 0.561 0.737 0.561 1.0 DarkSeaGreen
0 0.180 0.545 0.341 1.0 sea green
0 0.180 0.545 0.341 1.0 SeaGreen
0 0.235 0.702 0.443 1.0 medium sea green
0 0.235 0.702 0.443 1.0 MediumSeaGreen
0 0.125 0.698 0.667 1.0 light sea green
0 0.125 0.698 0.667 1.0 LightSeaGreen
0 0.596 0.984 0.596 1.0 pale green
0 0.596 0.984 0.596 1.0 PaleGreen
0 0.000 1.000 0.498 1.0 spring green
0 0.000 1.000 0.498 1.0 SpringGreen
0 0.486 0.988 0.000 1.0 lawn green
0 0.486 0.988 0.000 1.0 LawnGreen
0 0.000 1.000 0.000 1.0 green
0 0.498 1.000 0.000 1.0 chartreuse
0 0.000 0.980 0.604 1.0 medium spring green
0 0.000 0.980 0.604 1.0 MediumSpringGreen
0 0.678 1.000 0.184 1.0 green yellow
0 0.678 1.000 0.184 1.0 GreenYellow
0 0.196 0.804 0.196 1.0 lime green
0 0.196 0.804 0.196 1.0 LimeGreen
0 0.604 0.804 0.196 1.0 yellow green
0 0.604 0.804 0.196 1.0 YellowGreen
0 0.133 0.545 0.133 1.0 forest green
0 0.133 0.545 0.133 1.0 ForestGreen
0 0.420 0.557 0.137 1.0 olive drab
0 0.420 0.557 0.137 1.0 OliveDrab
0 0.741 0.718 0.420 1.0 dark khaki
0 0.741 0.718 0.420 1.0 DarkKhaki
0 0.941 0.902 0.549 1.0 khaki
0 0.933 0.910 0.667 1.0 pale goldenrod
0 0.933 0.910 0.667 1.0 PaleGoldenrod
0 0.980 0.980 0.824 1.0 light goldenrod yellow
0 0.980 0.980 0.824 1.0 LightGoldenrodYellow
0 1.000 1.000 0.878 1.0 light yellow
0 1.000 1.000 0.878 1.0 LightYellow
0 1.000 1.000 0.000 1.0 yellow
0 1.000 0.843 0.000 1.0 gold
0 0.933 0.867 0.510 1.0 light goldenrod
0 0.933 0.867 0.510 1.0 LightGoldenrod
0 0.855 0.647 0.125 1.0 goldenrod
0 0.722 0.525 0.043 1.0 dark goldenrod
0 0.722 0.525 0.043 1.0 DarkGoldenrod
0 0.737 0.561 0.561 1.0 rosy brown
0 0.737 0.561 0.561 1.0 RosyBrown
0 0.804 0.361 0.361 1.0 indian red
0 0.804 0.361 0.361 1.0 IndianRed
0 0.545 0.271 0.075 1.0 saddle brown
0 0.545 0.271 0.075 1.0 SaddleBrown
0 0.627 0.322 0.176 1.0 sienna
0 0.804 0.522 0.247 1.0 peru
0 0.871 0.722 0.529 1.0 burlywood
0 0.961 0.961 0.863 1.0 beige
0 0.961 0.871 0.702 1.0 wheat
0 0.957 0.643 0.376 1.0 sandy brown
0 0.957 0.643 0.376 1.0 SandyBrown
0 0.824 0.706 0.549 1.0 tan
0 0.824 0.412 0.118 1.0 chocolate
0 0.698 0.133 0.133 1.0 firebrick
0 0.647 0.165 0.165 1.0 brown
0 0.914 0.588 0.478 1.0 dark salmon
0 0.914 0.588 0.478 1.0 DarkSalmon
0 0.980 0.502 0.447 1.0 salmon
0 1.000 0.627 0.478 1.0 light salmon
0 1.000 0.627 0.478 1.0 LightSalmon
0 1.000 0.647 0.000 1.0 orange
0 1.000 0.549 0.000 1.0 dark orange
0 1.000 0.549 0.000 1.0 DarkOrange
0 1.000 0.498 0.314 1.0 coral
0 0.941 0.502 0.502 1.0 light coral
0 0.941 0.502 0.502 1.0 LightCoral
0 1.000 0.388 0.278 1.0 tomato
0 1.000 0.271 0.000 1.0 orange red
0 1.000 0.271 0.000 1.0 OrangeRed
0 1.000 0.000 0.000 1.0 red
0 1.000 0.412 0.706 1.0 hot pink
0 1.000 0.412 0.706 1.0 HotPink
0 1.000 0.078 0.576 1.0 deep pink
0 1.000 0.078 0.576 1.0 DeepPink
0 1.000 0.753 0.796 1.0 pink
0 1.000 0.714 0.757 1.0 light pink
0 1.000 0.714 0.757 1.0 LightPink
0 0.859 0.439 0.576 1.0 pale violet red
0 0.859 0.439 0.576 1.0 PaleVioletRed
0 0.690 0.188 0.376 1.0 maroon
0 0.780 0.082 0.522 1.0 medium violet red
0 0.780 0.082 0.522 1.0 MediumVioletRed
0 0.816 0.125 0.565 1.0 violet red
0 0.816 0.125 0.565 1.0 VioletRed
0 1.000 0.000 1.000 1.0 magenta
0 0.933 0.510 0.933 1.0 violet
0 0.867 0.627 0.867 1.0 plum
0 0.855 0.439 0.839 1.0 orchid
0 0.729 0.333 0.827 1.0 medium orchid
0 0.729 0.333 0.827 1.0 MediumOrchid
0 0.600 0.196 0.800 1.0 dark orchid
0 0.600 0.196 0.800 1.0 DarkOrchid
0 0.580 0.000 0.827 1.0 dark violet
0 0.580 0.000 0.827 1.0 DarkViolet
0 0.541 0.169 0.886 1.0 blue violet
0 0.541 0.169 0.886 1.0 BlueViolet
0 0.627 0.125 0.941 1.0 purple
0 0.576 0.439 0.859 1.0 medium purple
0 0.576 0.439 0.859 1.0 MediumPurple
0 0.847 0.749 0.847 1.0 thistle
0 1.000 0.980 0.980 1.0 snow1
0 0.933 0.914 0.914 1.0 snow2
0 0.804 0.788 0.788 1.0 snow3
0 0.545 0.537 0.537 1.0 snow4
0 1.000 0.961 0.933 1.0 seashell1
0 0.933 0.898 0.871 1.0 seashell2
0 0.804 0.773 0.749 1.0 seashell3
0 0.545 0.525 0.510 1.0 seashell4
0 1.000 0.937 0.859 1.0 AntiqueWhite1
0 0.933 0.875 0.800 1.0 AntiqueWhite2
0 0.804 0.753 0.690 1.0 AntiqueWhite3
0 0.545 0.514 0.471 1.0 AntiqueWhite4
0 1.000 0.894 0.769 1.0 bisque1
0 0.933 0.835 0.718 1.0 bisque2
0 0.804 0.718 0.620 1.0 bisque3
0 0.545 0.490 0.420 1.0 bisque4
0 1.000 0.855 0.725 1.0 PeachPuff1
0 0.933 0.796 0.678 1.0 PeachPuff2
0 0.804 0.686 0.584 1.0 PeachPuff3
0 0.545 0.467 0.396 1.0 PeachPuff4
0 1.000 0.871 0.678 1.0 NavajoWhite1
0 0.933 0.812 0.631 1.0 NavajoWhite2
0 0.804 0.702 0.545 1.0 NavajoWhite3
0 0.545 0.475 0.369 1.0 NavajoWhite4
0 1.000 0.980 0.804 1.0 LemonChiffon1
0 0.933 0.914 0.749 1.0 LemonChiffon2
0 0.804 0.788 0.647 1.0 LemonChiffon3
0 0.545 0.537 0.439 1.0 LemonChiffon4
0 1.000 0.973 0.863 1.0 cornsilk1
0 0.933 0.910 0.804 1.0 cornsilk2
0 0.804 0.784 0.694 1.0 cornsilk3
0 0.545 0.533 0.471 1.0 cornsilk4
0 1.000 1.000 0.941 1.0 ivory1
0 0.933 0.933 0.878 1.0 ivory2
0 0.804 0.804 0.757 1.0 ivory3
0 0.545 0.545 0.514 1.0 ivory4
0 0.941 1.000 0.941 1.0 honeydew1
0 0.878 0.933 0.878 1.0 honeydew2
0 0.757 0.804 0.757 1.0 honeydew3
0 0.514 0.545 0.514 1.0 honeydew4
0 1.000 0.941 0.961 1.0 LavenderBlush1
0 0.933 0.878 0.898 1.0 LavenderBlush2
0 0.804 0.757 0.773 1.0 LavenderBlush3
0 0.545 0.514 0.525 1.0 LavenderBlush4
0 1.000 0.894 0.882 1.0 MistyRose1
0 0.933 0.835 0.824 1.0 MistyRose2
0 0.804 0.718 0.710 1.0 MistyRose3
0 0.545 0.490 0.482 1.0 MistyRose4
0 0.941 1.000 1.000 1.0 azure1
0 0.878 0.933 0.933 1.0 azure2
0 0.757 0.804 0.804 1.0 azure3
0 0.514 0.545 0.545 1.0 azure4
0 0.514 0.435 1.000 1.0 SlateBlue1
0 0.478 0.404 0.933 1.0 SlateBlue2
0 0.412 0.349 0.804 1.0 SlateBlue3
0 0.278 0.235 0.545 1.0 SlateBlue4
0 0.282 0.463 1.000 1.0 RoyalBlue1
0 0.263 0.431 0.933 1.0 RoyalBlue2
0 0.227 0.373 0.804 1.0 RoyalBlue3
0 0.153 0.251 0.545 1.0 RoyalBlue4
0 0.000 0.000 1.000 1.0 blue1
0 0.000 0.000 0.933 1.0 blue2
0 0.000 0.000 0.804 1.0 blue3
0 0.000 0.000 0.545 1.0 blue4
0 0.118 0.565 1.000 1.0 DodgerBlue1
0 0.110 0.525 0.933 1.0 DodgerBlue2
0 0.094 0.455 0.804 1.0 DodgerBlue3
0 0.063 0.306 0.545 1.0 DodgerBlue4
0 0.388 0.722 1.000 1.0 SteelBlue1
0 0.361 0.675 0.933 1.0 SteelBlue2
0 0.310 0.580 0.804 1.0 SteelBlue3
0 0.212 0.392 0.545 1.0 SteelBlue4
0 0.000 0.749 1.000 1.0 DeepSkyBlue1
0 0.000 0.698 0.933 1.0 DeepSkyBlue2
0 0.000 0.604 0.804 1.0 DeepSkyBlue3
0 0.000 0.408 0.545 1.0 DeepSkyBlue4
0 0.529 0.808 1.000 1.0 SkyBlue1
0 0.494 0.753 0.933 1.0 SkyBlue2
0 0.424 0.651 0.804 1.0 SkyBlue3
0 0.290 0.439 0.545 1.0 SkyBlue4
0 0.690 0.886 1.000 1.0 LightSkyBlue1
0 0.643 0.827 0.933 1.0 LightSkyBlue2
0 0.553 0.714 0.804 1.0 LightSkyBlue3
0 0.376 0.482 0.545 1.0 LightSkyBlue4
0 0.776 0.886 1.000 1.0 SlateGray1
0 0.725 0.827 0.933 1.0 SlateGray2
0 0.624 0.714 0.804 1.0 SlateGray3
0 0.424 0.482 0.545 1.0 SlateGray4
0 0.792 0.882 1.000 1.0 LightSteelBlue1
0 0.737 0.824 0.933 1.0 LightSteelBlue2
0 0.635 0.710 0.804 1.0 LightSteelBlue3
0 0.431 0.482 0.545 1.0 LightSteelBlue4
0 0.749 0.937 1.000 1.0 LightBlue1
0 0.698 0.875 0.933 1.0 LightBlue2
0 0.604 0.753 0.804 1.0 LightBlue3
0 0.408 0.514 0.545 1.0 LightBlue4
0 0.878 1.000 1.000 1.0 LightCyan1
0 0.820 0.933 0.933 1.0 LightCyan2
0 0.706 0.804 0.804 1.0 LightCyan3
0 0.478 0.545 0.545 1.0 LightCyan4
0 0.733 1.000 1.000 1.0 PaleTurquoise1
0 0.682 0.933 0.933 1.0 PaleTurquoise2
0 0.588 0.804 0.804 1.0 PaleTurquoise3
0 0.400 0.545 0.545 1.0 PaleTurquoise4
0 0.596 0.961 1.000 1.0 CadetBlue1
0 0.557 0.898 0.933 1.0 CadetBlue2
0 0.478 0.773 0.804 1.0 CadetBlue3
0 0.325 0.525 0.545 1.0 CadetBlue4
0 0.000 0.961 1.000 1.0 turquoise1
0 0.000 0.898 0.933 1.0 turquoise2
0 0.000 0.773 0.804 1.0 turquoise3
0 0.000 0.525 0.545 1.0 turquoise4
0 0.000 1.000 1.000 1.0 cyan1
0 0.000 0.933 0.933 1.0 cyan2
0 0.000 0.804 0.804 1.0 cyan3
0 0.000 0.545 0.545 1.0 cyan4
0 0.592 1.000 1.000 1.0 DarkSlateGray1
0 0.553 0.933 0.933 1.0 DarkSlateGray2
0 0.475 0.804 0.804 1.0 DarkSlateGray3
0 0.322 0.545 0.545 1.0 DarkSlateGray4
0 0.498 1.000 0.831 1.0 aquamarine1
0 0.463 0.933 0.776 1.0 aquamarine2
0 0.400 0.804 0.667 1.0 aquamarine3
0 0.271 0.545 0.455 1.0 aquamarine4
0 0.757 1.000 0.757 1.0 DarkSeaGreen1
0 0.706 0.933 0.706 1.0 DarkSeaGreen2
0 0.608 0.804 0.608 1.0 DarkSeaGreen3
0 0.412 0.545 0.412 1.0 DarkSeaGreen4
0 0.329 1.000 0.624 1.0 SeaGreen1
0 0.306 0.933 0.580 1.0 SeaGreen2
0 0.263 0.804 0.502 1.0 SeaGreen3
0 0.180 0.545 0.341 1.0 SeaGreen4
0 0.604 1.000 0.604 1.0 PaleGreen1
0 0.565 0.933 0.565 1.0 PaleGreen2
0 0.486 0.804 0.486 1.0 PaleGreen3
0 0.329 0.545 0.329 1.0 PaleGreen4
0 0.000 1.000 0.498 1.0 SpringGreen1
0 0.000 0.933 0.463 1.0 SpringGreen2
0 0.000 0.804 0.400 1.0 SpringGreen3
0 0.000 0.545 0.271 1.0 SpringGreen4
0 0.000 1.000 0.000 1.0 green1
0 0.000 0.933 0.000 1.0 green2
0 0.000 0.804 0.000 1.0 green3
0 0.000 0.545 0.000 1.0 green4
0 0.498 1.000 0.000 1.0 chartreuse1
0 0.463 0.933 0.000 1.0 chartreuse2
0 0.400 0.804 0.000 1.0 chartreuse3
0 0.271 0.545 0.000 1.0 chartreuse4
0 0.753 1.000 0.243 1.0 OliveDrab1
0 0.702 0.933 0.227 1.0 OliveDrab2
0 0.604 0.804 0.196 1.0 OliveDrab3
0 0.412 0.545 0.133 1.0 OliveDrab4
0 0.792 1.000 0.439 1.0 DarkOliveGreen1
0 0.737 0.933 0.408 1.0 DarkOliveGreen2
0 0.635 0.804 0.353 1.0 DarkOliveGreen3
0 0.431 0.545 0.239 1.0 DarkOliveGreen4
0 1.000 0.965 0.561 1.0 khaki1
0 0.933 0.902 0.522 1.0 khaki2
0 0.804 0.776 0.451 1.0 khaki3
0 0.545 0.525 0.306 1.0 khaki4
0 1.000 0.925 0.545 1.0 LightGoldenrod1
0 0.933 0.863 0.510 1.0 LightGoldenrod2
0 0.804 0.745 0.439 1.0 LightGoldenrod3
0 0.545 0.506 0.298 1.0 LightGoldenrod4
0 1.000 1.000 0.878 1.0 LightYellow1
0 0.933 0.933 0.820 1.0 LightYellow2
0 0.804 0.804 0.706 1.0 LightYellow3
0 0.545 0.545 0.478 1.0 LightYellow4
0 1.000 1.000 0.000 1.0 yellow1
0 0.933 0.933 0.000 1.0 yellow2
0 0.804 0.804 0.000 1.0 yellow3
0 0.545 0.545 0.000 1.0 yellow4
0 1.000 0.843 0.000 1.0 gold1
0 0.933 0.788 0.000 1.0 gold2
0 0.804 0.678 0.000 1.0 gold3
0 0.545 0.459 0.000 1.0 gold4
0 1.000 0.757 0.145 1.0 goldenrod1
0 0.933 0.706 0.133 1.0 goldenrod2
0 0.804 0.608 0.114 1.0 goldenrod3
0 0.545 0.412 0.078 1.0 goldenrod4
0 1.000 0.725 0.059 1.0 DarkGoldenrod1
0 0.933 0.678 0.055 1.0 DarkGoldenrod2
0 0.804 0.584 0.047 1.0 DarkGoldenrod3
0 0.545 0.396 0.031 1.0 DarkGoldenrod4
0 1.000 0.757 0.757 1.0 RosyBrown1
0 0.933 0.706 0.706 1.0 RosyBrown2
0 0.804 0.608 0.608 1.0 RosyBrown3
0 0.545 0.412 0.412 1.0 RosyBrown4
0 1.000 0.416 0.416 1.0 IndianRed1
0 0.933 0.388 0.388 1.0 IndianRed2
0 0.804 0.333 0.333 1.0 IndianRed3
0 0.545 0.227 0.227 1.0 IndianRed4
0 1.000 0.510 0.278 1.0 sienna1
0 0.933 0.475 0.259 1.0 sienna2
0 0.804 0.408 0.224 1.0 sienna3
0 0.545 0.278 0.149 1.0 sienna4
0 1.000 0.827 0.608 1.0 burlywood1
0 0.933 0.773 0.569 1.0 burlywood2
0 0.804 0.667 0.490 1.0 burlywood3
0 0.545 0.451 0.333 1.0 burlywood4
0 1.000 0.906 0.729 1.0 wheat1
0 0.933 0.847 0.682 1.0 wheat2
0 0.804 0.729 0.588 1.0 wheat3
0 0.545 0.494 0.400 1.0 wheat4
0 1.000 0.647 0.310 1.0 tan1
0 0.933 0.604 0.286 1.0 tan2
0 0.804 0.522 0.247 1.0 tan3
0 0.545 0.353 0.169 1.0 tan4
0 1.000 0.498 0.141 1.0 chocolate1
0 0.933 0.463 0.129 1.0 chocolate2
0 0.804 0.400 0.114 1.0 chocolate3
0 0.545 0.271 0.075 1.0 chocolate4
0 1.000 0.188 0.188 1.0 firebrick1
0 0.933 0.173 0.173 1.0 firebrick2
0 0.804 0.149 0.149 1.0 firebrick3
0 0.545 0.102 0.102 1.0 firebrick4
0 1.000 0.251 0.251 1.0 brown1
0 0.933 0.231 0.231 1.0 brown2
0 0.804 0.200 0.200 1.0 brown3
0 0.545 0.137 0.137 1.0 brown4
0 1.000 0.549 0.412 1.0 salmon1
0 0.933 0.510 0.384 1.0 salmon2
0 0.804 0.439 0.329 1.0 salmon3
0 0.545 0.298 0.224 1.0 salmon4
0 1.000 0.627 0.478 1.0 LightSalmon1
0 0.933 0.584 0.447 1.0 LightSalmon2
0 0.804 0.506 0.384 1.0 LightSalmon3
0 0.545 0.341 0.259 1.0 LightSalmon4
0 1.000 0.647 0.000 1.0 orange1
0 0.933 0.604 0.000 1.0 orange2
0 0.804 0.522 0.000 1.0 orange3
0 0.545 0.353 0.000 1.0 orange4
0 1.000 0.498 0.000 1.0 DarkOrange1
0 0.933 0.463 0.000 1.0 DarkOrange2
0 0.804 0.400 0.000 1.0 DarkOrange3
0 0.545 0.271 0.000 1.0 DarkOrange4
0 1.000 0.447 0.337 1.0 coral1
0 0.933 0.416 0.314 1.0 coral2
0 0.804 0.357 0.271 1.0 coral3
0 0.545 0.243 0.184 1.0 coral4
0 1.000 0.388 0.278 1.0 tomato1
0 0.933 0.361 0.259 1.0 tomato2
0 0.804 0.310 0.224 1.0 tomato3
0 0.545 0.212 0.149 1.0 tomato4
0 1.000 0.271 0.000 1.0 OrangeRed1
0 0.933 0.251 0.000 1.0 OrangeRed2
0 0.804 0.216 0.000 1.0 OrangeRed3
0 0.545 0.145 0.000 1.0 OrangeRed4
0 1.000 0.000 0.000 1.0 red1
0 0.933 0.000 0.000 1.0 red2
0 0.804 0.000 0.000 1.0 red3
0 0.545 0.000 0.000 1.0 red4
0 1.000 0.078 0.576 1.0 DeepPink1
0 0.933 0.071 0.537 1.0 DeepPink2
0 0.804 0.063 0.463 1.0 DeepPink3
0 0.545 0.039 0.314 1.0 DeepPink4
0 1.000 0.431 0.706 1.0 HotPink1
0 0.933 0.416 0.655 1.0 HotPink2
0 0.804 0.376 0.565 1.0 HotPink3
0 0.545 0.227 0.384 1.0 HotPink4
0 1.000 0.710 0.773 1.0 pink1
0 0.933 0.663 0.722 1.0 pink2
0 0.804 0.569 0.620 1.0 pink3
0 0.545 0.388 0.424 1.0 pink4
0 1.000 0.682 0.725 1.0 LightPink1
0 0.933 0.635 0.678 1.0 LightPink2
0 0.804 0.549 0.584 1.0 LightPink3
0 0.545 0.373 0.396 1.0 LightPink4
0 1.000 0.510 0.671 1.0 PaleVioletRed1
0 0.933 0.475 0.624 1.0 PaleVioletRed2
0 0.804 0.408 0.537 1.0 PaleVioletRed3
0 0.545 0.278 0.365 1.0 PaleVioletRed4
0 1.000 0.204 0.702 1.0 maroon1
0 0.933 0.188 0.655 1.0 maroon2
0 0.804 0.161 0.565 1.0 maroon3
0 0.545 0.110 0.384 1.0 maroon4
0 1.000 0.243 0.588 1.0 VioletRed1
0 0.933 0.227 0.549 1.0 VioletRed2
0 0.804 0.196 0.471 1.0 VioletRed3
0 0.545 0.133 0.322 1.0 VioletRed4
0 1.000 0.000 1.000 1.0 magenta1
0 0.933 0.000 0.933 1.0 magenta2
0 0.804 0.000 0.804 1.0 magenta3
0 0.545 0.000 0.545 1.0 magenta4
0 1.000 0.514 0.980 1.0 orchid1
0 0.933 0.478 0.914 1.0 orchid2
0 0.804 0.412 0.788 1.0 orchid3
0 0.545 0.278 0.537 1.0 orchid4
0 1.000 0.733 1.000 1.0 plum1
0 0.933 0.682 0.933 1.0 plum2
0 0.804 0.588 0.804 1.0 plum3
0 0.545 0.400 0.545 1.0 plum4
0 0.878 0.400 1.000 1.0 MediumOrchid1
0 0.820 0.373 0.933 1.0 MediumOrchid2
0 0.706 0.322 0.804 1.0 MediumOrchid3
0 0.478 0.216 0.545 1.0 MediumOrchid4
0 0.749 0.243 1.000 1.0 DarkOrchid1
0 0.698 0.227 0.933 1.0 DarkOrchid2
0 0.604 0.196 0.804 1.0 DarkOrchid3
0 0.408 0.133 0.545 1.0 DarkOrchid4
0 0.608 0.188 1.000 1.0 purple1
0 0.569 0.173 0.933 1.0 purple2
0 0.490 0.149 0.804 1.0 purple3
0 0.333 0.102 0.545 1.0 purple4
0 0.671 0.510 1.000 1.0 MediumPurple1
0 0.624 0.475 0.933 1.0 MediumPurple2
0 0.537 0.408 0.804 1.0 MediumPurple3
0 0.365 0.278 0.545 1.0 MediumPurple4
0 1.000 0.882 1.000 1.0 thistle1
0 0.933 0.824 0.933 1.0 thistle2
0 0.804 0.710 0.804 1.0 thistle3
0 0.545 0.482 0.545 1.0 thistle4
0 0.000 0.000 0.000 1.0 gray0
0 0.000 0.000 0.000 1.0 grey0
0 0.012 0.012 0.012 1.0 gray1
0 0.012 0.012 0.012 1.0 grey1
0 0.020 0.020 0.020 1.0 gray2
0 0.020 0.020 0.020 1.0 grey2
0 0.031 0.031 0.031 1.0 gray3
0 0.031 0.031 0.031 1.0 grey3
0 0.039 0.039 0.039 1.0 gray4
0 0.039 0.039 0.039 1.0 grey4
0 0.051 0.051 0.051 1.0 gray5
0 0.051 0.051 0.051 1.0 grey5
0 0.059 0.059 0.059 1.0 gray6
0 0.059 0.059 0.059 1.0 grey6
0 0.071 0.071 0.071 1.0 gray7
0 0.071 0.071 0.071 1.0 grey7
0 0.078 0.078 0.078 1.0 gray8
0 0.078 0.078 0.078 1.0 grey8
0 0.090 0.090 0.090 1.0 gray9
0 0.090 0.090 0.090 1.0 grey9
0 0.102 0.102 0.102 1.0 gray10
0 0.102 0.102 0.102 1.0 grey10
0 0.110 0.110 0.110 1.0 gray11
0 0.110 0.110 0.110 1.0 grey11
0 0.122 0.122 0.122 1.0 gray12
0 0.122 0.122 0.122 1.0 grey12
0 0.129 0.129 0.129 1.0 gray13
0 0.129 0.129 0.129 1.0 grey13
0 0.141 0.141 0.141 1.0 gray14
0 0.141 0.141 0.141 1.0 grey14
0 0.149 0.149 0.149 1.0 gray15
0 0.149 0.149 0.149 1.0 grey15
0 0.161 0.161 0.161 1.0 gray16
0 0.161 0.161 0.161 1.0 grey16
0 0.169 0.169 0.169 1.0 gray17
0 0.169 0.169 0.169 1.0 grey17
0 0.180 0.180 0.180 1.0 gray18
0 0.180 0.180 0.180 1.0 grey18
0 0.188 0.188 0.188 1.0 gray19
0 0.188 0.188 0.188 1.0 grey19
0 0.200 0.200 0.200 1.0 gray20
0 0.200 0.200 0.200 1.0 grey20
0 0.212 0.212 0.212 1.0 gray21
0 0.212 0.212 0.212 1.0 grey21
0 0.220 0.220 0.220 1.0 gray22
0 0.220 0.220 0.220 1.0 grey22
0 0.231 0.231 0.231 1.0 gray23
0 0.231 0.231 0.231 1.0 grey23
0 0.239 0.239 0.239 1.0 gray24
0 0.239 0.239 0.239 1.0 grey24
0 0.251 0.251 0.251 1.0 gray25
0 0.251 0.251 0.251 1.0 grey25
0 0.259 0.259 0.259 1.0 gray26
0 0.259 0.259 0.259 1.0 grey26
0 0.271 0.271 0.271 1.0 gray27
0 0.271 0.271 0.271 1.0 grey27
0 0.278 0.278 0.278 1.0 gray28
0 0.278 0.278 0.278 1.0 grey28
0 0.290 0.290 0.290 1.0 gray29
0 0.290 0.290 0.290 1.0 grey29
0 0.302 0.302 0.302 1.0 gray30
0 0.302 0.302 0.302 1.0 grey30
0 0.310 0.310 0.310 1.0 gray31
0 0.310 0.310 0.310 1.0 grey31
0 0.322 0.322 0.322 1.0 gray32
0 0.322 0.322 0.322 1.0 grey32
0 0.329 0.329 0.329 1.0 gray33
0 0.329 0.329 0.329 1.0 grey33
0 0.341 0.341 0.341 1.0 gray34
0 0.341 0.341 0.341 1.0 grey34
0 0.349 0.349 0.349 1.0 gray35
0 0.349 0.349 0.349 1.0 grey35
0 0.361 0.361 0.361 1.0 gray36
0 0.361 0.361 0.361 1.0 grey36
0 0.369 0.369 0.369 1.0 gray37
0 0.369 0.369 0.369 1.0 grey37
0 0.380 0.380 0.380 1.0 gray38
0 0.380 0.380 0.380 1.0 grey38
0 0.388 0.388 0.388 1.0 gray39
0 0.388 0.388 0.388 1.0 grey39
0 0.400 0.400 0.400 1.0 gray40
0 0.400 0.400 0.400 1.0 grey40
0 0.412 0.412 0.412 1.0 gray41
0 0.412 0.412 0.412 1.0 grey41
0 0.420 0.420 0.420 1.0 gray42
0 0.420 0.420 0.420 1.0 grey42
0 0.431 0.431 0.431 1.0 gray43
0 0.431 0.431 0.431 1.0 grey43
0 0.439 0.439 0.439 1.0 gray44
0 0.439 0.439 0.439 1.0 grey44
0 0.451 0.451 0.451 1.0 gray45
0 0.451 0.451 0.451 1.0 grey45
0 0.459 0.459 0.459 1.0 gray46
0 0.459 0.459 0.459 1.0 grey46
0 0.471 0.471 0.471 1.0 gray47
0 0.471 0.471 0.471 1.0 grey47
0 0.478 0.478 0.478 1.0 gray48
0 0.478 0.478 0.478 1.0 grey48
0 0.490 0.490 0.490 1.0 gray49
0 0.490 0.490 0.490 1.0 grey49
0 0.498 0.498 0.498 1.0 gray50
0 0.498 0.498 0.498 1.0 grey50
0 0.510 0.510 0.510 1.0 gray51
0 0.510 0.510 0.510 1.0 grey51
0 0.522 0.522 0.522 1.0 gray52
0 0.522 0.522 0.522 1.0 grey52
0 0.529 0.529 0.529 1.0 gray53
0 0.529 0.529 0.529 1.0 grey53
0 0.541 0.541 0.541 1.0 gray54
0 0.541 0.541 0.541 1.0 grey54
0 0.549 0.549 0.549 1.0 gray55
0 0.549 0.549 0.549 1.0 grey55
0 0.561 0.561 0.561 1.0 gray56
0 0.561 0.561 0.561 1.0 grey56
0 0.569 0.569 0.569 1.0 gray57
0 0.569 0.569 0.569 1.0 grey57
0 0.580 0.580 0.580 1.0 gray58
0 0.580 0.580 0.580 1.0 grey58
0 0.588 0.588 0.588 1.0 gray59
0 0.588 0.588 0.588 1.0 grey59
0 0.600 0.600 0.600 1.0 gray60
0 0.600 0.600 0.600 1.0 grey60
0 0.612 0.612 0.612 1.0 gray61
0 0.612 0.612 0.612 1.0 grey61
0 0.620 0.620 0.620 1.0 gray62
0 0.620 0.620 0.620 1.0 grey62
0 0.631 0.631 0.631 1.0 gray63
0 0.631 0.631 0.631 1.0 grey63
0 0.639 0.639 0.639 1.0 gray64
0 0.639 0.639 0.639 1.0 grey64
0 0.651 0.651 0.651 1.0 gray65
0 0.651 0.651 0.651 1.0 grey65
0 0.659 0.659 0.659 1.0 gray66
0 0.659 0.659 0.659 1.0 grey66
0 0.671 0.671 0.671 1.0 gray67
0 0.671 0.671 0.671 1.0 grey67
0 0.678 0.678 0.678 1.0 gray68
0 0.678 0.678 0.678 1.0 grey68
0 0.690 0.690 0.690 1.0 gray69
0 0.690 0.690 0.690 1.0 grey69
0 0.702 0.702 0.702 1.0 gray70
0 0.702 0.702 0.702 1.0 grey70
0 0.710 0.710 0.710 1.0 gray71
0 0.710 0.710 0.710 1.0 grey71
0 0.722 0.722 0.722 1.0 gray72
0 0.722 0.722 0.722 1.0 grey72
0 0.729 0.729 0.729 1.0 gray73
0 0.729 0.729 0.729 1.0 grey73
0 0.741 0.741 0.741 1.0 gray74
0 0.741 0.741 0.741 1.0 grey74
0 0.749 0.749 0.749 1.0 gray75
0 0.749 0.749 0.749 1.0 grey75
0 0.761 0.761 0.761 1.0 gray76
0 0.761 0.761 0.761 1.0 grey76
0 0.769 0.769 0.769 1.0 gray77
0 0.769 0.769 0.769 1.0 grey77
0 0.780 0.780 0.780 1.0 gray78
0 0.780 0.780 0.780 1.0 grey78
0 0.788 0.788 0.788 1.0 gray79
0 0.788 0.788 0.788 1.0 grey79
0 0.800 0.800 0.800 1.0 gray80
0 0.800 0.800 0.800 1.0 grey80
0 0.812 0.812 0.812 1.0 gray81
0 0.812 0.812 0.812 1.0 grey81
0 0.820 0.820 0.820 1.0 gray82
0 0.820 0.820 0.820 1.0 grey82
0 0.831 0.831 0.831 1.0 gray83
0 0.831 0.831 0.831 1.0 grey83
0 0.839 0.839 0.839 1.0 gray84
0 0.839 0.839 0.839 1.0 grey84
0 0.851 0.851 0.851 1.0 gray85
0 0.851 0.851 0.851 1.0 grey85
0 0.859 0.859 0.859 1.0 gray86
0 0.859 0.859 0.859 1.0 grey86
0 0.871 0.871 0.871 1.0 gray87
0 0.871 0.871 0.871 1.0 grey87
0 0.878 0.878 0.878 1.0 gray88
0 0.878 0.878 0.878 1.0 grey88
0 0.890 0.890 0.890 1.0 gray89
0 0.890 0.890 0.890 1.0 grey89
0 0.898 0.898 0.898 1.0 gray90
0 0.898 0.898 0.898 1.0 grey90
0 0.910 0.910 0.910 1.0 gray91
0 0.910 0.910 0.910 1.0 grey91
0 0.922 0.922 0.922 1.0 gray92
0 0.922 0.922 0.922 1.0 grey92
0 0.929 0.929 0.929 1.0 gray93
0 0.929 0.929 0.929 1.0 grey93
0 0.941 0.941 0.941 1.0 gray94
0 0.941 0.941 0.941 1.0 grey94
0 0.949 0.949 0.949 1.0 gray95
0 0.949 0.949 0.949 1.0 grey95
0 0.961 0.961 0.961 1.0 gray96
0 0.961 0.961 0.961 1.0 grey96
0 0.969 0.969 0.969 1.0 gray97
0 0.969 0.969 0.969 1.0 grey97
0 0.980 0.980 0.980 1.0 gray98
0 0.980 0.980 0.980 1.0 grey98
0 0.988 0.988 0.988 1.0 gray99
0 0.988 0.988 0.988 1.0 grey99
0 1.000 1.000 1.000 1.0 gray100
0 1.000 1.000 1.000 1.0 grey100
0 0.663 0.663 0.663 1.0 dark grey
0 0.663 0.663 0.663 1.0 DarkGrey
0 0.663 0.663 0.663 1.0 dark gray
0 0.663 0.663 0.663 1.0 DarkGray
0 0.000 0.000 0.545 1.0 dark blue
0 0.000 0.000 0.545 1.0 DarkBlue
0 0.000 0.545 0.545 1.0 dark cyan
0 0.000 0.545 0.545 1.0 DarkCyan
0 0.545 0.000 0.545 1.0 dark magenta
0 0.545 0.000 0.545 1.0 DarkMagenta
0 0.545 0.000 0.000 1.0 dark red
0 0.545 0.000 0.000 1.0 DarkRed
0 0.565 0.933 0.565 1.0 light green
0 0.565 0.933 0.565 1.0 LightGreen
0 0.500 0.500 0.500 1.0 Gray
0 0.500 0.500 0.500 1.0 Grey
0 0.667 0.667 0.667 1.0 Light Gray
0 0.667 0.667 0.667 1.0 Light Grey
0 0.000 0.000 0.000 0.0 Highlight

1
lib-src/.gitignore vendored
View file

@ -11,6 +11,7 @@ etags
fakemail
getopt.h
hexl
mac-fix-env
make-docfile
movemail
obj

View file

@ -1,3 +1,13 @@
2008-07-15 Adrian Robert <Adrian.B.Robert@gmail.com>
* .cvsignore: Add mac-fix-env.
* mac-fix-env.m: New file, automatically update
~/.MacOSX/environment.plist on OS X systems to expose environment
variables inside Emacs started from icon.
* Makefile.in: Add -universal to CFLAGS on OS X, add mac-fix-env to
programs to build.
* make-docfile.c: Add .m to list of file extensions.
2008-07-12 Dan Nicolaescu <dann@ics.uci.edu>
* movemail.c (main): Use int instead of WAITTYPE.

View file

@ -144,6 +144,23 @@ MOVE_FLAGS=
#define NOT_C_CODE
#include "../src/config.h"
#if defined(COCOA)
/* Build these programs as universal binaries. */
CFLAGS := $(CFLAGS) -universal
/* Add mac-fix-env for OS X systems running NS version. */
INSTALLABLES = etags${EXEEXT} ctags${EXEEXT} emacsclient${EXEEXT} b2m${EXEEXT} ebrowse${EXEEXT} mac-fix-env${EXEEXT}
#endif
/* Some platforms that the GNUstep port runs on put strip options in
INSTALL_PROGRAM which cause errors. But, not being sure all other
platforms are setting this, we will only use the alternative
INSTALL_SCRIPT variable on GNUstep/Cocoa builds. */
#ifndef HAVE_NS
INSTALL_SCRIPT = @INSTALL_PROGRAM@
#else
INSTALL_SCRIPT = @INSTALL_SCRIPT@
#endif
/* Some machines don\'t find the standard C libraries in the usual place. */
#ifndef ORDINARY_LINK
#ifndef LIB_STANDARD_LIBSRC
@ -253,12 +270,22 @@ CPP_CFLAGS = C_SWITCH_SYSTEM C_SWITCH_MACHINE -DHAVE_CONFIG_H \
BASE_CFLAGS = C_SWITCH_SYSTEM C_SWITCH_MACHINE -DHAVE_CONFIG_H \
-I. -I../src -I${srcdir} -I${srcdir}/../src ${CPPFLAGS} ${CFLAGS}
.SUFFIXES: .m
/* This is the default compilation command.
But we should never rely on it, because some make version
failed to find it for getopt.o.
Using an explicit command made it work. */
.c.o:
${CC} -c ${CPP_CFLAGS} $<
#ifdef HAVE_NS
.m.o:
#ifdef GNUSTEP
$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) -fgnu-runtime -Wno-import -fconstant-string-class=NSConstantString $<
#else
$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
#endif
#endif
all: ${DONT_INSTALL} ${UTILITIES} ${INSTALLABLES} ${SCRIPTS} ${INSTALLABLE_SCRIPTS}
@ -455,3 +482,8 @@ update-game-score${EXEEXT}: update-game-score.o $(GETOPTDEPS)
update-game-score.o: ${srcdir}/update-game-score.c ../src/config.h $(GETOPT_H)
$(CC) -c ${CPP_CFLAGS} ${srcdir}/update-game-score.c \
-DHAVE_SHARED_GAME_DIR="\"$(gamedir)\""
#if defined(COCOA)
mac-fix-env: ${srcdir}/mac-fix-env.m
$(CC) -o mac-fix-env ${srcdir}/mac-fix-env.m -prebind -framework Foundation
#endif

71
lib-src/mac-fix-env.m Normal file
View file

@ -0,0 +1,71 @@
/* mac-fix-env: A small utility to pick up the shell environment on MacOS X
and insert it into the file ~/.MacOSX/environment.plist
creating if necessary.
Copyright (C) 1989, 1993, 2005, 2008 Free Software Foundation, Inc.
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, 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
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.
usage:
Run from command line (in Terminal) once or whenever path changes:
/Applications/Emacs.app/Contents/MacOS/bin/mac-fix-env
(change initial part to where you installed Emacs).
*/
#import <Foundation/Foundation.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableDictionary *envPlist;
NSString *file = [[NSHomeDirectory()
stringByAppendingPathComponent:@".MacOSX"]
stringByAppendingPathComponent:@"environment.plist"];
NSString *path = [NSString stringWithCString: getenv("PATH")];
envPlist = [[NSDictionary dictionaryWithContentsOfFile: file] mutableCopy];
if (envPlist == nil)
{
// create
NSString *dir = [file stringByDeletingLastPathComponent];
envPlist = [NSMutableDictionary dictionaryWithCapacity: 5];
if ([[NSFileManager defaultManager] fileExistsAtPath: dir] == NO)
{
if ([[NSFileManager defaultManager] createDirectoryAtPath:dir
attributes:nil]==NO)
{
NSLog(@":\nCould not create directory at '%@'; aborting.",dir);
return 1;
}
}
}
[envPlist setObject: path forKey: @"PATH"];
if ([envPlist writeToFile: file atomically: YES] == NO)
{
NSLog(@":\nCould not write file at '%@'; aborting.", file);
return 1;
}
NSLog(@":\nWrote file to '%@'.\nPlease inspect it to make sure PATH is correct.", file);
return 0;
}

View file

@ -533,7 +533,7 @@ write_c_args (out, func, buf, minargs, maxargs)
}
/* Read through a c file. If a .o file is named,
the corresponding .c file is read instead.
the corresponding .c or .m file is read instead.
Looks for DEFUN constructs such as are defined in ../src/lisp.h.
Accepts any word starting DEF... so it finds DEFSIMPLE and DEFPRED. */
@ -555,6 +555,15 @@ scan_c_file (filename, mode)
infile = fopen (filename, mode);
if (infile == NULL && extension == 'o')
{
/* try .m */
filename[strlen (filename) - 1] = 'm';
infile = fopen (filename, mode);
if (infile == NULL)
filename[strlen (filename) - 1] = 'c'; /* don't confuse people */
}
/* No error if non-ex input file */
if (infile == NULL)
{

View file

@ -1,3 +1,42 @@
2008-07-15 Adrian Robert <Adrian.B.Robert@gmail.com>
* ns-carbon-compat.el: New file: user-visible compatibility of
NeXTstep port with Carbon port.
* ns-grabenv.el: New file: functionality useful on OS X platform to
expose environment variables inside Emacs started from icon.
* Makefile.in: Add above three files.
* cus-edit.el
* cus-face.el
* disp-table.el
* faces.el
* info.el
* mouse.el
* mwheel.el
* simple.el: Add ns to window systems treated as GUIs.
* facemenu.el (facemenu-read-color): Don't require a name match under
NS, to allow numeric color entry.
* frame.el (make-frame-on-display): Follow code for 'x in initializing
'ns window system if need be.
(various): Add 'ns as described above.
* loadup.el: Load ns-win.el if ns-windowing is active.
* startup.el (command-line-ns-option-alist): New constant to handle NS
windowing system specific command line args analogous to how they are
handled for X windows.
(command-line-1): Use the above where appropriate.
* version.el: Add NS port version.
* woman.el (woman-man.conf-path): Add /usr/share/misc to init path on
Darwin (usually OS X) systems.
(woman-use-own-frame): Include 'ns in list of GUI window systems.
* emulation/viper-util.el (ns-display-color-p)
(ns-color-defined-p): Remove these (caustically-commented) outdated
compensations for a port that was never itself integrated until now.
* gnus/gnus-util.el (gnus-select-frame-set-input-focus): Add support
for NS window system.
* international/mule-cmds.el: Add 'ns to list of special-cased window
systems (probably most of these, x/w32/mac/ns could be changed to
window-system non-nil).
* term/ns-win.el: New file: lisp-side support for NS windowing system.
2008-07-14 Jason Rumney <jasonr@gnu.org>
* term/w32-win.el (x-handle-switch, x-handle-name-switch)

View file

@ -867,6 +867,8 @@ ELCFILES = \
$(lisp)/net/zeroconf.elc \
$(lisp)/newcomment.elc \
$(lisp)/novice.elc \
$(lisp)/ns-grabenv.elc \
$(lisp)/ns-carbon-compat.elc \
$(lisp)/nxml/nxml-enc.elc \
$(lisp)/nxml/nxml-glyph.elc \
$(lisp)/nxml/nxml-maint.elc \
@ -1110,6 +1112,7 @@ ELCFILES = \
$(lisp)/tempo.elc \
$(lisp)/term.elc \
$(lisp)/term/mac-win.elc \
$(lisp)/term/ns-win.elc \
$(lisp)/term/pc-win.elc \
$(lisp)/term/rxvt.elc \
$(lisp)/term/sun.elc \

View file

@ -2068,7 +2068,7 @@ and `face'."
;;; The `custom' Widget.
(defface custom-button
'((((type x w32 mac) (class color)) ; Like default modeline
'((((type x w32 mac ns) (class color)) ; Like default modeline
(:box (:line-width 2 :style released-button)
:background "lightgrey" :foreground "black"))
(t
@ -2080,7 +2080,7 @@ and `face'."
(put 'custom-button-face 'face-alias 'custom-button)
(defface custom-button-mouse
'((((type x w32 mac) (class color))
'((((type x w32 mac ns) (class color))
(:box (:line-width 2 :style released-button)
:background "grey90" :foreground "black"))
(t
@ -2102,7 +2102,7 @@ and `face'."
(if custom-raised-buttons 'custom-button-mouse 'highlight))
(defface custom-button-pressed
'((((type x w32 mac) (class color))
'((((type x w32 mac ns) (class color))
(:box (:line-width 2 :style pressed-button)
:background "lightgrey" :foreground "black"))
(t
@ -3163,8 +3163,12 @@ Windows NT/9X.")
w32)
(const :format "MAC "
:sibling-args (:help-echo "\
Macintosh OS.")
Macintosh OS (Carbon interface).")
mac)
(const :format "NS "
:sibling-args (:help-echo "\
GNUstep or Macintosh OS Cocoa interface.")
ns)
(const :format "DOS "
:sibling-args (:help-echo "\
Plain MS-DOS.")

View file

@ -44,7 +44,7 @@
;; Create frame-local faces
(dolist (frame (frame-list))
(face-spec-set-2 face frame value)
(when (memq (window-system frame) '(x w32 mac))
(when (memq (window-system frame) '(x w32 mac ns))
(setq have-window-system t)))
;; When making a face after frames already exist
(if have-window-system

View file

@ -142,7 +142,7 @@ Valid symbols are `truncation', `wrap', `escape', `control',
"Display character C as character SC in the g1 character set.
This function assumes that your terminal uses the SO/SI characters;
it is meaningless for an X frame."
(if (memq window-system '(x w32 mac))
(if (memq window-system '(x w32 mac ns))
(error "Cannot use string glyphs in a windowing system"))
(or standard-display-table
(setq standard-display-table (make-display-table)))
@ -154,7 +154,7 @@ it is meaningless for an X frame."
"Display character C as character GC in graphics character set.
This function assumes VT100-compatible escapes; it is meaningless for an
X frame."
(if (memq window-system '(x w32 mac))
(if (memq window-system '(x w32 mac ns))
(error "Cannot use string glyphs in a windowing system"))
(or standard-display-table
(setq standard-display-table (make-display-table)))
@ -243,7 +243,7 @@ for users who call this function in `.emacs'."
(equal (aref standard-display-table 161) [161])))
(progn
(standard-display-default 160 255)
(unless (or (memq window-system '(x w32 mac)))
(unless (or (memq window-system '(x w32 mac ns)))
(and (terminal-coding-system)
(set-terminal-coding-system nil))))
@ -255,7 +255,7 @@ for users who call this function in `.emacs'."
;; unless some other has been specified.
(if (equal current-language-environment "English")
(set-language-environment "latin-1"))
(unless (or noninteractive (memq window-system '(x w32 mac)))
(unless (or noninteractive (memq window-system '(x w32 mac ns)))
;; Send those codes literally to a character-based terminal.
;; If we are using single-byte characters,
;; it doesn't matter which coding system we use.

View file

@ -52,14 +52,6 @@
(require 'viper-init)
;; A fix for NeXT Step
;; Should go away, when NS people fix the design flaw, which leaves the
;; two x-* functions undefined.
(if (and (not (fboundp 'x-display-color-p)) (fboundp 'ns-display-color-p))
(fset 'x-display-color-p (symbol-function 'ns-display-color-p)))
(if (and (not (fboundp 'x-color-defined-p)) (fboundp 'ns-color-defined-p))
(fset 'x-color-defined-p (symbol-function 'ns-color-defined-p)))
(defalias 'viper-overlay-p
(if (featurep 'xemacs) 'extentp 'overlayp))

View file

@ -460,10 +460,11 @@ These special properties include `invisible', `intangible' and `read-only'."
(defun facemenu-read-color (&optional prompt)
"Read a color using the minibuffer."
(let* ((completion-ignore-case t)
(require-match (not (eq window-system 'ns)))
(col (completing-read (or prompt "Color: ")
(or facemenu-color-alist
(defined-colors))
nil t)))
nil require-match)))
(if (equal "" col)
nil
col)))

View file

@ -338,7 +338,7 @@ specifies an invalid attribute."
(defun set-face-attributes-from-resources (face frame)
"Set attributes of FACE from X resources for FRAME."
(when (memq (framep frame) '(x w32 mac))
(when (memq (framep frame) '(x w32 mac ns))
(dolist (definition face-x-resources)
(let ((attribute (car definition)))
(dolist (entry (cdr definition))
@ -1010,7 +1010,7 @@ an integer value."
((:height)
'integerp)
(:stipple
(and (memq (window-system frame) '(x w32 mac))
(and (memq (window-system frame) '(x w32 mac ns))
(mapcar #'list
(apply #'nconc
(mapcar (lambda (dir)
@ -1129,7 +1129,7 @@ of a global face. Value is the new attribute value."
;; explicitly in VALID, using color approximation code
;; in tty-colors.el.
(when (and (memq attribute '(:foreground :background))
(not (memq (window-system frame) '(x w32 mac)))
(not (memq (window-system frame) '(x w32 mac ns)))
(not (member new-value
'("unspecified"
"unspecified-fg" "unspecified-bg"))))
@ -1624,7 +1624,7 @@ The argument FRAME specifies which frame to try.
The value may be different for frames on different display types.
If FRAME doesn't support colors, the value is nil.
If FRAME is nil, that stands for the selected frame."
(if (memq (framep (or frame (selected-frame))) '(x w32 mac))
(if (memq (framep (or frame (selected-frame))) '(x w32 mac ns))
(xw-defined-colors frame)
(mapcar 'car (tty-color-alist frame))))
(defalias 'x-defined-colors 'defined-colors)
@ -1638,7 +1638,7 @@ If COLOR is the symbol `unspecified' or one of the strings
\"unspecified-fg\" or \"unspecified-bg\", the value is nil."
(if (member color '(unspecified "unspecified-bg" "unspecified-fg"))
nil
(if (member (framep (or frame (selected-frame))) '(x w32 mac))
(if (member (framep (or frame (selected-frame))) '(x w32 mac ns))
(xw-color-defined-p color frame)
(numberp (tty-color-translate color frame)))))
(defalias 'x-color-defined-p 'color-defined-p)
@ -1656,7 +1656,7 @@ If COLOR is the symbol `unspecified' or one of the strings
\"unspecified-fg\" or \"unspecified-bg\", the value is nil."
(if (member color '(unspecified "unspecified-fg" "unspecified-bg"))
nil
(if (memq (framep (or frame (selected-frame))) '(x w32 mac))
(if (memq (framep (or frame (selected-frame))) '(x w32 mac ns))
(xw-color-values color frame)
(tty-color-values color frame))))
(defalias 'x-color-values 'color-values)
@ -1668,7 +1668,7 @@ If COLOR is the symbol `unspecified' or one of the strings
The optional argument DISPLAY specifies which display to ask about.
DISPLAY should be either a frame or a display name (a string).
If omitted or nil, that stands for the selected frame's display."
(if (memq (framep-on-display display) '(x w32 mac))
(if (memq (framep-on-display display) '(x w32 mac ns))
(xw-display-color-p display)
(tty-display-color-p display)))
(defalias 'x-display-color-p 'display-color-p)
@ -1679,7 +1679,7 @@ If omitted or nil, that stands for the selected frame's display."
"Return non-nil if frames on DISPLAY can display shades of gray."
(let ((frame-type (framep-on-display display)))
(cond
((memq frame-type '(x w32 mac))
((memq frame-type '(x w32 mac ns))
(x-display-grayscale-p display))
(t
(> (tty-color-gray-shades display) 2)))))
@ -2495,7 +2495,7 @@ Note: Other faces cannot inherit from the cursor face."
'((default
:box (:line-width 1 :style released-button)
:foreground "black")
(((type x w32 mac) (class color))
(((type x w32 mac ns) (class color))
:background "grey75")
(((type x) (class mono))
:background "grey"))

View file

@ -610,12 +610,19 @@ is not considered (see `next-frame')."
"Make a frame on X display DISPLAY.
The optional second argument PARAMETERS specifies additional frame parameters."
(interactive "sMake frame on display: ")
(or (string-match "\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'" display)
(error "Invalid display, not HOST:SERVER or HOST:SERVER.SCREEN"))
(when (and (boundp 'x-initialized) (not x-initialized))
(setq x-display-name display)
(x-initialize-window-system))
(make-frame `((window-system . x) (display . ,display) . ,parameters)))
(if (featurep 'ns-windowing)
(progn
(when (and (boundp 'ns-initialized) (not ns-initialized))
(setq ns-display-name display)
(ns-initialize-window-system))
(make-frame `((window-system . ns) (display . ,display) . ,parameters)))
(progn
(or (string-match "\\`[^:]*:[0-9]+\\(\\.[0-9]+\\)?\\'" display)
(error "Invalid display, not HOST:SERVER or HOST:SERVER.SCREEN"))
(when (and (boundp 'x-initialized) (not x-initialized))
(setq x-display-name display)
(x-initialize-window-system))
(make-frame `((window-system . x) (display . ,display) . ,parameters)))))
(defun make-frame-on-tty (tty type &optional parameters)
"Make a frame on terminal device TTY.
@ -835,7 +842,7 @@ the user during startup."
(select-frame frame)
(raise-frame frame)
;; Ensure, if possible, that frame gets input focus.
(when (memq (window-system frame) '(x mac w32))
(when (memq (window-system frame) '(x mac w32 ns))
(x-focus-frame frame))
(when focus-follows-mouse
(set-mouse-position (selected-frame) (1- (frame-width)) 0)))
@ -880,7 +887,7 @@ Calls `suspend-emacs' if invoked from the controlling tty device,
(interactive)
(let ((type (framep (selected-frame))))
(cond
((memq type '(x w32)) (iconify-or-deiconify-frame))
((memq type '(x ns w32)) (iconify-or-deiconify-frame))
((eq type t)
(if (controlling-tty-p)
(suspend-emacs)
@ -920,7 +927,7 @@ If there is no frame by that name, signal an error."
(raise-frame frame)
(select-frame frame)
;; Ensure, if possible, that frame gets input focus.
(cond ((memq (window-system frame) '(x w32))
(cond ((memq (window-system frame) '(x w32 ns))
(x-focus-frame frame)))
(when focus-follows-mouse
(set-mouse-position frame (1- (frame-width frame)) 0))))
@ -1157,8 +1164,8 @@ frame's display)."
((eq system-type 'windows-nt)
(with-no-warnings
(> w32-num-mouse-buttons 0)))
((memq frame-type '(x mac))
t) ;; We assume X and Mac *always* have a pointing device
((memq frame-type '(x mac ns))
t) ;; We assume X, Mac, NeXTstep *always* have a pointing device
(t
(or (and (featurep 'xt-mouse)
xterm-mouse-mode)
@ -1173,7 +1180,7 @@ frame's display).
Support for popup menus requires that the mouse be available."
(and
(let ((frame-type (framep-on-display display)))
(memq frame-type '(x w32 pc mac)))
(memq frame-type '(x w32 pc mac ns)))
(display-mouse-p display)))
(defun display-graphic-p (&optional display)
@ -1183,7 +1190,7 @@ frames and several different fonts at once. This is true for displays
that use a window system such as X, and false for text-only terminals.
DISPLAY can be a display name, a frame, or nil (meaning the selected
frame's display)."
(not (null (memq (framep-on-display display) '(x w32 mac)))))
(not (null (memq (framep-on-display display) '(x w32 mac ns)))))
(defun display-images-p (&optional display)
"Return non-nil if DISPLAY can display images.
@ -1211,7 +1218,7 @@ frame's display)."
;; the Windows' DOS Box.
(with-no-warnings
(not (null dos-windows-version))))
((memq frame-type '(x w32 mac))
((memq frame-type '(x w32 mac ns))
t) ;; FIXME?
(t
nil))))
@ -1222,7 +1229,7 @@ frame's display)."
"Return the number of screens associated with DISPLAY."
(let ((frame-type (framep-on-display display)))
(cond
((memq frame-type '(x w32 mac))
((memq frame-type '(x w32 mac ns))
(x-display-screens display))
(t
1))))
@ -1234,7 +1241,7 @@ frame's display)."
For character terminals, each character counts as a single pixel."
(let ((frame-type (framep-on-display display)))
(cond
((memq frame-type '(x w32 mac))
((memq frame-type '(x w32 mac ns))
(x-display-pixel-height display))
(t
(frame-height (if (framep display) display (selected-frame)))))))
@ -1246,7 +1253,7 @@ For character terminals, each character counts as a single pixel."
For character terminals, each character counts as a single pixel."
(let ((frame-type (framep-on-display display)))
(cond
((memq frame-type '(x w32 mac))
((memq frame-type '(x w32 mac ns))
(x-display-pixel-width display))
(t
(frame-width (if (framep display) display (selected-frame)))))))
@ -1275,7 +1282,7 @@ displays not explicitely specified."
"Return the height of DISPLAY's screen in millimeters.
System values can be overridden by `display-mm-dimensions-alist'.
If the information is unavailable, value is nil."
(and (memq (framep-on-display display) '(x w32 mac))
(and (memq (framep-on-display display) '(x w32 mac ns))
(or (cddr (assoc (or display (frame-parameter nil 'display))
display-mm-dimensions-alist))
(cddr (assoc t display-mm-dimensions-alist))
@ -1287,7 +1294,7 @@ If the information is unavailable, value is nil."
"Return the width of DISPLAY's screen in millimeters.
System values can be overridden by `display-mm-dimensions-alist'.
If the information is unavailable, value is nil."
(and (memq (framep-on-display display) '(x w32 mac))
(and (memq (framep-on-display display) '(x w32 mac ns))
(or (cadr (assoc (or display (frame-parameter nil 'display))
display-mm-dimensions-alist))
(cadr (assoc t display-mm-dimensions-alist))
@ -1301,7 +1308,7 @@ The value may be `always', `when-mapped', `not-useful', or nil if
the question is inapplicable to a certain kind of display."
(let ((frame-type (framep-on-display display)))
(cond
((memq frame-type '(x w32 mac))
((memq frame-type '(x w32 mac ns))
(x-display-backing-store display))
(t
'not-useful))))
@ -1312,7 +1319,7 @@ the question is inapplicable to a certain kind of display."
"Return non-nil if DISPLAY's screen supports the SaveUnder feature."
(let ((frame-type (framep-on-display display)))
(cond
((memq frame-type '(x w32 mac))
((memq frame-type '(x w32 mac ns))
(x-display-save-under display))
(t
'not-useful))))
@ -1323,7 +1330,7 @@ the question is inapplicable to a certain kind of display."
"Return the number of planes supported by DISPLAY."
(let ((frame-type (framep-on-display display)))
(cond
((memq frame-type '(x w32 mac))
((memq frame-type '(x w32 mac ns))
(x-display-planes display))
((eq frame-type 'pc)
4)
@ -1336,7 +1343,7 @@ the question is inapplicable to a certain kind of display."
"Return the number of color cells supported by DISPLAY."
(let ((frame-type (framep-on-display display)))
(cond
((memq frame-type '(x w32 mac))
((memq frame-type '(x w32 mac ns))
(x-display-color-cells display))
((eq frame-type 'pc)
16)
@ -1351,7 +1358,7 @@ The value is one of the symbols `static-gray', `gray-scale',
`static-color', `pseudo-color', `true-color', or `direct-color'."
(let ((frame-type (framep-on-display display)))
(cond
((memq frame-type '(x w32 mac))
((memq frame-type '(x w32 mac ns))
(x-display-visual-class display))
((and (memq frame-type '(pc t))
(tty-display-color-p display))

View file

@ -1612,7 +1612,9 @@ CHOICE is a list of the choice char and help message at IDX."
(cond ((memq window-system '(x mac))
(x-focus-frame frame))
((eq window-system 'w32)
(w32-focus-frame frame)))
(w32-focus-frame frame))
((eq window-system 'ns)
(ns-focus-frame frame)))
(when focus-follows-mouse
(set-mouse-position frame (1- (frame-width frame)) 0)))))

View file

@ -3893,7 +3893,7 @@ the variable `Info-file-list-for-emacs'."
;; This is a serious problem for trying to handle multiple
;; frame types at once. We want this text to be invisible
;; on frames that can display the font above.
(when (memq (framep (selected-frame)) '(x pc w32 mac))
(when (memq (framep (selected-frame)) '(x pc w32 mac ns))
(add-text-properties (1- (match-beginning 2)) (match-end 2)
'(invisible t front-sticky nil rear-nonsticky t)))))

View file

@ -148,7 +148,7 @@
t)
(define-key-after set-coding-system-map [set-terminal-coding-system]
'(menu-item "For Terminal" set-terminal-coding-system
:enable (null (memq initial-window-system '(x w32 mac)))
:enable (null (memq initial-window-system '(x w32 mac ns)))
:help "How to encode terminal output")
t)
(define-key-after set-coding-system-map [separator-3]

View file

@ -212,6 +212,11 @@
(if (featurep 'mac-carbon)
(progn
(load "term/mac-win")))
(if (featurep 'ns-windowing)
(progn
(load "emacs-lisp/easymenu") ;; for platform-related menu adjustments
(load "emacs-lisp/easy-mmode")
(load "term/ns-win")))
(if (fboundp 'atan) ; preload some constants and
(progn ; floating pt. functions if we have float support.
(load "emacs-lisp/float-sup")))

View file

@ -673,7 +673,7 @@ This should be bound to a mouse drag event."
;; If mark is highlighted, no need to bounce the cursor.
;; On X, we highlight while dragging, thus once again no need to bounce.
(or transient-mark-mode
(memq (framep (selected-frame)) '(x pc w32 mac))
(memq (framep (selected-frame)) '(x pc w32 mac ns))
(sit-for 1))
(push-mark)
(set-mark (point))

View file

@ -58,7 +58,7 @@
"22.1")
(defcustom mouse-wheel-down-event
;; In the latest versions of XEmacs, we could just use mouse-%s as well.
(if (memq window-system '(w32 mac))
(if (memq window-system '(w32 mac ns))
'wheel-up
(intern (format (if (featurep 'xemacs) "button%s" "mouse-%s")
mouse-wheel-down-button)))
@ -73,7 +73,7 @@
"22.1")
(defcustom mouse-wheel-up-event
;; In the latest versions of XEmacs, we could just use mouse-%s as well.
(if (memq window-system '(w32 mac))
(if (memq window-system '(w32 mac ns))
'wheel-down
(intern (format (if (featurep 'xemacs) "button%s" "mouse-%s")
mouse-wheel-up-button)))

37
lisp/ns-carbon-compat.el Normal file
View file

@ -0,0 +1,37 @@
;;; ns-carbon-compat.el ---
;;; Carbon compatibility layer for Mac users of NS (Cocoa) GUI.
;;; Copyright (C) 2008 Free Software Foundation, Inc.
;;; Author: Adrian Robert
;;; Keywords: Carbon, MacOSX
;;; 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 2, 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
;;; 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, 675 Mass Ave, Cambridge, MA 02139, USA.
;;; Commentary:
;; ns-carbon-compat.el: this file is loaded from termp/ns-win.el when
;; run on a Mac OS X system. It sets up a number of aliases and other
;; layers to enable human and machine users (Mac distributions of GNU Emacs)
;; to pretend they are using the Choi/Mitsuharu Carbon port.
;;; Code:
(defvaralias 'mac-allow-anti-aliasing 'ns-antialias-text)
(defvaralias 'mac-command-modifier 'ns-command-modifier)
(defvaralias 'mac-control-modifier 'ns-control-modifier)
(defvaralias 'mac-option-modifier 'ns-option-modifier)
(defvaralias 'mac-function-modifier 'ns-function-modifier)

67
lisp/ns-grabenv.el Normal file
View file

@ -0,0 +1,67 @@
;;; ns-grabenv.el --- functions to set environment variables by running a subshell
;;; Copyright (C) 1993, 1994, 2005, 2006, 2008 Free Software Foundation, Inc.
;;; Author: Carl Edman, Christian Limpach, Scott Bender, Christophe de Dinechin,
;;; Adrian Robert
;;; Keywords: terminals
;;; 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, 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
;;; 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.
;;; Idea based on NS 4.2 distribution, this version of code based on
;;; mac-read-environment-vars-from-shell () by David Reitter in Aquamacs dist..
;; utility function
(defun ns-make-command-string (cmdlist)
(let ((str "")
(cmds cmdlist))
(while cmds
(if (not (eq str "")) (setq str (format "%s ; " str)))
(setq str (format "%s%s" str (car cmds)))
(setq cmds (cdr cmds)))
str))
;;;###autoload
(defun ns-grabenv (&optional shell-path &optional startup)
"Run a shell subprocess, and interpret its output as a series of environment\n\
variables to insert into the emacs environment. The first optional argument\n\
gives the path to the shell (defaults to the current setting of\n\
shell-file-name). The remaining arguments are interpreted as a list of\n\
commands for it to execute (defaults to \"printenv\")."
(interactive)
(with-temp-buffer
(let ((shell-file-name (if shell-path shell-path shell-file-name))
(cmd (ns-make-command-string (if startup startup '("printenv")))))
(shell-command cmd t)
(while (search-forward-regexp "^\\([A-Za-z_0-9]+\\)=\\(.*\\)$" nil t)
(setenv (match-string 1)
(if (equal (match-string 1) "PATH")
(concat (getenv "PATH") ":" (match-string 2))
(match-string 2)))))))
(provide 'ns-grabenv)
;;; ns-grabenv.el ends here
; (autoload (quote ns-grabenv) "ns-grabenv" "\
; Run a shell subprocess, and interpret its output as a series of environment
; variables to insert into the emacs environment. The first optional argument
; gives the path to the shell (defaults to the current setting of
; shell-file-name). The remaining arguments are interpreted as a list of
; commands for it to execute (defaults to \"printenv\")." nil nil)

View file

@ -5984,7 +5984,7 @@ See also `normal-erase-is-backspace'."
(set-terminal-parameter nil 'normal-erase-is-backspace
(if enabled 1 0))
(cond ((or (memq window-system '(x w32 mac pc))
(cond ((or (memq window-system '(x w32 mac ns pc))
(memq system-type '(ms-dos windows-nt)))
(let* ((bindings
`(([C-delete] [C-backspace])

View file

@ -182,6 +182,72 @@ FRAME-PARAM (optional) is the frame parameter this option specifies,
and VALUE is the value which is given to that frame parameter
\(most options use the argument for this, so VALUE is not present).")
(defconst command-line-ns-option-alist
'(("-NSAutoLaunch" 1 ns-ignore-1-arg)
("-NXAutoLaunch" 1 ns-ignore-1-arg)
("-macosx" 0 ns-ignore-0-arg)
("-NSHost" 1 ns-ignore-1-arg)
("-_NSMachLaunch" 1 ns-ignore-1-arg)
("-MachLaunch" 1 ns-ignore-1-arg)
("-NXOpen" 1 ns-ignore-1-arg)
("-NSOpen" 1 ns-handle-nxopen)
("-NXOpenTemp" 1 ns-ignore-1-arg)
("-NSOpenTemp" 1 ns-handle-nxopentemp)
("-GSFilePath" 1 ns-handle-nxopen)
;;("-bw" . x-handle-numeric-switch)
;;("-d" . x-handle-display)
;;("-display" . x-handle-display)
("-name" 1 ns-handle-name-switch)
("-title" 1 ns-handle-switch title)
("-T" 1 ns-handle-switch title)
("-r" 0 ns-handle-switch reverse t)
("-rv" 0 ns-handle-switch reverse t)
("-reverse" 0 ns-handle-switch reverse t)
("-fn" 1 ns-handle-switch font)
("-font" 1 ns-handle-switch font)
("-ib" 1 ns-handle-numeric-switch internal-border-width)
;;("-g" . x-handle-geometry)
;;("-geometry" . x-handle-geometry)
("-fg" 1 ns-handle-switch foreground-color)
("-foreground" 1 ns-handle-switch foreground-color)
("-bg" 1 ns-handle-switch background-color)
("-background" 1 ns-handle-switch background-color)
; ("-ms" 1 ns-handle-switch mouse-color)
("-itype" 0 ns-handle-switch icon-type t)
("-i" 0 ns-handle-switch icon-type t)
("-iconic" 0 ns-handle-iconic icon-type t)
;;("-xrm" . x-handle-xrm-switch)
("-cr" 1 ns-handle-switch cursor-color)
("-vb" 0 ns-handle-switch vertical-scroll-bars t)
("-hb" 0 ns-handle-switch horizontal-scroll-bars t)
("-bd" 1 ns-handle-switch)
;; ("--border-width" 1 ns-handle-numeric-switch border-width)
;; ("--display" 1 ns-handle-display)
("--name" 1 ns-handle-name-switch)
("--title" 1 ns-handle-switch title)
("--reverse-video" 0 ns-handle-switch reverse t)
("--font" 1 ns-handle-switch font)
("--internal-border" 1 ns-handle-numeric-switch internal-border-width)
;; ("--geometry" 1 ns-handle-geometry)
("--foreground-color" 1 ns-handle-switch foreground-color)
("--background-color" 1 ns-handle-switch background-color)
("--mouse-color" 1 ns-handle-switch mouse-color)
("--icon-type" 0 ns-handle-switch icon-type t)
("--iconic" 0 ns-handle-iconic)
;; ("--xrm" 1 ns-handle-xrm-switch)
("--cursor-color" 1 ns-handle-switch cursor-color)
("--vertical-scroll-bars" 0 ns-handle-switch vertical-scroll-bars t)
("--border-color" 1 ns-handle-switch border-width))
"Alist of NS options.
Each element has the form
(NAME NUMARGS HANDLER FRAME-PARAM VALUE)
where NAME is the option name string, NUMARGS is the number of arguments
that the option accepts, HANDLER is a function to call to handle the option.
FRAME-PARAM (optional) is the frame parameter this option specifies,
and VALUE is the value which is given to that frame parameter
\(most options use the argument for this, so VALUE is not present).")
(defvar before-init-hook nil
"Normal hook run after handling urgent options but before loading init files.")
@ -820,7 +886,7 @@ opening the first frame (e.g. open a connection to an X server).")
;; only because all other settings of no-blinking-cursor are here.
(unless (or noninteractive
emacs-basic-display
(and (memq window-system '(x w32 mac))
(and (memq window-system '(x w32 mac ns))
(not (member (x-get-resource "cursorBlink" "CursorBlink")
'("off" "false")))))
(setq no-blinking-cursor t))
@ -2021,6 +2087,13 @@ A fancy display is used on graphic displays, normal otherwise."
(if (string-match "^--" (car tem))
(push (list (car tem)) longopts)))
;; Add the long NS options to longopts.
(setq tem command-line-ns-option-alist)
(while tem
(if (string-match "^--" (car (car tem)))
(setq longopts (cons (list (car (car tem))) longopts)))
(setq tem (cdr tem)))
;; Loop, processing options.
(while command-line-args-left
(let* ((argi (car command-line-args-left))
@ -2131,6 +2204,11 @@ A fancy display is used on graphic displays, normal otherwise."
(setq command-line-args-left
(nthcdr (nth 1 tem) command-line-args-left)))
((setq tem (assoc argi command-line-ns-option-alist))
;; Ignore NS-windows options and their args if not using NS.
(setq command-line-args-left
(nthcdr (nth 1 tem) command-line-args-left)))
((member argi '("-find-file" "-file" "-visit"))
(setq inhibit-startup-screen t)
;; An explicit option to specify visiting a file.

1608
lisp/term/ns-win.el Normal file

File diff suppressed because it is too large Load diff

View file

@ -65,6 +65,8 @@ to the system configuration; look at `system-configuration' instead."
((featurep 'gtk)
(concat ", GTK+ Version " gtk-version-string))
((featurep 'x-toolkit) ", X toolkit")
((featurep 'ns-windowing)
(format ", *Step %s" ns-version-string))
((boundp 'mac-carbon-version-string)
(concat ", Carbon Version " mac-carbon-version-string))
(t ""))

View file

@ -545,9 +545,11 @@ Change only via `Customization' or the function `add-hook'."
(defcustom woman-man.conf-path
(let ((path '("/usr/lib" "/etc")))
(if (eq system-type 'windows-nt)
(mapcar 'woman-Cyg-to-Win path)
path))
(cond ((eq system-type 'windows-nt)
(mapcar 'woman-Cyg-to-Win path))
((eq system-type 'darwin)
(cons "/usr/share/misc" path))
(t path)))
"List of dirs to search and/or files to try for man config file.
A trailing separator (`/' for UNIX etc.) on directories is
optional, and the filename is used if a directory specified is
@ -860,7 +862,7 @@ Should begin with \\. and end with \\' and MUST NOT be optional."
(defcustom woman-use-own-frame ; window-system
(or (and (fboundp 'display-graphic-p) (display-graphic-p)) ; Emacs 21
(memq window-system '(x w32))) ; Emacs 20
(memq window-system '(x w32 ns))) ; Emacs 20
"If non-nil then use a dedicated frame for displaying WoMan windows.
Only useful when run on a graphic display such as X or MS-Windows."
:type 'boolean

42
nextstep/AUTHORS Normal file
View file

@ -0,0 +1,42 @@
In addition to the folks listed in ../AUTHORS responsible for GNU Emacs itself,
the NeXTstep port owes to the following people:
Carl Edman
original author and maintainer, mainly UI
Michael Brouwer
heavy contributor, input handling and other areas
Christian Limpach
help / maintenance on NeXTstep
Scott Bender
OpenStep, Rhapsody ports
Christophe de Dinechin
MacOS X port
Adrian Robert
GNUstep port*, update Emacs 20 -> 21+
Joe Reiss
popup menu, dialog boxes; icons
Andrew Athan
font panel integration
Scott Byer
improved rendering code
Scott Hess
keyboard handling suggestions
Rahul Abrol
"hide others" patch
Adam Ratcliffe
preferences panel documentation
Peter Dyballa
assistance with non-ASCII rendering and keyboard handling
David M. Cooke
fix to XPM crash bug
Carsten Bormann
initial patch and assistance getting dired working for non-ASCII filenames
Andrew Moore
assistance on ns-mark-nav extension
(*)
The GNUstep port was made possible through the assistance of Adam Fedor, Fred
Kiefer, M. Uli Klusterer, Alexander Malmberg, Jonas Matton, and Riccardo
Mottola.

46
nextstep/ChangeLog Normal file
View file

@ -0,0 +1,46 @@
2008-07-15 Adrian Robert <Adrian.B.Robert@gmail.com>
New directory with support files to support NeXTstep window system.
* AUTHORS: New file: contributor information for NS port.
* ChangeLog.nextstep: New file: changelog info to be added to
various directories on merge.
* ChangeLog: New file: recent history of the NS port itself.
* Cocoa: New directory: support files for building .app
package on OS X systems.
* Cocoa/Emacs.base
* Cocoa/Emacs.base/Contents: New directories.
* Cocoa/Emacs.base/Contents/Info.plist
* Cocoa/Emacs.base/Contents/PkgInfo: New files.
* Cocoa/Emacs.base/Contents/Resources: New directory.
* Cocoa/Emacs.base/Contents/Resources/Credits.html: New file:
About popup support.
* Cocoa/Emacs.base/Contents/Resources/Emacs.icns: New file:
copied from Carbon port.
* Cocoa/Emacs.base/Contents/Resources/English.lproj: New
directory.
* Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings:
New file.
* Cocoa/Emacs.base/Contents/Resources/preferences.nib: New
directory.
* Cocoa/Emacs.base/Contents/Resources/preferences.nib/classes.nib
* Cocoa/Emacs.base/Contents/Resources/preferences.nib/info.nib
* Cocoa/Emacs.base/Contents/Resources/preferences.nib/keyedobjects.nib:
New files.
* Cocoa/Emacs.xcodeproj: New directory: build support.
* Cocoa/Emacs.xcodeproj/project.pbxproj: New file.
* GNUstep: New directory: support files for building .app
package on GNUstep systems.
* GNUstep/Resources: New directory.
* GNUstep/Resources/Emacs.desktop
* GNUstep/Resources/Info-gnustep.plist
* GNUstep/Resources/emacs.tiff: New files.
* GNUstep/Resources/preferences.gorm: New directory.
* GNUstep/Resources/preferences.gorm/data.classes
* GNUstep/Resources/preferences.gorm/data.info
* GNUstep/Resources/preferences.gorm/objects.gorm: New
files.
* compile: New file: utility script for building Emacs.app.
* FOR_RELEASE: New file: release tasks specific to NeXTstep
port.
* README.txt: New file: descriptive info for NeXTstep port.

View file

@ -0,0 +1,212 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>txt</string>
</array>
<key>CFBundleTypeName</key>
<string>Text</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>c</string>
<string>h</string>
</array>
<key>CFBundleTypeName</key>
<string>C</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>C</string>
<string>H</string>
<string>cpp</string>
<string>cc</string>
<string>hh</string>
</array>
<key>CFBundleTypeName</key>
<string>C++</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>m</string>
</array>
<key>CFBundleTypeName</key>
<string>Objective C</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>el</string>
</array>
<key>CFBundleTypeName</key>
<string>Lisp</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>xml</string>
<string>xhtml</string>
<string>xsl</string>
<string>xsd</string>
<string>xsdl</string>
</array>
<key>CFBundleTypeName</key>
<string>XML</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>java</string>
</array>
<key>CFBundleTypeName</key>
<string>Java</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>tex</string>
<string>ltx</string>
<string>bib</string>
<string>bbl</string>
</array>
<key>CFBundleTypeName</key>
<string>TeX/LaTeX</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>*</string>
</array>
<key>CFBundleTypeName</key>
<string>Any</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>****</string>
</array>
<key>CFBundleTypeRole</key>
<string>Editor</string>
</dict>
</array>
<key>NSServices</key>
<array>
<dict>
<key>NSMenuItem</key>
<dict>
<key>default</key>
<string>Emacs.app/New Buffer Containing Selection</string>
</dict>
<key>NSMessage</key>
<string>requestService</string>
<key>NSUserData</key>
<string>open-selection</string>
<key>NSPortName</key>
<string>Emacs</string>
<key>NSSendTypes</key>
<array>
<string>NSStringPboardType</string>
</array>
</dict>
<dict>
<key>NSMenuItem</key>
<dict>
<key>default</key>
<string>Emacs.app/Open Selected File</string>
</dict>
<key>NSMessage</key>
<string>requestService</string>
<key>NSUserData</key>
<string>open-file</string>
<key>NSPortName</key>
<string>Emacs</string>
<key>NSSendTypes</key>
<array>
<string>NSStringPboardType</string>
</array>
</dict>
<dict>
<key>NSMenuItem</key>
<dict>
<key>default</key>
<string>Emacs.app/Email Selection</string>
</dict>
<key>NSMessage</key>
<string>requestService</string>
<key>NSUserData</key>
<string>mail-selection</string>
<key>NSPortName</key>
<string>Emacs</string>
<key>NSSendTypes</key>
<array>
<string>NSStringPboardType</string>
</array>
</dict>
<dict>
<key>NSMenuItem</key>
<dict>
<key>default</key>
<string>Emacs.app/Send Email to Selected Address</string>
</dict>
<key>NSMessage</key>
<string>requestService</string>
<key>NSUserData</key>
<string>mail-to</string>
<key>NSPortName</key>
<string>Emacs</string>
<key>NSSendTypes</key>
<array>
<string>NSStringPboardType</string>
</array>
</dict>
</array>
<key>CFBundleExecutable</key>
<string>Emacs</string>
<key>CFBundleGetInfoString</key>
<string>Emacs 23.0.60 (C) Free Software Foundation</string>
<key>CFBundleIconFile</key>
<string>Emacs</string>
<key>CFBundleIdentifier</key>
<string>Emacs</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Emacs</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>Version 23.0.60</string>
<key>CFBundleSignature</key>
<string>Emcs</string>
<key>CFBundleVersion</key>
<string>NS 9.0</string>
<key>NSPrincipalClass</key>
<string>EmacsApp</string>
</dict>
</plist>

View file

@ -0,0 +1 @@
APPLEmcs

View file

@ -0,0 +1 @@
<font face="lucida grande" size="-1"><a href="http://emacs-app.sf.net">http://emacs-app.sf.net</a></font>

View file

@ -0,0 +1,6 @@
/* Localized versions of Info.plist keys */
CFBundleName = "Emacs";
CFBundleShortVersionString = "Version 23.0.60";
CFBundleGetInfoString = "Emacs version 23.0.60, GNUstep / MacOS X Cocoa version 9.0";
NSHumanReadableCopyright = "Copyright 2008 Free Software Foundation.";

View file

@ -0,0 +1,32 @@
{
IBClasses = (
{
ACTIONS = {
cancel = id;
ok = id;
resetToDefaults = id;
runHelp = id;
setColors = id;
setDefaultFont = id;
};
CLASS = EmacsPrefsController;
LANGUAGE = ObjC;
OUTLETS = {
alternateModMenu = NSPopUpButton;
commandModMenu = NSPopUpButton;
controlModMenu = NSPopUpButton;
cursorBlinkSlider = NSSlider;
cursorTypeMatrix = NSMatrix;
expandSpaceSlider = NSSlider;
functionModMenu = NSPopUpButton;
prefsWindow = NSWindow;
smoothFontsCheck = NSButton;
useQuickdrawCheck = NSButton;
useSysHiliteCheck = NSButton;
};
SUPERCLASS = NSObject;
},
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }
);
IBVersion = 1;
}

View file

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>196 42 356 240 0 0 1440 878 </string>
<key>IBFramework Version</key>
<string>446.1</string>
<key>IBGroupedObjects</key>
<dict>
<key>5</key>
<array>
<string>114</string>
<string>110</string>
<string>111</string>
<string>112</string>
<string>113</string>
</array>
<key>6</key>
<array>
<string>183</string>
<string>176</string>
</array>
<key>7</key>
<array>
<string>191</string>
<string>184</string>
</array>
<key>9</key>
<array>
<string>201</string>
<string>194</string>
</array>
</dict>
<key>IBLastGroupID</key>
<string>10</string>
<key>IBOldestOS</key>
<integer>3</integer>
<key>IBOpenObjects</key>
<array>
<integer>5</integer>
</array>
<key>IBSystem Version</key>
<string>8R2232</string>
</dict>
</plist>

View file

@ -0,0 +1,848 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 42;
objects = {
/* Begin PBXBuildFile section */
3C15C0EB0902D89500A8542F /* termhooks.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C02F0902D89500A8542F /* termhooks.h */; };
3C15C0EC0902D89500A8542F /* termchar.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0300902D89500A8542F /* termchar.h */; };
3C15C0EF0902D89500A8542F /* syswait.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0330902D89500A8542F /* syswait.h */; };
3C15C0F00902D89500A8542F /* systty.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0340902D89500A8542F /* systty.h */; };
3C15C0F10902D89500A8542F /* systime.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0350902D89500A8542F /* systime.h */; };
3C15C0F20902D89500A8542F /* syssignal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0360902D89500A8542F /* syssignal.h */; };
3C15C0F30902D89500A8542F /* sysselect.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0370902D89500A8542F /* sysselect.h */; };
3C15C0F50902D89500A8542F /* syntax.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0390902D89500A8542F /* syntax.h */; };
3C15C0FD0902D89500A8542F /* region-cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0410902D89500A8542F /* region-cache.h */; };
3C15C0FF0902D89500A8542F /* regex.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0430902D89500A8542F /* regex.h */; };
3C15C1020902D89500A8542F /* puresize.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0460902D89500A8542F /* puresize.h */; };
3C15C1030902D89500A8542F /* process.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0470902D89500A8542F /* process.h */; };
3C15C1080902D89500A8542F /* point.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C04C0902D89500A8542F /* point.h */; };
3C15C1090902D89500A8542F /* param.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C04D0902D89500A8542F /* param.h */; };
3C15C10B0902D89500A8542F /* nsgui.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C04F0902D89500A8542F /* nsgui.h */; };
3C15C10C0902D89500A8542F /* ndir.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0500902D89500A8542F /* ndir.h */; };
3C15C1110902D89500A8542F /* mem-limits.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0550902D89500A8542F /* mem-limits.h */; };
3C15C1120902D89500A8542F /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0560902D89500A8542F /* md5.h */; };
3C15C1190902D89500A8542F /* macros.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C05D0902D89500A8542F /* macros.h */; };
3C15C1220902D89500A8542F /* keymap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0660902D89500A8542F /* keymap.h */; };
3C15C1240902D89500A8542F /* keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0680902D89500A8542F /* keyboard.h */; };
3C15C1270902D89500A8542F /* intervals.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C06B0902D89500A8542F /* intervals.h */; };
3C15C12A0902D89500A8542F /* indent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C06E0902D89500A8542F /* indent.h */; };
3C15C1320902D89500A8542F /* category.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0760902D89500A8542F /* category.h */; };
3C15C1330902D89500A8542F /* coding.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0770902D89500A8542F /* coding.h */; };
3C15C1340902D89500A8542F /* buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0780902D89500A8542F /* buffer.h */; };
3C15C1350902D89500A8542F /* vlimit.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0790902D89500A8542F /* vlimit.h */; };
3C15C1450902D89500A8542F /* cm.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0890902D89500A8542F /* cm.h */; };
3C15C14E0902D89500A8542F /* uaf.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0920902D89500A8542F /* uaf.h */; };
3C15C1510902D89500A8542F /* termopts.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0950902D89500A8542F /* termopts.h */; };
3C15C15C0902D89500A8542F /* window.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0A00902D89500A8542F /* window.h */; };
3C15C1720902D89500A8542F /* gnu.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0B60902D89500A8542F /* gnu.h */; };
3C15C1740902D89500A8542F /* getpagesize.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0B80902D89500A8542F /* getpagesize.h */; };
3C15C17B0902D89500A8542F /* disptab.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0BF0902D89500A8542F /* disptab.h */; };
3C15C17E0902D89500A8542F /* epaths.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0C20902D89500A8542F /* epaths.h */; };
3C15C1810902D89500A8542F /* ccl.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0C50902D89500A8542F /* ccl.h */; };
3C15C1830902D89500A8542F /* composite.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0C70902D89500A8542F /* composite.h */; };
3C15C1840902D89500A8542F /* charset.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0C80902D89500A8542F /* charset.h */; };
3C15C1850902D89500A8542F /* fontset.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0C90902D89500A8542F /* fontset.h */; };
3C15C1930902D89500A8542F /* commands.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0D70902D89500A8542F /* commands.h */; };
3C15C1950902D89500A8542F /* dispextern.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0D90902D89500A8542F /* dispextern.h */; };
3C15C1970902D89500A8542F /* acldef.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0DB0902D89500A8542F /* acldef.h */; };
3C15C19A0902D89500A8542F /* character.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0DE0902D89500A8542F /* character.h */; };
3C15C19E0902D89500A8542F /* chpdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0E20902D89500A8542F /* chpdef.h */; };
3C15C1A00902D89500A8542F /* frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0E40902D89500A8542F /* frame.h */; };
3C15C1A20902D89500A8542F /* atimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0E60902D89500A8542F /* atimer.h */; };
3C15C1A30902D89500A8542F /* blockinput.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C15C0E70902D89500A8542F /* blockinput.h */; };
3C15C1A80902D97100A8542F /* nsimage.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C15C1A70902D97100A8542F /* nsimage.m */; };
3C4D6D6B0DE50D2300B20D4E /* font.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C4D6D660DE50D2300B20D4E /* font.c */; };
3C4D6D6C0DE50D2300B20D4E /* font.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C4D6D670DE50D2300B20D4E /* font.h */; };
3C4D6D6D0DE50D2300B20D4E /* termcap.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C4D6D680DE50D2300B20D4E /* termcap.c */; };
3C4D6D6E0DE50D2300B20D4E /* terminal.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C4D6D690DE50D2300B20D4E /* terminal.c */; };
3C4D6D6F0DE50D2300B20D4E /* tparam.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C4D6D6A0DE50D2300B20D4E /* tparam.c */; };
3C4D6D730DE50D5D00B20D4E /* nsfont.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C4D6D710DE50D5D00B20D4E /* nsfont.m */; };
3C7F3C3B07EB3B05003C8A4D /* nsterm.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C7F3C3A07EB3B05003C8A4D /* nsterm.h */; };
3CB8E29A0E2CE6BF003F3104 /* preferences.nib in Resources */ = {isa = PBXBuildFile; fileRef = 3CB8E2990E2CE6BF003F3104 /* preferences.nib */; };
3CB8E29E0E2CE73A003F3104 /* Emacs.icns in Resources */ = {isa = PBXBuildFile; fileRef = 3CB8E29D0E2CE73A003F3104 /* Emacs.icns */; };
3CB8E2A00E2CE7F5003F3104 /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = 3CB8E29F0E2CE7F5003F3104 /* Credits.html */; };
3CB8E2A70E2CE856003F3104 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3CB8E2A50E2CE856003F3104 /* InfoPlist.strings */; };
3CC5430607E2315800C271A9 /* nsfns.m in Sources */ = {isa = PBXBuildFile; fileRef = 090AF67E00C61DCD7F000001 /* nsfns.m */; };
3CC5430707E2315800C271A9 /* nsmenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 090AF68000C61DCD7F000001 /* nsmenu.m */; };
3CC5430807E2315800C271A9 /* nsselect.m in Sources */ = {isa = PBXBuildFile; fileRef = 090AF68100C61DCD7F000001 /* nsselect.m */; };
3CC5430907E2315800C271A9 /* nsterm.m in Sources */ = {isa = PBXBuildFile; fileRef = 090AF68300C61DCD7F000001 /* nsterm.m */; };
3CDCED340902E99700B2EF7E /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CDCED330902E99700B2EF7E /* config.h */; };
3CDCEDD00902EA8200B2EF7E /* term.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED550902EA8100B2EF7E /* term.c */; };
3CDCEDD10902EA8200B2EF7E /* sysdep.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED560902EA8100B2EF7E /* sysdep.c */; };
3CDCEDD20902EA8200B2EF7E /* syntax.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED570902EA8100B2EF7E /* syntax.c */; };
3CDCEDD40902EA8200B2EF7E /* strftime.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED590902EA8100B2EF7E /* strftime.c */; };
3CDCEDD50902EA8200B2EF7E /* sound.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED5A0902EA8100B2EF7E /* sound.c */; };
3CDCEDD70902EA8200B2EF7E /* search.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED5C0902EA8100B2EF7E /* search.c */; };
3CDCEDD80902EA8200B2EF7E /* scroll.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED5D0902EA8100B2EF7E /* scroll.c */; };
3CDCEDD90902EA8200B2EF7E /* region-cache.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED5E0902EA8100B2EF7E /* region-cache.c */; };
3CDCEDDA0902EA8200B2EF7E /* regex.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED5F0902EA8100B2EF7E /* regex.c */; };
3CDCEDDC0902EA8200B2EF7E /* process.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED610902EA8100B2EF7E /* process.c */; };
3CDCEDDD0902EA8200B2EF7E /* print.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED620902EA8100B2EF7E /* print.c */; };
3CDCEDDF0902EA8200B2EF7E /* pre-crt0.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED640902EA8100B2EF7E /* pre-crt0.c */; };
3CDCEDE20902EA8200B2EF7E /* minibuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED670902EA8100B2EF7E /* minibuf.c */; };
3CDCEDE30902EA8200B2EF7E /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED680902EA8100B2EF7E /* md5.c */; };
3CDCEDE40902EA8200B2EF7E /* marker.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED690902EA8100B2EF7E /* marker.c */; };
3CDCEDE80902EA8200B2EF7E /* macros.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED6D0902EA8100B2EF7E /* macros.c */; };
3CDCEDEC0902EA8200B2EF7E /* lread.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED710902EA8100B2EF7E /* lread.c */; };
3CDCEDED0902EA8200B2EF7E /* lastfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED720902EA8100B2EF7E /* lastfile.c */; };
3CDCEDEE0902EA8200B2EF7E /* keymap.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED730902EA8100B2EF7E /* keymap.c */; };
3CDCEDEF0902EA8200B2EF7E /* keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED740902EA8200B2EF7E /* keyboard.c */; };
3CDCEDF00902EA8200B2EF7E /* intervals.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED750902EA8200B2EF7E /* intervals.c */; };
3CDCEDF10902EA8200B2EF7E /* insdel.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED760902EA8200B2EF7E /* insdel.c */; };
3CDCEDF20902EA8200B2EF7E /* indent.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED770902EA8200B2EF7E /* indent.c */; };
3CDCEDF30902EA8200B2EF7E /* image.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED780902EA8200B2EF7E /* image.c */; };
3CDCEDF50902EA8200B2EF7E /* cmds.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED7A0902EA8200B2EF7E /* cmds.c */; };
3CDCEDF60902EA8200B2EF7E /* category.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED7B0902EA8200B2EF7E /* category.c */; };
3CDCEDF70902EA8200B2EF7E /* coding.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED7C0902EA8200B2EF7E /* coding.c */; };
3CDCEDFE0902EA8200B2EF7E /* unexmacosx.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED830902EA8200B2EF7E /* unexmacosx.c */; };
3CDCEE060902EA8200B2EF7E /* buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED8B0902EA8200B2EF7E /* buffer.c */; };
3CDCEE070902EA8200B2EF7E /* character.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED8C0902EA8200B2EF7E /* character.c */; };
3CDCEE0D0902EA8200B2EF7E /* undo.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED920902EA8200B2EF7E /* undo.c */; };
3CDCEE0F0902EA8200B2EF7E /* textprop.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED940902EA8200B2EF7E /* textprop.c */; };
3CDCEE100902EA8200B2EF7E /* terminfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED950902EA8200B2EF7E /* terminfo.c */; };
3CDCEE170902EA8200B2EF7E /* xfaces.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED9C0902EA8200B2EF7E /* xfaces.c */; };
3CDCEE180902EA8200B2EF7E /* xdisp.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED9D0902EA8200B2EF7E /* xdisp.c */; };
3CDCEE190902EA8200B2EF7E /* window.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCED9E0902EA8200B2EF7E /* window.c */; };
3CDCEE2B0902EA8200B2EF7E /* doprnt.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDB00902EA8200B2EF7E /* doprnt.c */; };
3CDCEE2C0902EA8200B2EF7E /* doc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDB10902EA8200B2EF7E /* doc.c */; };
3CDCEE2D0902EA8200B2EF7E /* dired.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDB20902EA8200B2EF7E /* dired.c */; };
3CDCEE2E0902EA8200B2EF7E /* data.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDB30902EA8200B2EF7E /* data.c */; };
3CDCEE2F0902EA8200B2EF7E /* callint.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDB40902EA8200B2EF7E /* callint.c */; };
3CDCEE310902EA8200B2EF7E /* ccl.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDB60902EA8200B2EF7E /* ccl.c */; };
3CDCEE320902EA8200B2EF7E /* fontset.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDB70902EA8200B2EF7E /* fontset.c */; };
3CDCEE330902EA8200B2EF7E /* fns.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDB80902EA8200B2EF7E /* fns.c */; };
3CDCEE340902EA8200B2EF7E /* floatfns.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDB90902EA8200B2EF7E /* floatfns.c */; };
3CDCEE360902EA8200B2EF7E /* filemode.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDBB0902EA8200B2EF7E /* filemode.c */; };
3CDCEE370902EA8200B2EF7E /* filelock.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDBC0902EA8200B2EF7E /* filelock.c */; };
3CDCEE380902EA8200B2EF7E /* emacs.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDBD0902EA8200B2EF7E /* emacs.c */; };
3CDCEE390902EA8200B2EF7E /* editfns.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDBE0902EA8200B2EF7E /* editfns.c */; };
3CDCEE3A0902EA8200B2EF7E /* fileio.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDBF0902EA8200B2EF7E /* fileio.c */; };
3CDCEE3B0902EA8200B2EF7E /* eval.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDC00902EA8200B2EF7E /* eval.c */; };
3CDCEE3C0902EA8200B2EF7E /* casetab.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDC10902EA8200B2EF7E /* casetab.c */; };
3CDCEE3D0902EA8200B2EF7E /* composite.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDC20902EA8200B2EF7E /* composite.c */; };
3CDCEE3E0902EA8200B2EF7E /* dispnew.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDC30902EA8200B2EF7E /* dispnew.c */; };
3CDCEE3F0902EA8200B2EF7E /* charset.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDC40902EA8200B2EF7E /* charset.c */; };
3CDCEE400902EA8200B2EF7E /* alloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDC50902EA8200B2EF7E /* alloc.c */; };
3CDCEE410902EA8200B2EF7E /* bytecode.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDC60902EA8200B2EF7E /* bytecode.c */; };
3CDCEE420902EA8200B2EF7E /* callproc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDC70902EA8200B2EF7E /* callproc.c */; };
3CDCEE430902EA8200B2EF7E /* cm.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDC80902EA8200B2EF7E /* cm.c */; };
3CDCEE440902EA8200B2EF7E /* casefiddle.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDC90902EA8200B2EF7E /* casefiddle.c */; };
3CDCEE450902EA8200B2EF7E /* fringe.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDCA0902EA8200B2EF7E /* fringe.c */; };
3CDCEE460902EA8200B2EF7E /* frame.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDCB0902EA8200B2EF7E /* frame.c */; };
3CDCEE470902EA8200B2EF7E /* chartab.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDCC0902EA8200B2EF7E /* chartab.c */; };
3CDCEE480902EA8200B2EF7E /* atimer.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CDCEDCD0902EA8200B2EF7E /* atimer.c */; };
3CFDFC3B08E79A6800B05918 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CFDFC3A08E79A6800B05918 /* AppKit.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
090AF67E00C61DCD7F000001 /* nsfns.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = nsfns.m; path = ../../src/nsfns.m; sourceTree = "<group>"; };
090AF68000C61DCD7F000001 /* nsmenu.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = nsmenu.m; path = ../../src/nsmenu.m; sourceTree = "<group>"; };
090AF68100C61DCD7F000001 /* nsselect.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = nsselect.m; path = ../../src/nsselect.m; sourceTree = "<group>"; };
090AF68300C61DCD7F000001 /* nsterm.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = nsterm.m; path = ../../src/nsterm.m; sourceTree = "<group>"; };
3C15C02F0902D89500A8542F /* termhooks.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = termhooks.h; path = ../../src/termhooks.h; sourceTree = "<group>"; };
3C15C0300902D89500A8542F /* termchar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = termchar.h; path = ../../src/termchar.h; sourceTree = "<group>"; };
3C15C0330902D89500A8542F /* syswait.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = syswait.h; path = ../../src/syswait.h; sourceTree = "<group>"; };
3C15C0340902D89500A8542F /* systty.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = systty.h; path = ../../src/systty.h; sourceTree = "<group>"; };
3C15C0350902D89500A8542F /* systime.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = systime.h; path = ../../src/systime.h; sourceTree = "<group>"; };
3C15C0360902D89500A8542F /* syssignal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = syssignal.h; path = ../../src/syssignal.h; sourceTree = "<group>"; };
3C15C0370902D89500A8542F /* sysselect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = sysselect.h; path = ../../src/sysselect.h; sourceTree = "<group>"; };
3C15C0390902D89500A8542F /* syntax.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = syntax.h; path = ../../src/syntax.h; sourceTree = "<group>"; };
3C15C0410902D89500A8542F /* region-cache.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "region-cache.h"; path = "../../src/region-cache.h"; sourceTree = "<group>"; };
3C15C0430902D89500A8542F /* regex.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = regex.h; path = ../../src/regex.h; sourceTree = "<group>"; };
3C15C0460902D89500A8542F /* puresize.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = puresize.h; path = ../../src/puresize.h; sourceTree = "<group>"; };
3C15C0470902D89500A8542F /* process.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = process.h; path = ../../src/process.h; sourceTree = "<group>"; };
3C15C04C0902D89500A8542F /* point.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = point.h; path = ../../src/point.h; sourceTree = "<group>"; };
3C15C04D0902D89500A8542F /* param.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = param.h; path = ../../src/param.h; sourceTree = "<group>"; };
3C15C04F0902D89500A8542F /* nsgui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = nsgui.h; path = ../../src/nsgui.h; sourceTree = "<group>"; };
3C15C0500902D89500A8542F /* ndir.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ndir.h; path = ../../src/ndir.h; sourceTree = "<group>"; };
3C15C0550902D89500A8542F /* mem-limits.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = "mem-limits.h"; path = "../../src/mem-limits.h"; sourceTree = "<group>"; };
3C15C0560902D89500A8542F /* md5.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = md5.h; path = ../../src/md5.h; sourceTree = "<group>"; };
3C15C05D0902D89500A8542F /* macros.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macros.h; path = ../../src/macros.h; sourceTree = "<group>"; };
3C15C0660902D89500A8542F /* keymap.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = keymap.h; path = ../../src/keymap.h; sourceTree = "<group>"; };
3C15C0680902D89500A8542F /* keyboard.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = keyboard.h; path = ../../src/keyboard.h; sourceTree = "<group>"; };
3C15C06B0902D89500A8542F /* intervals.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = intervals.h; path = ../../src/intervals.h; sourceTree = "<group>"; };
3C15C06E0902D89500A8542F /* indent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = indent.h; path = ../../src/indent.h; sourceTree = "<group>"; };
3C15C0760902D89500A8542F /* category.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = category.h; path = ../../src/category.h; sourceTree = "<group>"; };
3C15C0770902D89500A8542F /* coding.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = coding.h; path = ../../src/coding.h; sourceTree = "<group>"; };
3C15C0780902D89500A8542F /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = buffer.h; path = ../../src/buffer.h; sourceTree = "<group>"; };
3C15C0790902D89500A8542F /* vlimit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = vlimit.h; path = ../../src/vlimit.h; sourceTree = "<group>"; };
3C15C0890902D89500A8542F /* cm.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = cm.h; path = ../../src/cm.h; sourceTree = "<group>"; };
3C15C0920902D89500A8542F /* uaf.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = uaf.h; path = ../../src/uaf.h; sourceTree = "<group>"; };
3C15C0950902D89500A8542F /* termopts.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = termopts.h; path = ../../src/termopts.h; sourceTree = "<group>"; };
3C15C0A00902D89500A8542F /* window.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = window.h; path = ../../src/window.h; sourceTree = "<group>"; };
3C15C0B60902D89500A8542F /* gnu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = gnu.h; path = ../../src/gnu.h; sourceTree = "<group>"; };
3C15C0B80902D89500A8542F /* getpagesize.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = getpagesize.h; path = ../../src/getpagesize.h; sourceTree = "<group>"; };
3C15C0BF0902D89500A8542F /* disptab.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = disptab.h; path = ../../src/disptab.h; sourceTree = "<group>"; };
3C15C0C20902D89500A8542F /* epaths.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = epaths.h; path = ../../src/epaths.h; sourceTree = "<group>"; };
3C15C0C50902D89500A8542F /* ccl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ccl.h; path = ../../src/ccl.h; sourceTree = "<group>"; };
3C15C0C70902D89500A8542F /* composite.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = composite.h; path = ../../src/composite.h; sourceTree = "<group>"; };
3C15C0C80902D89500A8542F /* charset.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = charset.h; path = ../../src/charset.h; sourceTree = "<group>"; };
3C15C0C90902D89500A8542F /* fontset.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = fontset.h; path = ../../src/fontset.h; sourceTree = "<group>"; };
3C15C0D70902D89500A8542F /* commands.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = commands.h; path = ../../src/commands.h; sourceTree = "<group>"; };
3C15C0D90902D89500A8542F /* dispextern.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = dispextern.h; path = ../../src/dispextern.h; sourceTree = "<group>"; };
3C15C0DB0902D89500A8542F /* acldef.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = acldef.h; path = ../../src/acldef.h; sourceTree = "<group>"; };
3C15C0DE0902D89500A8542F /* character.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = character.h; path = ../../src/character.h; sourceTree = "<group>"; };
3C15C0E20902D89500A8542F /* chpdef.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = chpdef.h; path = ../../src/chpdef.h; sourceTree = "<group>"; };
3C15C0E40902D89500A8542F /* frame.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = frame.h; path = ../../src/frame.h; sourceTree = "<group>"; };
3C15C0E60902D89500A8542F /* atimer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = atimer.h; path = ../../src/atimer.h; sourceTree = "<group>"; };
3C15C0E70902D89500A8542F /* blockinput.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = blockinput.h; path = ../../src/blockinput.h; sourceTree = "<group>"; };
3C15C1A70902D97100A8542F /* nsimage.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = nsimage.m; path = ../../src/nsimage.m; sourceTree = "<group>"; };
3C4D6D660DE50D2300B20D4E /* font.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = font.c; path = ../../src/font.c; sourceTree = SOURCE_ROOT; };
3C4D6D670DE50D2300B20D4E /* font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = font.h; path = ../../src/font.h; sourceTree = SOURCE_ROOT; };
3C4D6D680DE50D2300B20D4E /* termcap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = termcap.c; path = ../../src/termcap.c; sourceTree = SOURCE_ROOT; };
3C4D6D690DE50D2300B20D4E /* terminal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = terminal.c; path = ../../src/terminal.c; sourceTree = SOURCE_ROOT; };
3C4D6D6A0DE50D2300B20D4E /* tparam.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tparam.c; path = ../../src/tparam.c; sourceTree = SOURCE_ROOT; };
3C4D6D710DE50D5D00B20D4E /* nsfont.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = nsfont.m; path = ../../src/nsfont.m; sourceTree = SOURCE_ROOT; };
3C7F3C3A07EB3B05003C8A4D /* nsterm.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = nsterm.h; path = ../../src/nsterm.h; sourceTree = "<group>"; };
3CB8E2990E2CE6BF003F3104 /* preferences.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = preferences.nib; path = Emacs.base/Contents/Resources/preferences.nib; sourceTree = "<group>"; };
3CB8E29D0E2CE73A003F3104 /* Emacs.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = Emacs.icns; path = Emacs.base/Contents/Resources/Emacs.icns; sourceTree = "<group>"; };
3CB8E29F0E2CE7F5003F3104 /* Credits.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = Credits.html; path = Emacs.base/Contents/Resources/Credits.html; sourceTree = "<group>"; };
3CB8E2A60E2CE856003F3104 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = InfoPlist.strings; sourceTree = "<group>"; };
3CC5434C07E2315800C271A9 /* Emacs.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Emacs.app; sourceTree = BUILT_PRODUCTS_DIR; };
3CDCED330902E99700B2EF7E /* config.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = config.h; path = ../../src/config.h; sourceTree = "<group>"; };
3CDCED550902EA8100B2EF7E /* term.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = term.c; path = ../../src/term.c; sourceTree = "<group>"; };
3CDCED560902EA8100B2EF7E /* sysdep.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sysdep.c; path = ../../src/sysdep.c; sourceTree = "<group>"; };
3CDCED570902EA8100B2EF7E /* syntax.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = syntax.c; path = ../../src/syntax.c; sourceTree = "<group>"; };
3CDCED590902EA8100B2EF7E /* strftime.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = strftime.c; path = ../../src/strftime.c; sourceTree = "<group>"; };
3CDCED5A0902EA8100B2EF7E /* sound.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = sound.c; path = ../../src/sound.c; sourceTree = "<group>"; };
3CDCED5C0902EA8100B2EF7E /* search.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = search.c; path = ../../src/search.c; sourceTree = "<group>"; };
3CDCED5D0902EA8100B2EF7E /* scroll.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = scroll.c; path = ../../src/scroll.c; sourceTree = "<group>"; };
3CDCED5E0902EA8100B2EF7E /* region-cache.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = "region-cache.c"; path = "../../src/region-cache.c"; sourceTree = "<group>"; };
3CDCED5F0902EA8100B2EF7E /* regex.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = regex.c; path = ../../src/regex.c; sourceTree = "<group>"; };
3CDCED610902EA8100B2EF7E /* process.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = process.c; path = ../../src/process.c; sourceTree = "<group>"; };
3CDCED620902EA8100B2EF7E /* print.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = print.c; path = ../../src/print.c; sourceTree = "<group>"; };
3CDCED640902EA8100B2EF7E /* pre-crt0.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = "pre-crt0.c"; path = "../../src/pre-crt0.c"; sourceTree = "<group>"; };
3CDCED670902EA8100B2EF7E /* minibuf.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = minibuf.c; path = ../../src/minibuf.c; sourceTree = "<group>"; };
3CDCED680902EA8100B2EF7E /* md5.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = md5.c; path = ../../src/md5.c; sourceTree = "<group>"; };
3CDCED690902EA8100B2EF7E /* marker.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = marker.c; path = ../../src/marker.c; sourceTree = "<group>"; };
3CDCED6D0902EA8100B2EF7E /* macros.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = macros.c; path = ../../src/macros.c; sourceTree = "<group>"; };
3CDCED710902EA8100B2EF7E /* lread.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lread.c; path = ../../src/lread.c; sourceTree = "<group>"; };
3CDCED720902EA8100B2EF7E /* lastfile.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = lastfile.c; path = ../../src/lastfile.c; sourceTree = "<group>"; };
3CDCED730902EA8100B2EF7E /* keymap.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = keymap.c; path = ../../src/keymap.c; sourceTree = "<group>"; };
3CDCED740902EA8200B2EF7E /* keyboard.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = keyboard.c; path = ../../src/keyboard.c; sourceTree = "<group>"; };
3CDCED750902EA8200B2EF7E /* intervals.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = intervals.c; path = ../../src/intervals.c; sourceTree = "<group>"; };
3CDCED760902EA8200B2EF7E /* insdel.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = insdel.c; path = ../../src/insdel.c; sourceTree = "<group>"; };
3CDCED770902EA8200B2EF7E /* indent.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = indent.c; path = ../../src/indent.c; sourceTree = "<group>"; };
3CDCED780902EA8200B2EF7E /* image.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = image.c; path = ../../src/image.c; sourceTree = "<group>"; };
3CDCED7A0902EA8200B2EF7E /* cmds.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = cmds.c; path = ../../src/cmds.c; sourceTree = "<group>"; };
3CDCED7B0902EA8200B2EF7E /* category.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = category.c; path = ../../src/category.c; sourceTree = "<group>"; };
3CDCED7C0902EA8200B2EF7E /* coding.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = coding.c; path = ../../src/coding.c; sourceTree = "<group>"; };
3CDCED830902EA8200B2EF7E /* unexmacosx.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = unexmacosx.c; path = ../../src/unexmacosx.c; sourceTree = "<group>"; };
3CDCED8B0902EA8200B2EF7E /* buffer.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = buffer.c; path = ../../src/buffer.c; sourceTree = "<group>"; };
3CDCED8C0902EA8200B2EF7E /* character.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = character.c; path = ../../src/character.c; sourceTree = "<group>"; };
3CDCED920902EA8200B2EF7E /* undo.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = undo.c; path = ../../src/undo.c; sourceTree = "<group>"; };
3CDCED940902EA8200B2EF7E /* textprop.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = textprop.c; path = ../../src/textprop.c; sourceTree = "<group>"; };
3CDCED950902EA8200B2EF7E /* terminfo.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = terminfo.c; path = ../../src/terminfo.c; sourceTree = "<group>"; };
3CDCED9C0902EA8200B2EF7E /* xfaces.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = xfaces.c; path = ../../src/xfaces.c; sourceTree = "<group>"; };
3CDCED9D0902EA8200B2EF7E /* xdisp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = xdisp.c; path = ../../src/xdisp.c; sourceTree = "<group>"; };
3CDCED9E0902EA8200B2EF7E /* window.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = window.c; path = ../../src/window.c; sourceTree = "<group>"; };
3CDCEDB00902EA8200B2EF7E /* doprnt.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = doprnt.c; path = ../../src/doprnt.c; sourceTree = "<group>"; };
3CDCEDB10902EA8200B2EF7E /* doc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = doc.c; path = ../../src/doc.c; sourceTree = "<group>"; };
3CDCEDB20902EA8200B2EF7E /* dired.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dired.c; path = ../../src/dired.c; sourceTree = "<group>"; };
3CDCEDB30902EA8200B2EF7E /* data.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = data.c; path = ../../src/data.c; sourceTree = "<group>"; };
3CDCEDB40902EA8200B2EF7E /* callint.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = callint.c; path = ../../src/callint.c; sourceTree = "<group>"; };
3CDCEDB60902EA8200B2EF7E /* ccl.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ccl.c; path = ../../src/ccl.c; sourceTree = "<group>"; };
3CDCEDB70902EA8200B2EF7E /* fontset.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = fontset.c; path = ../../src/fontset.c; sourceTree = "<group>"; };
3CDCEDB80902EA8200B2EF7E /* fns.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = fns.c; path = ../../src/fns.c; sourceTree = "<group>"; };
3CDCEDB90902EA8200B2EF7E /* floatfns.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = floatfns.c; path = ../../src/floatfns.c; sourceTree = "<group>"; };
3CDCEDBB0902EA8200B2EF7E /* filemode.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = filemode.c; path = ../../src/filemode.c; sourceTree = "<group>"; };
3CDCEDBC0902EA8200B2EF7E /* filelock.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = filelock.c; path = ../../src/filelock.c; sourceTree = "<group>"; };
3CDCEDBD0902EA8200B2EF7E /* emacs.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = emacs.c; path = ../../src/emacs.c; sourceTree = "<group>"; };
3CDCEDBE0902EA8200B2EF7E /* editfns.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = editfns.c; path = ../../src/editfns.c; sourceTree = "<group>"; };
3CDCEDBF0902EA8200B2EF7E /* fileio.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = fileio.c; path = ../../src/fileio.c; sourceTree = "<group>"; };
3CDCEDC00902EA8200B2EF7E /* eval.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = eval.c; path = ../../src/eval.c; sourceTree = "<group>"; };
3CDCEDC10902EA8200B2EF7E /* casetab.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = casetab.c; path = ../../src/casetab.c; sourceTree = "<group>"; };
3CDCEDC20902EA8200B2EF7E /* composite.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = composite.c; path = ../../src/composite.c; sourceTree = "<group>"; };
3CDCEDC30902EA8200B2EF7E /* dispnew.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = dispnew.c; path = ../../src/dispnew.c; sourceTree = "<group>"; };
3CDCEDC40902EA8200B2EF7E /* charset.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = charset.c; path = ../../src/charset.c; sourceTree = "<group>"; };
3CDCEDC50902EA8200B2EF7E /* alloc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = alloc.c; path = ../../src/alloc.c; sourceTree = "<group>"; };
3CDCEDC60902EA8200B2EF7E /* bytecode.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = bytecode.c; path = ../../src/bytecode.c; sourceTree = "<group>"; };
3CDCEDC70902EA8200B2EF7E /* callproc.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = callproc.c; path = ../../src/callproc.c; sourceTree = "<group>"; };
3CDCEDC80902EA8200B2EF7E /* cm.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = cm.c; path = ../../src/cm.c; sourceTree = "<group>"; };
3CDCEDC90902EA8200B2EF7E /* casefiddle.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = casefiddle.c; path = ../../src/casefiddle.c; sourceTree = "<group>"; };
3CDCEDCA0902EA8200B2EF7E /* fringe.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = fringe.c; path = ../../src/fringe.c; sourceTree = "<group>"; };
3CDCEDCB0902EA8200B2EF7E /* frame.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = frame.c; path = ../../src/frame.c; sourceTree = "<group>"; };
3CDCEDCC0902EA8200B2EF7E /* chartab.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = chartab.c; path = ../../src/chartab.c; sourceTree = "<group>"; };
3CDCEDCD0902EA8200B2EF7E /* atimer.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = atimer.c; path = ../../src/atimer.c; sourceTree = "<group>"; };
3CFDFC3A08E79A6800B05918 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /Developer/SDKs/MacOSX10.3.9.sdk/System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3CC5434707E2315800C271A9 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3CFDFC3B08E79A6800B05918 /* AppKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
3CFDFC3A08E79A6800B05918 /* AppKit.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
3CC5434C07E2315800C271A9 /* Emacs.app */,
);
name = Products;
sourceTree = "<group>";
};
289FC26B00C69A287F000001 /* NeXTStep */ = {
isa = PBXGroup;
children = (
3C4D6D710DE50D5D00B20D4E /* nsfont.m */,
3C15C1A70902D97100A8542F /* nsimage.m */,
3C15C04F0902D89500A8542F /* nsgui.h */,
3C7F3C3A07EB3B05003C8A4D /* nsterm.h */,
090AF67E00C61DCD7F000001 /* nsfns.m */,
090AF68000C61DCD7F000001 /* nsmenu.m */,
090AF68100C61DCD7F000001 /* nsselect.m */,
090AF68300C61DCD7F000001 /* nsterm.m */,
);
name = NeXTStep;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* Emacs */ = {
isa = PBXGroup;
children = (
289FC26B00C69A287F000001 /* NeXTStep */,
3C15C23E0902E6B000A8542F /* emacs-hdr */,
3CDCED4D0902EA6800B2EF7E /* emacs-src */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = Emacs;
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
3CB8E2A40E2CE856003F3104 /* English.lproj */,
3CB8E29F0E2CE7F5003F3104 /* Credits.html */,
3CB8E2990E2CE6BF003F3104 /* preferences.nib */,
739637F200C4DF3C7F000001 /* Images */,
);
name = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
3C15C23E0902E6B000A8542F /* emacs-hdr */ = {
isa = PBXGroup;
children = (
3C4D6D670DE50D2300B20D4E /* font.h */,
3C15C0DB0902D89500A8542F /* acldef.h */,
3C15C0E60902D89500A8542F /* atimer.h */,
3C15C0E70902D89500A8542F /* blockinput.h */,
3C15C0780902D89500A8542F /* buffer.h */,
3C15C0760902D89500A8542F /* category.h */,
3C15C0C50902D89500A8542F /* ccl.h */,
3C15C0DE0902D89500A8542F /* character.h */,
3C15C0C80902D89500A8542F /* charset.h */,
3C15C0E20902D89500A8542F /* chpdef.h */,
3C15C0890902D89500A8542F /* cm.h */,
3CDCED330902E99700B2EF7E /* config.h */,
3C15C0770902D89500A8542F /* coding.h */,
3C15C0D70902D89500A8542F /* commands.h */,
3C15C0C70902D89500A8542F /* composite.h */,
3C15C0D90902D89500A8542F /* dispextern.h */,
3C15C0BF0902D89500A8542F /* disptab.h */,
3C15C0C20902D89500A8542F /* epaths.h */,
3C15C0C90902D89500A8542F /* fontset.h */,
3C15C0E40902D89500A8542F /* frame.h */,
3C15C0B80902D89500A8542F /* getpagesize.h */,
3C15C0B60902D89500A8542F /* gnu.h */,
3C15C06E0902D89500A8542F /* indent.h */,
3C15C06B0902D89500A8542F /* intervals.h */,
3C15C0660902D89500A8542F /* keymap.h */,
3C15C0680902D89500A8542F /* keyboard.h */,
3C15C05D0902D89500A8542F /* macros.h */,
3C15C0560902D89500A8542F /* md5.h */,
3C15C0550902D89500A8542F /* mem-limits.h */,
3C15C0500902D89500A8542F /* ndir.h */,
3C15C04D0902D89500A8542F /* param.h */,
3C15C04C0902D89500A8542F /* point.h */,
3C15C0470902D89500A8542F /* process.h */,
3C15C0460902D89500A8542F /* puresize.h */,
3C15C0430902D89500A8542F /* regex.h */,
3C15C0410902D89500A8542F /* region-cache.h */,
3C15C0390902D89500A8542F /* syntax.h */,
3C15C0370902D89500A8542F /* sysselect.h */,
3C15C0330902D89500A8542F /* syswait.h */,
3C15C0360902D89500A8542F /* syssignal.h */,
3C15C0350902D89500A8542F /* systime.h */,
3C15C0340902D89500A8542F /* systty.h */,
3C15C0300902D89500A8542F /* termchar.h */,
3C15C02F0902D89500A8542F /* termhooks.h */,
3C15C0950902D89500A8542F /* termopts.h */,
3C15C0920902D89500A8542F /* uaf.h */,
3C15C0790902D89500A8542F /* vlimit.h */,
3C15C0A00902D89500A8542F /* window.h */,
);
name = "emacs-hdr";
sourceTree = "<group>";
};
3CB8E2A40E2CE856003F3104 /* English.lproj */ = {
isa = PBXGroup;
children = (
3CB8E2A50E2CE856003F3104 /* InfoPlist.strings */,
);
name = English.lproj;
path = Emacs.base/Contents/Resources/English.lproj;
sourceTree = "<group>";
};
3CDCED4D0902EA6800B2EF7E /* emacs-src */ = {
isa = PBXGroup;
children = (
3C4D6D660DE50D2300B20D4E /* font.c */,
3C4D6D680DE50D2300B20D4E /* termcap.c */,
3C4D6D690DE50D2300B20D4E /* terminal.c */,
3C4D6D6A0DE50D2300B20D4E /* tparam.c */,
3CDCED550902EA8100B2EF7E /* term.c */,
3CDCED560902EA8100B2EF7E /* sysdep.c */,
3CDCED570902EA8100B2EF7E /* syntax.c */,
3CDCED590902EA8100B2EF7E /* strftime.c */,
3CDCED5A0902EA8100B2EF7E /* sound.c */,
3CDCED5C0902EA8100B2EF7E /* search.c */,
3CDCED5D0902EA8100B2EF7E /* scroll.c */,
3CDCED5E0902EA8100B2EF7E /* region-cache.c */,
3CDCED5F0902EA8100B2EF7E /* regex.c */,
3CDCED610902EA8100B2EF7E /* process.c */,
3CDCED620902EA8100B2EF7E /* print.c */,
3CDCED640902EA8100B2EF7E /* pre-crt0.c */,
3CDCED670902EA8100B2EF7E /* minibuf.c */,
3CDCED680902EA8100B2EF7E /* md5.c */,
3CDCED690902EA8100B2EF7E /* marker.c */,
3CDCED6D0902EA8100B2EF7E /* macros.c */,
3CDCED710902EA8100B2EF7E /* lread.c */,
3CDCED720902EA8100B2EF7E /* lastfile.c */,
3CDCED730902EA8100B2EF7E /* keymap.c */,
3CDCED740902EA8200B2EF7E /* keyboard.c */,
3CDCED750902EA8200B2EF7E /* intervals.c */,
3CDCED760902EA8200B2EF7E /* insdel.c */,
3CDCED770902EA8200B2EF7E /* indent.c */,
3CDCED780902EA8200B2EF7E /* image.c */,
3CDCED7A0902EA8200B2EF7E /* cmds.c */,
3CDCED7B0902EA8200B2EF7E /* category.c */,
3CDCED7C0902EA8200B2EF7E /* coding.c */,
3CDCED830902EA8200B2EF7E /* unexmacosx.c */,
3CDCED8B0902EA8200B2EF7E /* buffer.c */,
3CDCED8C0902EA8200B2EF7E /* character.c */,
3CDCED920902EA8200B2EF7E /* undo.c */,
3CDCED940902EA8200B2EF7E /* textprop.c */,
3CDCED950902EA8200B2EF7E /* terminfo.c */,
3CDCED9C0902EA8200B2EF7E /* xfaces.c */,
3CDCED9D0902EA8200B2EF7E /* xdisp.c */,
3CDCED9E0902EA8200B2EF7E /* window.c */,
3CDCEDB00902EA8200B2EF7E /* doprnt.c */,
3CDCEDB10902EA8200B2EF7E /* doc.c */,
3CDCEDB20902EA8200B2EF7E /* dired.c */,
3CDCEDB30902EA8200B2EF7E /* data.c */,
3CDCEDB40902EA8200B2EF7E /* callint.c */,
3CDCEDB60902EA8200B2EF7E /* ccl.c */,
3CDCEDB70902EA8200B2EF7E /* fontset.c */,
3CDCEDB80902EA8200B2EF7E /* fns.c */,
3CDCEDB90902EA8200B2EF7E /* floatfns.c */,
3CDCEDBB0902EA8200B2EF7E /* filemode.c */,
3CDCEDBC0902EA8200B2EF7E /* filelock.c */,
3CDCEDBD0902EA8200B2EF7E /* emacs.c */,
3CDCEDBE0902EA8200B2EF7E /* editfns.c */,
3CDCEDBF0902EA8200B2EF7E /* fileio.c */,
3CDCEDC00902EA8200B2EF7E /* eval.c */,
3CDCEDC10902EA8200B2EF7E /* casetab.c */,
3CDCEDC20902EA8200B2EF7E /* composite.c */,
3CDCEDC30902EA8200B2EF7E /* dispnew.c */,
3CDCEDC40902EA8200B2EF7E /* charset.c */,
3CDCEDC50902EA8200B2EF7E /* alloc.c */,
3CDCEDC60902EA8200B2EF7E /* bytecode.c */,
3CDCEDC70902EA8200B2EF7E /* callproc.c */,
3CDCEDC80902EA8200B2EF7E /* cm.c */,
3CDCEDC90902EA8200B2EF7E /* casefiddle.c */,
3CDCEDCA0902EA8200B2EF7E /* fringe.c */,
3CDCEDCB0902EA8200B2EF7E /* frame.c */,
3CDCEDCC0902EA8200B2EF7E /* chartab.c */,
3CDCEDCD0902EA8200B2EF7E /* atimer.c */,
);
name = "emacs-src";
sourceTree = "<group>";
};
739637F200C4DF3C7F000001 /* Images */ = {
isa = PBXGroup;
children = (
3CB8E29D0E2CE73A003F3104 /* Emacs.icns */,
);
name = Images;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
3CC542FF07E2315800C271A9 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
3C7F3C3B07EB3B05003C8A4D /* nsterm.h in Headers */,
3C15C0EB0902D89500A8542F /* termhooks.h in Headers */,
3C15C0EC0902D89500A8542F /* termchar.h in Headers */,
3C15C0EF0902D89500A8542F /* syswait.h in Headers */,
3C15C0F00902D89500A8542F /* systty.h in Headers */,
3C15C0F10902D89500A8542F /* systime.h in Headers */,
3C15C0F20902D89500A8542F /* syssignal.h in Headers */,
3C15C0F30902D89500A8542F /* sysselect.h in Headers */,
3C15C0F50902D89500A8542F /* syntax.h in Headers */,
3C15C0FD0902D89500A8542F /* region-cache.h in Headers */,
3C15C0FF0902D89500A8542F /* regex.h in Headers */,
3C15C1020902D89500A8542F /* puresize.h in Headers */,
3C15C1030902D89500A8542F /* process.h in Headers */,
3C15C1080902D89500A8542F /* point.h in Headers */,
3C15C1090902D89500A8542F /* param.h in Headers */,
3C15C10B0902D89500A8542F /* nsgui.h in Headers */,
3C15C10C0902D89500A8542F /* ndir.h in Headers */,
3C15C1110902D89500A8542F /* mem-limits.h in Headers */,
3C15C1120902D89500A8542F /* md5.h in Headers */,
3C15C1190902D89500A8542F /* macros.h in Headers */,
3C15C1220902D89500A8542F /* keymap.h in Headers */,
3C15C1240902D89500A8542F /* keyboard.h in Headers */,
3C15C1270902D89500A8542F /* intervals.h in Headers */,
3C15C12A0902D89500A8542F /* indent.h in Headers */,
3C15C1320902D89500A8542F /* category.h in Headers */,
3C15C1330902D89500A8542F /* coding.h in Headers */,
3C15C1340902D89500A8542F /* buffer.h in Headers */,
3C15C1350902D89500A8542F /* vlimit.h in Headers */,
3C15C1450902D89500A8542F /* cm.h in Headers */,
3C15C14E0902D89500A8542F /* uaf.h in Headers */,
3C15C1510902D89500A8542F /* termopts.h in Headers */,
3C15C15C0902D89500A8542F /* window.h in Headers */,
3C15C1720902D89500A8542F /* gnu.h in Headers */,
3C15C1740902D89500A8542F /* getpagesize.h in Headers */,
3C15C17B0902D89500A8542F /* disptab.h in Headers */,
3C15C17E0902D89500A8542F /* epaths.h in Headers */,
3C15C1810902D89500A8542F /* ccl.h in Headers */,
3C15C1830902D89500A8542F /* composite.h in Headers */,
3C15C1840902D89500A8542F /* charset.h in Headers */,
3C15C1850902D89500A8542F /* fontset.h in Headers */,
3C15C1930902D89500A8542F /* commands.h in Headers */,
3C15C1950902D89500A8542F /* dispextern.h in Headers */,
3C15C1970902D89500A8542F /* acldef.h in Headers */,
3C15C19A0902D89500A8542F /* character.h in Headers */,
3C15C19E0902D89500A8542F /* chpdef.h in Headers */,
3C15C1A00902D89500A8542F /* frame.h in Headers */,
3C15C1A20902D89500A8542F /* atimer.h in Headers */,
3C15C1A30902D89500A8542F /* blockinput.h in Headers */,
3CDCED340902E99700B2EF7E /* config.h in Headers */,
3C4D6D6C0DE50D2300B20D4E /* font.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
3CC542FE07E2315800C271A9 /* Emacs */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3CA115970C825A540007AFC2 /* Build configuration list for PBXNativeTarget "Emacs" */;
buildPhases = (
3CC542FF07E2315800C271A9 /* Headers */,
3CC5430007E2315800C271A9 /* Resources */,
3CC5430407E2315800C271A9 /* Sources */,
3CC5434707E2315800C271A9 /* Frameworks */,
3CC5434907E2315800C271A9 /* Rez */,
);
buildRules = (
);
dependencies = (
);
name = Emacs;
productInstallPath = "$(HOME)/Applications";
productName = Emacs;
productReference = 3CC5434C07E2315800C271A9 /* Emacs.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 3CA1159B0C825A540007AFC2 /* Build configuration list for PBXProject "Emacs" */;
compatibilityVersion = "Xcode 2.4";
hasScannedForEncodings = 1;
mainGroup = 29B97314FDCFA39411CA2CEA /* Emacs */;
projectDirPath = "";
projectRoot = ../..;
targets = (
3CC542FE07E2315800C271A9 /* Emacs */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3CC5430007E2315800C271A9 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3CB8E29A0E2CE6BF003F3104 /* preferences.nib in Resources */,
3CB8E29E0E2CE73A003F3104 /* Emacs.icns in Resources */,
3CB8E2A00E2CE7F5003F3104 /* Credits.html in Resources */,
3CB8E2A70E2CE856003F3104 /* InfoPlist.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXRezBuildPhase section */
3CC5434907E2315800C271A9 /* Rez */ = {
isa = PBXRezBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXRezBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3CC5430407E2315800C271A9 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3CC5430607E2315800C271A9 /* nsfns.m in Sources */,
3CC5430707E2315800C271A9 /* nsmenu.m in Sources */,
3CC5430807E2315800C271A9 /* nsselect.m in Sources */,
3CC5430907E2315800C271A9 /* nsterm.m in Sources */,
3C15C1A80902D97100A8542F /* nsimage.m in Sources */,
3CDCEDD00902EA8200B2EF7E /* term.c in Sources */,
3CDCEDD10902EA8200B2EF7E /* sysdep.c in Sources */,
3CDCEDD20902EA8200B2EF7E /* syntax.c in Sources */,
3CDCEDD40902EA8200B2EF7E /* strftime.c in Sources */,
3CDCEDD50902EA8200B2EF7E /* sound.c in Sources */,
3CDCEDD70902EA8200B2EF7E /* search.c in Sources */,
3CDCEDD80902EA8200B2EF7E /* scroll.c in Sources */,
3CDCEDD90902EA8200B2EF7E /* region-cache.c in Sources */,
3CDCEDDA0902EA8200B2EF7E /* regex.c in Sources */,
3CDCEDDC0902EA8200B2EF7E /* process.c in Sources */,
3CDCEDDD0902EA8200B2EF7E /* print.c in Sources */,
3CDCEDDF0902EA8200B2EF7E /* pre-crt0.c in Sources */,
3CDCEDE20902EA8200B2EF7E /* minibuf.c in Sources */,
3CDCEDE30902EA8200B2EF7E /* md5.c in Sources */,
3CDCEDE40902EA8200B2EF7E /* marker.c in Sources */,
3CDCEDE80902EA8200B2EF7E /* macros.c in Sources */,
3CDCEDEC0902EA8200B2EF7E /* lread.c in Sources */,
3CDCEDED0902EA8200B2EF7E /* lastfile.c in Sources */,
3CDCEDEE0902EA8200B2EF7E /* keymap.c in Sources */,
3CDCEDEF0902EA8200B2EF7E /* keyboard.c in Sources */,
3CDCEDF00902EA8200B2EF7E /* intervals.c in Sources */,
3CDCEDF10902EA8200B2EF7E /* insdel.c in Sources */,
3CDCEDF20902EA8200B2EF7E /* indent.c in Sources */,
3CDCEDF30902EA8200B2EF7E /* image.c in Sources */,
3CDCEDF50902EA8200B2EF7E /* cmds.c in Sources */,
3CDCEDF60902EA8200B2EF7E /* category.c in Sources */,
3CDCEDF70902EA8200B2EF7E /* coding.c in Sources */,
3CDCEDFE0902EA8200B2EF7E /* unexmacosx.c in Sources */,
3CDCEE060902EA8200B2EF7E /* buffer.c in Sources */,
3CDCEE070902EA8200B2EF7E /* character.c in Sources */,
3CDCEE0D0902EA8200B2EF7E /* undo.c in Sources */,
3CDCEE0F0902EA8200B2EF7E /* textprop.c in Sources */,
3CDCEE100902EA8200B2EF7E /* terminfo.c in Sources */,
3CDCEE170902EA8200B2EF7E /* xfaces.c in Sources */,
3CDCEE180902EA8200B2EF7E /* xdisp.c in Sources */,
3CDCEE190902EA8200B2EF7E /* window.c in Sources */,
3CDCEE2B0902EA8200B2EF7E /* doprnt.c in Sources */,
3CDCEE2C0902EA8200B2EF7E /* doc.c in Sources */,
3CDCEE2D0902EA8200B2EF7E /* dired.c in Sources */,
3CDCEE2E0902EA8200B2EF7E /* data.c in Sources */,
3CDCEE2F0902EA8200B2EF7E /* callint.c in Sources */,
3CDCEE310902EA8200B2EF7E /* ccl.c in Sources */,
3CDCEE320902EA8200B2EF7E /* fontset.c in Sources */,
3CDCEE330902EA8200B2EF7E /* fns.c in Sources */,
3CDCEE340902EA8200B2EF7E /* floatfns.c in Sources */,
3CDCEE360902EA8200B2EF7E /* filemode.c in Sources */,
3CDCEE370902EA8200B2EF7E /* filelock.c in Sources */,
3CDCEE380902EA8200B2EF7E /* emacs.c in Sources */,
3CDCEE390902EA8200B2EF7E /* editfns.c in Sources */,
3CDCEE3A0902EA8200B2EF7E /* fileio.c in Sources */,
3CDCEE3B0902EA8200B2EF7E /* eval.c in Sources */,
3CDCEE3C0902EA8200B2EF7E /* casetab.c in Sources */,
3CDCEE3D0902EA8200B2EF7E /* composite.c in Sources */,
3CDCEE3E0902EA8200B2EF7E /* dispnew.c in Sources */,
3CDCEE3F0902EA8200B2EF7E /* charset.c in Sources */,
3CDCEE400902EA8200B2EF7E /* alloc.c in Sources */,
3CDCEE410902EA8200B2EF7E /* bytecode.c in Sources */,
3CDCEE420902EA8200B2EF7E /* callproc.c in Sources */,
3CDCEE430902EA8200B2EF7E /* cm.c in Sources */,
3CDCEE440902EA8200B2EF7E /* casefiddle.c in Sources */,
3CDCEE450902EA8200B2EF7E /* fringe.c in Sources */,
3CDCEE460902EA8200B2EF7E /* frame.c in Sources */,
3CDCEE470902EA8200B2EF7E /* chartab.c in Sources */,
3CDCEE480902EA8200B2EF7E /* atimer.c in Sources */,
3C4D6D6B0DE50D2300B20D4E /* font.c in Sources */,
3C4D6D6D0DE50D2300B20D4E /* termcap.c in Sources */,
3C4D6D6E0DE50D2300B20D4E /* terminal.c in Sources */,
3C4D6D6F0DE50D2300B20D4E /* tparam.c in Sources */,
3C4D6D730DE50D5D00B20D4E /* nsfont.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
3CB8E2A50E2CE856003F3104 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
3CB8E2A60E2CE856003F3104 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
3CA115980C825A540007AFC2 /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
FRAMEWORK_SEARCH_PATHS = "\"$(SYSTEM_DEVELOPER_DIR)/SDKs/MacOSX10.3.0.sdk/System/Library/Frameworks\"";
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_OPTIMIZATION_LEVEL = 1;
GCC_PREPROCESSOR_DEFINITIONS = (
COCOA,
HAVE_CONFIG_H,
emacs,
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
LIBRARY_SEARCH_PATHS = "";
MACOSX_DEPLOYMENT_TARGET = 10.3;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "-lncurses";
PRODUCT_NAME = Emacs;
SECTORDER_FLAGS = "";
WARNING_CFLAGS = "";
WRAPPER_EXTENSION = app;
ZERO_LINK = NO;
};
name = Development;
};
3CA115990C825A540007AFC2 /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = YES;
FRAMEWORK_SEARCH_PATHS = "\"$(SYSTEM_DEVELOPER_DIR)/SDKs/MacOSX10.3.0.sdk/System/Library/Frameworks\"";
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
COCOA,
HAVE_CONFIG_H,
emacs,
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
LIBRARY_SEARCH_PATHS = "";
MACOSX_DEPLOYMENT_TARGET = 10.3;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "-lncurses";
PRODUCT_NAME = Emacs;
SECTORDER_FLAGS = "";
WARNING_CFLAGS = "";
WRAPPER_EXTENSION = app;
ZERO_LINK = NO;
};
name = Deployment;
};
3CA1159A0C825A540007AFC2 /* Default */ = {
isa = XCBuildConfiguration;
buildSettings = {
FRAMEWORK_SEARCH_PATHS = "\"$(SYSTEM_DEVELOPER_DIR)/SDKs/MacOSX10.3.0.sdk/System/Library/Frameworks\"";
GCC_PREPROCESSOR_DEFINITIONS = "";
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
LIBRARY_SEARCH_PATHS = "";
MACOSX_DEPLOYMENT_TARGET = 10.3;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
PRODUCT_NAME = Emacs;
SECTORDER_FLAGS = "";
WARNING_CFLAGS = "";
WRAPPER_EXTENSION = app;
};
name = Default;
};
3CA1159C0C825A540007AFC2 /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
MACOSX_DEPLOYMENT_TARGET = 10.3;
SDKROOT = /Developer/SDKs/MacOSX10.3.0.sdk;
};
name = Development;
};
3CA1159D0C825A540007AFC2 /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
MACOSX_DEPLOYMENT_TARGET = 10.3;
SDKROOT = /Developer/SDKs/MacOSX10.3.0.sdk;
};
name = Deployment;
};
3CA1159E0C825A540007AFC2 /* Default */ = {
isa = XCBuildConfiguration;
buildSettings = {
MACOSX_DEPLOYMENT_TARGET = 10.3;
SDKROOT = /Developer/SDKs/MacOSX10.3.0.sdk;
};
name = Default;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3CA115970C825A540007AFC2 /* Build configuration list for PBXNativeTarget "Emacs" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3CA115980C825A540007AFC2 /* Development */,
3CA115990C825A540007AFC2 /* Deployment */,
3CA1159A0C825A540007AFC2 /* Default */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Default;
};
3CA1159B0C825A540007AFC2 /* Build configuration list for PBXProject "Emacs" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3CA1159C0C825A540007AFC2 /* Development */,
3CA1159D0C825A540007AFC2 /* Deployment */,
3CA1159E0C825A540007AFC2 /* Default */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Default;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}

216
nextstep/FOR-RELEASE Normal file
View file

@ -0,0 +1,216 @@
-*- outline -*-
* NON-SPECIFIC
** Remove Feval calls relating to insert working text in isearch mode.
** free_frame_resources, face colors
** look at nsfont_char_width and nsfont_string_width utils (Dan C.)
** config improvements (Dan C.)
* Mac-related:
** open file:/// URLs
** finish handle terminate request (user logout)
** put frame autopositioning into C code somewhere -- if loc = same, offset
** automap ctrl-mouse-1 to mouse-3
** deal with Finder aliases somehow
** Ctrl-F2 won't pull up menus
* Cursor:
** ns_cursor_blink_rate: when set in preferences, somehow save the option (but
calling custom-save-all from this causes error)
** cursor nonerase on certain Leopard and Tiger installations
** if I do: (mouse-avoidance-mode 'banish) and then minimize Emacs, it pops back immediately.
Also, it insists on being on top of other windows if they overlap.
** cursor-over bugs w/some scripts (move around in HELLO to see)
Keyboard:
On a German (PowerBook?) keyboard alt-` produces the correct ˚, without alt modifier only the message “<S-268632064> is undefined” is produced. Peter Maurers Key codes shows:
* Modifier Change: ⇧ 131330/0x20102
* Key Down/Up event: ⇧ 24/0x18
[note, this is += key on German KB setting on US keyboard]
[unable to reproduce w/German KB setting -- need German laptop?]
** numeric keysetting bug
* Other:
** better recog of unicode scripts / Greek / composition
** Ctrl-g not picked up in all situations get --experimental-ctrl-g in 'compile' working better
** Exec-dump not working on GNUstep (so slow startup).
** occasional size too large for screen errors
** undo for color-drag face customization
---------
* DONE
Try font-backend mechanism (see font.h).
Auto font substitution?
ns-option-modifier (alias for ns-alternate-modifier)
ns-control-modifier, ns-function-modifier (new)
- Frame bugs:
- create frame on second monitor fails (due to frame-parameters).
toolbar bugs
fix cursor disappears on italic text bug
fix scrollbar erase on Ctrl-l bug
Menubar emacs-21 compatibility. Make this and command-is-meta
switchable at startup. Switch mouse handling to 3-button compatible.
mouse button normalization
[rc1 released]
shift-alt-h does produce Ó (according C-h k), but this glyph is not
always shown completely, it seems to depend on the font used
[width estimation still off; this character is 211 = 0xD3]
Another attempt at composite rendering.
shift-alt-6 does not produce ^ (dead key) but &.
[adding alt continues to pick up the '&' interpretation, but in other
apps this suddenly changes it to a dead key]
- italic in Courier is still cut off
- dead keys end isearch w/o allowing typing
[need to insert to minibuffer if that is active]
When using the Dvorak with Qwerty keyboard shortcuts keyboard layout
(hereon in referred to as Dvorak-Qwerty), keyboard shortcuts
erroneously use the Dvorak layout. e.g. The Qwerty H key becomes D in
Dvorak, but with Dvorak-Qwerty the same key should be used when
hitting Cmd-H to hide an application. In Emacs.app with a
Dvorak-Qwerty layout I must hit Cmd-J (Qwerty J becomes H in Dvorak)
to hide the app.
- menus
- consolidate FRAME_INTERNAL_BORDER extension hacks
- mouse-1 activation problems (buttons, etc.): check keyboard.c HAVE_NS sections
- clean up bg fill code in font->draw(), and change conditions on when called with bg=yes
- clean up / optimize the metrics caching -- consider reducing memory load
- non-encapsulated build
- test color-drag face customization (accuracy and saving)
- look at ns-mark-nav replacement
- gnustep
- documentation:
- "stipple" images, alpha, color-drag, etc.
- make sure everyone finds it
[rc2 released]
- recheck font width determination for variable-width non-wide fonts
- resize-drag
- colored bitmaps (use NSCalibratedRGBColorspace for the bitmap and
add a method setBitmapForegroundColor:color to twiddle the bits
- resize title printing bug
[rc2a released]
- naming: cursor "line" -> "bar", "bar" -> underscore
- incorporate Pete's locallisp patch
- document needed sudo for compile --shared-lisp
[patch 20071010_rc2a released]
- clean up ns-menu-bar.el and try folding into ns-win.el
- fix jaggedy startup screen w/black bkgrd
- Pete's fringe weirdness
- iconification: use shrunk image for non-finder types
- toolbar updating
[patch 20071015_rc2a released]
- multi-TTY merge
- terminal mode weird colors (real fix)
- Frame bugs:
- a full-height frame will be shrunk on defocus, focus
[actually must be over-height, but it's a little overzealous in the
shrinking; probably happens in x_set_window_size]
- adding toolbar on full-height frame requires resize to avoid scrambling
- Buffers menu brokenness
- inability to use ARGB colors problem
- cut buffer in TTY
[rc3 released]
- drop MULTI_KBOARD
- mic-paren removal (also see http://www.emacswiki.org/cgi-bin/wiki/mic-paren.el)
- describe-key problem
- drop need for preload advice (print-buffer workaround)
- new frame placement ignores parameters [cannot replicate]
- white text on background alpha
- Multi-TTY: switching input between tty and GUI frames still needs work.
Once ns_select() and ns_read_socket() are being called, the regular terminal
input route seems ineffective. Furthermore NSApp activate events are not
picked up when attempting to read in terminal mode.
(Tests: make-frame-on-tty /dev/ttyp#, make-frame-on-display)
- remove ns-yes-or-no-p, try again to improve looks of regular dialog in nsmenu.m

View file

@ -0,0 +1,11 @@
[Desktop Entry]
Encoding=UTF-8
Type=Application
Version=9.0
Categories=GNUstep
Name=Emacs
Comment=GNU Emacs for NeXT/Open/GNUstep and OS X
Icon=emacs.tiff
Exec=openapp Emacs.app
#TryExec=Emacs.app
FilePattern=Emacs.app;Emacs

View file

@ -0,0 +1,137 @@
{
"!" = "Generated by ProjectCenter, do not edit";
ApplicationDescription = "GNU Emacs for GNUstep / OS X";
ApplicationIcon = emacs.tiff;
ApplicationName = Emacs;
ApplicationRelease = "9.0";
Authors = (
"Adrian Robert (GNUstep)",
"Christophe de Dinechin (MacOS X)",
"Scott Bender (OpenStep)",
"Christian Limpach (NeXTStep)",
"Carl Edman (NeXTStep)",
"..see http://emacs-app.sf.net"
);
Copyright = "Copyright (C) 2005-2008";
CopyrightDescription = "Released under the GNU General Public License Version 2";
FullVersionID = "Emacs 23.0.60 NS 9.0";
NSExecutable = Emacs;
NSIcon = emacs.tiff;
NSPrincipalClass = NSApplication;
NSRole = Application;
NSTypes = (
{
NSDocumentClass = "";
NSHumanReadableName = "";
NSIcon = "";
NSName = "";
NSRole = "";
NSUnixExtensions = (
txt
);
},
{
NSDocumentClass = "";
NSHumanReadableName = "";
NSIcon = "";
NSName = "";
NSRole = "";
NSUnixExtensions = (
c,
h
);
},
{
NSDocumentClass = "";
NSHumanReadableName = "";
NSIcon = "";
NSName = "";
NSRole = "";
NSUnixExtensions = (
m
);
},
{
NSDocumentClass = "";
NSHumanReadableName = "";
NSIcon = "";
NSName = "";
NSRole = "";
NSUnixExtensions = (
C,
cpp,
H,
cc
);
},
{
NSDocumentClass = "";
NSHumanReadableName = "";
NSIcon = "";
NSName = "";
NSRole = "";
NSUnixExtensions = (
java
);
},
{
NSDocumentClass = "";
NSHumanReadableName = "";
NSIcon = "";
NSName = "";
NSRole = "";
NSUnixExtensions = (
el
);
},
{
NSDocumentClass = "";
NSHumanReadableName = "";
NSIcon = "";
NSName = "";
NSRole = "";
NSUnixExtensions = (
*
);
}
);
NSServices = (
{
NSPortName = Emacs;
NSMessage = requestService;
NSUserData = open-selection
NSSendTypes = (NSStringPboardType);
NSMenuItem = {
default = "Emacs.app/New Buffer Containing Selection";
};
},
{
NSPortName = Emacs;
NSMessage = requestService;
NSUserData = open-file
NSSendTypes = (NSStringPboardType);
NSMenuItem = {
default = "Emacs.app/Open Selected File";
};
},
{
NSPortName = Emacs;
NSMessage = requestService;
NSUserData = mail-selection
NSSendTypes = (NSStringPboardType);
NSMenuItem = {
default = "Emacs.app/Email Selection";
};
},
{
NSPortName = Emacs;
NSMessage = requestService;
NSUserData = mail-to
NSSendTypes = (NSStringPboardType);
NSMenuItem = {
default = "Emacs.app/Send Email to Selected Address";
};
},
);
URL = "http://emacs-app.sf.net";
}

Binary file not shown.

View file

@ -0,0 +1,31 @@
{
"## Comment" = "Do NOT change this file, Gorm maintains it";
EmacsPrefsController = {
Actions = (
"cancel:",
"setDefaultFont:",
"ok:",
"resetToDefaults:",
"runHelp:",
"setColors:"
);
Outlets = (
alternateModMenu,
cursorBlinkSlider,
cursorTypeMatrix,
prefsWindow,
expandSpaceSlider,
commandModMenu
);
Super = NSObject;
};
FirstResponder = {
Actions = (
"setDefaultFont:",
"resetToDefaults:",
"runHelp:",
"setColors:"
);
Super = NSObject;
};
}

321
nextstep/README.txt Normal file
View file

@ -0,0 +1,321 @@
Emacs.app
=========
This file introduces the NeXTstep-based port of GNU Emacs, known as Emacs.app,
which runs on on many POSIX systems and possibly W32 using the GNUstep
libraries and on MacOS X systems using the Cocoa libraries. The directory
"nextstep" and its subdirectories "Cocoa" and "GNUstep" contain files
relevant to building and running on these systems.
Those primarily responsible for the port (in chronological order) were:
Michael Brouwer
Carl Edman
Christian Limpach
Scott Bender
Christophe de Dinechin
Adrian Robert
See AUTHORS file and "Release History" below for more information.
GNU Emacs is due to Richard Stallman and company.
The GNUstep port was made possible through the assistance of Adam Fedor, Fred
Kiefer, M. Uli Klusterer, Alexander Malmberg, Jonas Matton, and Riccardo
Mottola.
Peter Dyballa assisted in a variety of ways to improve text rendering and
keyboard handling. Adam Ratcliffe documented the Preferences panel. David
M. Cooke contributed fixes to XPM handling. Carsten Bormann helped get dired
working for non-ASCII filenames.
Requirements
------------
MacOS X 10.3 or later
- or -
GNUstep "Startup 0.13" or later
Tested on linux, should work on other systems, perhaps with minor build
tweaking.
Compilation
-----------
Run "./compile" in this directory, which will create a self-contained
Emacs.app under 'build/'. This can be moved anywhere and run. To create a
shared-lisp build, do "sudo ./compile -shared <install_root>". Set
<install_root> to where the lisp will go, for example /usr/local to end up
with /usr/local/shared/emacs/...
See the script itself for further details, and customizations.
You can rerun configure and/or run 'make' manually in the top-level or src
directories to refresh nextstep/build/Emacs.app. (Or edit the "compile"
script.)
On OS X you can also open Cocoa/Emacs.xcodeproj and build it again there. (Note,
ZeroLink currently does not work with Emacs owing to the use of private_extern
in the code as well as some other, unidentifiable problem.) Before doing this
you must run 'compile' once as outlined above, to set up the lisp resources.
On GNUstep, you CAN'T use ProjectCenter, since PC cannot work with files
outside of its project directory.
Usage
-----
Please use the first entry under the help menu within Emacs.app, do
"M-x info-ns-emacs".
Background
----------
Internally to emacs, the port and its code are referred to using the term
"NeXTstep", despite the fact that no system or API has been released under
this name in more than 10 years. Here's some background on why..
NeXT, Inc. introduced the NeXTstep API with its computer and operating system
in the late 1980's. Later on in collaboration with Sun, this API was
published as a specification called OpenStep. The GNUstep project started in
the early 1990's to provide a free implementation of this API. Later on,
Apple bought NeXT (some would say "NeXT bought Apple") and made OpenStep the
basis of OS X, calling the API "Cocoa". Since then, Cocoa has evolved beyond
the OpenStep specification, and GNUstep has followed it.
Thus, calling this port "OpenStep" is not technically accurate, and in the
absence of any other determinant, we are using the term "NeXTstep", both
because it signifies the original inspiration that created these APIs, and
because all of the classes and functions still begin with the letters "NS".
(See http://en.wikipedia.org/wiki/Nextstep)
This Emacs port was first released in the early 1990's on the NeXT computer,
and was successively updated to OpenStep, Rhapsody, OS X, and then finally
GNUstep, tracking GNU emacs core releases in the meantime.
Files specific to the port
--------------------------
src/nsfns.m
src/nsfont.m
src/nsgui.h
src/nsimage.m
src/nsmenu.m
src/nsselect.m
src/nsterm.h
src/nsterm.m
lisp/ns-grabenv.el
lisp/ns-carbon-compat.el
lisp/term/ns-win.el
lib-src/mac-fix-env.m
doc/emacs/ns-emacs.texi
etc/Emacs.clr
nextstep/
Files modified for port:
many -- look for HAVE_NS / NS_IMPL_... #ifdefs
Release History
---------------
1990-1992 1.0-3.0 (?) Michael Brouwer's socket/terminal communication
based version (GUI ran as a separate process.)
1993/10/25 3.0.1 Last (?) release of Brouwer version. Supports
NeXTstep 3.x and below.
1994/04/24 4.0 Carl Edman's version using direct API following
the X-Windows port. NeXTstep 3.x only.
1995/06/15 4.1 Second (and last) Carl Edman release, based on
Emacs 19.28.
1996/07/28 4.2 First Christian Limpach release, based on
Emacs 19.29.
?? 5.0 ??
1997/12/?? 6.0b1 Ported to OpenStep by Scott Bender. Updated
to Emacs 20.2.
?? 6.0b2 (?) Scott Bender: ported to Rhapsody.
1999/05/?? 6.0b3 Scott Bender: "OS X Server", Emacs 20.3.
2001/06/25 7.0 Ported to MacOS X (10.1) by Christophe de
Dinechin. Release based on Emacs 20.7. Hosting
moved to SourceForge.
2002/01/03 7.0.1 Bug fixes.
2002/08/27 7.0.2 Jaguar (OS X 10.2) support. Added an autoconf
option for sys_nerr being in stdio. Added
libncurses to the build libraries. Fixed a
problem with ns-alternate-is-meta. Changed the
icon color to blue, since Jaguar is yellow.
2004/10/07 8.0-pre1 Ported to GNUstep by Adrian Robert.
2004/11/04 8.0-pre2 Restored functionality on OS X (menu code
cleanup). Improved scrollbar handling and
paste from other applications. File icons
obtained properly from NSWorkspace. Dropped
Gorm and Nib files. Background refresh bug
fixed (in GNUstep). Various small fixes and
code cleanups. Now starts up under Art.
2005/01/27 8.0-pre3 Bold and italic faces supported. Cursor and
mouse highlighting rendering bugs
fixed. Drag/drop and cut/paste interaction
w/external apps fixed. File load/save panels
available. Stability and rendering speed
improvements. Some ObjC and VC mode bugs fixed.
2005/02/27 8.0-rc1 Dynamic path detection at startup so Emacs.app
can be moved anywhere. Added binary packages
and simplified source installation to running
two scripts. Thorough cleanup of menu code;
now fully functional. Fixed all detected
memory leaks. Minor frame focus and title
bugs fixed.
2005/03/30 8.0-rc2 "Configure" info directory now uses dynamic
path setting, so info files can go under .app.
Improved select() handling and PTY fixes so
shell mode and tramp run smoothly.
Significant rendering optimizations under
GNUstep, and now works under Art backend.
Non-Latin text rendering works (but not
fontsets), and LEIM is bundled. UTF8 is used
for clipboard interaction.
Arrow cursor now used on scrollbar.
objc-mode and tramp now bundled in site-lisp.
2005/05/30 8.0-rc3 Fixed bug with parsing of "easymenu" menus.
Many problems with modes such as SLIME, MatLab,
and Planner go away. Improved scrollbar
handling and rendering speed. Color panel
and other bug fixes. mac-fix-env utility.
Font handling improvements (OS X 10.3, 10.4):
- heed 'GSFontAntiAlias' default
- heed system antialiasing threshold
- added 'UseQuickdrawSmoothing' default to
invoke less heavy antialiasing
2005/07/05 8.0-rc4 Added a Preferences panel. Cleaned up
rendering for synthetic italic fonts. Further
improved menu parsing. Use system highlight
color. Added previous- and next-mark history
navigation commmands bound to M-p,M-n.
Miscellaneous bug fixes.
2005/08/04 8.0-rc5 All internal string handling changed to UTF-8.
This means menu items, color and color list
names, and a few other things will now display
properly. It does NOT mean UTF-8 filenames
are displayed correctly in the minibuffer.
Also relating to UTF-8, contents of files
using this coding can now be displayed (though
not auto-recognized; add extensions to your
default coding alist). Limited mac-roman
support was also added (also sans recognition).
Certain characters are not displayed properly
due to a translation problem. (UTF-8 based on
work by Otfried Cheong; mac-roman from
emacs-21.) Partial support for "dead-key"
handling now added. Transparency (e.g., M-x
set-background-color ARGB88FFFFFF) improved:
only the background is made transparent.
Cursor drawing glitches fixed. Preferences
handling improved. Fixed some portability
problems on Tiger and Puma.
2005/09/12 8.0 Bundled ispell on OS X. Minor bug fixes and
stability improvements. Compiles under gcc-4.
2005/09/26 8.0.1 Correct clipped rendering for synthetic
italics. Include the info directory.
Fix grabenv. Bundle whitespace package.
2005/10/27 8.0.2 Correct rendering for wide characters during
cursor movement. Fix bungled hack in ispell
bundling.
2005/11/05 9.0-pre1 Updated to latest Emacs CVS code on unicode-2
branch (proposed to be released 2006/2007 as
Emacs 23).
2005/11/11 9.0-pre2 Fix crashes for deiconifying and loading
certain images. Improve vertical font metrics
(fixes inaccurate page up/down, window size,
and partial lines). Support better remapping
of Alt/Opt and remapping of Command. More
insistent defaulting of scrollbar to right.
Modest improvements to build process.
2006/04/22 9.0-pre2a Stopgap interim release to sync w/latest
unicode-2 CVS. Includes XPM and partial
toolbar support.
2006/06/08 9.0-pre3 Major upgrade to keyboard handling:
system-selected compositional input methods
should now work, as well as more keys /
keyboards. XPM, toolbar, and tooltip support.
Some improvements to scrollbars, zoom, italic
rendering, pasting, Color panel. Added function
ns-set-background-alpha to work around
inability to customize with numeric colors.
2006/12/24 9.0-rc1 Reworked font handling and text rendering to
use Kenichi Handa's new font back-end system.
Font sets are now supported and automatically
created when a font is selected. Added recent
X11 colors to Emacs.clr (remove
~/Library/Colors/Emacs.clr to pick up). Added
ns-option-modifier, ns-control-modifier,
ns-function-modifier customization variables.
Update menus to Emacs 21+ conventions. Right
mouse button now generates mouse-3 events.
Various bug fixes and rendering improvements.
2007/09/10 9.0-rc2 Improve menubar, popup menu, and scrollbar
behavior, let accented char entry work in
isearch, follow system keymap for shortcut
keys, fix border and box drawing, remove
glitches in modeline drawing, support
overstrike for unavailable bold fonts, fix XPM
related crasher bugs. Incremental font
metrics caching and other performance
improvements. Shared-lisp builds now possible.
2007/09/20 9.0-rc2a Interim release. New features: composed
character display, colored fringe bitmaps,
colored relief drawing, dynamic resizing,
Bug fixes: popup menu position and selection,
font width calculation, face color adaptation
to background, submenu keyboard navigation.
NOT TESTED ON GNUSTEP.
2007/11/19 9.0-rc3 Integrated the multi-TTY functionality from
emacs core (however, mixed TTY and GUI
sessions are not working yet). Support 10.5.
Give site-lisp load precedence over lisp and
add a compile option to prefer an additional
directory, use miniaturized miniwindow images
in some cases, rename cursor types for
consistency w/other emacs terms, improved font
selection for symbol scripts.
Bug fixes: fringe and bitmap, frame deletion,
resizing, cursor blink, workspace open-file,
image backgrounds, toolbar item enablement,
context menu positioning.
2008/07/15 (none) Merge to GNU Emacs CVS trunk.

223
nextstep/compile Executable file
View file

@ -0,0 +1,223 @@
#!/bin/sh
# This script configures and builds Emacs to the subdirectory ./build .
#
# If --shared-lisp 'install_prefix' is given, lisp files will be installed to
# install_prefix/share/emacs/23.0.0. This option must be run with 'sudo'.
#
# Otherwise (default) lisp will be installed under Emacs.app/Contents/Resources.
# It does this by configuring it to install there, and running "make install".
#
# Some setup is different for GNUstep vs. Cocoa, and it determines which one
# it's on using 'uname'.
# After it is run, Emacs can be run directly from the .app, which itself
# can be placed anywhere.
# Further C development can be done using Xcode on OS X (not tested recently),
# or by typing './remake' in the '../src' directory. Further Lisp
# development can be done by either copying the files you modify
# into install location, or running this script again.
# Set up path and config variables.
PREFIX=""
while [ $# -gt 0 ]; do
case "$1" in
--shared-lisp=*)
PREFIX=`echo "$1" | sed s/--shared-lisp=//`
shift
;;
--enable-local-lisp-path=*)
locallisppath=`echo "$1" | sed s/--enable-local-lisp-path=//`
shift
;;
*)
echo "Usage: $0 [--shared-lisp='install_root' --enable-local-lisp-path='some path(s)']"
exit
esac
done
DISTDIR=`pwd`/..
#OPTFLAGS='-g -O2'
OPTFLAGS='-g'
# MAC OS X
if [ `uname` == "Darwin" ]; then
BASEDIR=`pwd`/build/Emacs.app/Contents
BINDIR=${BASEDIR}/MacOS
if [ "x$PREFIX" == "x" ]; then
PREFIX=${BASEDIR}/Resources
fi
# If you want to try experimental enhanced Ctrl-g support, add to NS_CFG_OPTS:
# --enable-cocoa-experimental-ctrl-g
# (See bottom of USAGE.txt)
NS_CFG_OPTS="--with-ns --without-x --without-freetype --prefix=${PREFIX} --exec_prefix=${BASEDIR}/MacOS --libexecdir=${BASEDIR}/MacOS/libexec"
# --enable-cocoa-experimental-ctrl-g"
# MAKE="make -j3"
steve=`/usr/sbin/sysctl hw.ncpu | awk '{print $NF}'`
MAKE="make -j`expr $steve + 1`"
export CC=gcc-4.0
export MACOSX_DEPLOYMENT_TARGET=10.3
export MACOSX_DEPLOYMENT_TARGET_ppc=10.3
export MACOSX_DEPLOYMENT_TARGET_i386=10.4
export CFLAGS="$OPTFLAGS -arch ppc -arch i386"
# -universal -sdk /Developer/SDKs/MacOSX10.4u.sdk
# -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk
# GNUSTEP
else
# Currently must pass three dirs into Make process via environment variables.
source /etc/GNUstep/GNUstep.conf
if [ "x$GNUSTEP_MAKEFILES" == "x" ]; then
if [ "x$GNUSTEP_SYSTEM_ROOT" == "x" ]; then
echo "Failed to obtain any useful information from /etc/GNUstep/GNUstep.conf."
echo "Please make sure GNUstep is installed on your system."
exit
fi
GNUSTEP_MAKEFILES=${GNUSTEP_SYSTEM_ROOT}/Library/Makefiles
GNUSTEP_SYSTEM_HEADERS=${GNUSTEP_SYSTEM_ROOT}/Library/Headers
GNUSTEP_SYSTEM_LIBRARIES=${GNUSTEP_SYSTEM_ROOT}/Library/Libraries
fi
export GNUSTEP_MAKEFILES
export GNUSTEP_SYSTEM_HEADERS
export GNUSTEP_SYSTEM_LIBRARIES
BASEDIR=`pwd`/build/Emacs.app
BINDIR=${BASEDIR}
if [ "x${PREFIX}" == "x" ]; then
PREFIX=${BASEDIR}/Resources
fi
NS_CFG_OPTS="--with-ns --without-x --without-freetype --prefix=${PREFIX} --exec-prefix=${BASEDIR} --libexecdir=${BASEDIR}/libexec"
# --enable-cocoa-experimental-ctrl-g
if [ "x$MAKE" == "x" ]; then
if [ "`gmake 2>&1`" == "gmake: *** No targets specified and no makefile found. Stop." ]; then
MAKE=gmake
else
MAKE=make
fi
export MAKE
CFLAGS="$OPTFLAGS"
export CFLAGS
fi
# PENDING: Not sure why this is needed
export EMACSLOADPATH="${DISTDIR}/lisp:${DISTDIR}/lisp/emacs-lisp:${DISTDIR}/leim"
fi
# End variable setup.
###############################################################################
# Prepare a clean slate
rm -fr build/Emacs.app
# Configure if needed
cd ..
if [ ! -f Makefile ]; then
echo "./configure ${NS_CFG_OPTS}"
./configure <<EOF ${NS_CFG_OPTS}
EOF
# ./configure ${NS_CFG_OPTS}
if [ $? != 0 ]; then
echo "*** Configure run failed. ***"
echo "Please examine the above output to determine what went wrong,"
echo "edit this script (\'compile\') to fix it, and rerun."
# These are written BEFORE the job is compete, then it won't get done
# next time, causing errors about CTLau-b5, tsang-b5, PY, etc..
rm -f leim/changed.misc leim/changed.tit
exit 1
fi
fi
# Pete's addition for local lisp load-path
if [ "x$locallisppath" != "x" ]; then
echo " * Local lisp path is being enabled"
(cd src
if [ -r epaths.h-orig ]; then
# mv ../src/epaths.h-orig ../src/epaths.h
echo "### src/epaths.h-orig already exists, no further change ###"
else
mv epaths.h epaths.h-orig
printf "s,\(#define PATH_LOADSEARCH \"\),\\\1%s:,\n" "$
{locallisppath}" > locallisppath.sed
cat epaths.h-orig | sed -f locallisppath.sed > epaths.h
rm locallisppath.sed
fi)
fi
# Clean up to avoid DOC-xxx and emacs-xxx out-of-controlness
rm -f ../etc/DOC-* ../src/emacs-*
# Go (installs binaries to ./build/Emacs.app, lisp to there or PREFIX)
echo "make install"
$MAKE
status=$?
if [ -f src/epaths.h-orig ]; then
mv src/epaths.h-orig src/epaths.h
fi
if [ $status != 0 ]; then
echo "*** Compilation failed. ***"
echo "Please examine the above output to determine what went wrong,"
echo "edit the configure options in this script (\'compile\') to fix it, and rerun."
# rm -f leim/changed.misc leim/changed.tit
exit 1
fi
$MAKE install
if [ $? != 0 ]; then
echo "*** Compilation succeeded, but .app assembly failed. ***"
echo "Please examine the above output to determine what went wrong,"
echo "edit the configure options in this script (\'compile\') to fix it, and rerun."
# rm -f leim/changed.misc leim/changed.tit
exit 1
fi
# Move version stuff up to Resources
cd ${BASEDIR}/Resources
if [ -d share/emacs ]; then
# clean up self-contained build
mv -f share/emacs/*/* .
fi
if [ ! -d info ]; then
# happens on GNUstep, not OS X
mv -f share/info .
fi
rm -fr share
# Get rid of .el.gz when .elc is present.. purists will complain, but this
# knocks the app size down substantially.
cd lisp
#for f in `find . -name '*.elc' -print | sed -e s/.elc/.{el,el.gz}/`
#do
# rm -f $f
#done
# Bin cleanup
cd $BINDIR/bin
rm -f emacs emacs-23*
# Move libexec stuff up, and link it from bin
cd ../libexec
mv -f emacs/*/*/* .
rm -fr emacs
cd ../bin
ln -sf ../libexec/* .
# On OS X, install the bundled ispell
#if [ `uname` == "Darwin" ]; then
# cd $DISTDIR
# cp ispell-3.3.01/bin/ispell* ${BINDIR}/libexec
# cp -R ispell-3.3.01/lib ${BINDIR}/libexec
#fi
echo ""
echo "Build successful."
echo ""

View file

@ -1,3 +1,134 @@
2008-07-15 Adrian Robert <Adrian.B.Robert@gmail.com>
Changes and additions for NeXTstep windowing system (Cocoa and
GNUstep) support.
* Makefile.in
* config.in: Support defines and build commands for NS port.
* blockinput.h (BLOCK_INPUT, UNBLOCK_INPUT, TOTALLY_UNBLOCK_INPUT)
(UNBLOCK_INPUT_TO): Don't use under NS unless EXPERIMENTAL_CONTROL_G.
* callproc.c (set_initial_environment): Initialize
Vprocess_environment under CANNOT_DUMP (fixes crash when
batch-compiling for bootstrap, due to Chris Hall).
* dispextern.h: Include nsgui.h and add needed typedefs under NS
windowing.
(struct face): Add synth_ital field.
* dispnew.c: Include nsterm.h when compiling under NS windowing.
(init_display): Initialize Vinitial_window_system to "ns" when so
compiled.
* emacs.c: Include GSConfig.h when compiling under GNUstep.
(display_arg): Use under NS.
(main): Under NS, allocate autorelease pool and handle command line
args. Move syms_of_xmenu() call under #ifdef HAVE_X_WINDOWS.
(standard_args): Add NS-specific args.
(shut_down_emacs): Shut down NS terminal if compiled under NS.
* font.c (DEFAULT_ENCODING): New variable.
(font_find_for_lface): Use it.
(syms_of_font): Load syms_of_nsfont under NS.
* font.h: Declare nsfont_driver when compiled under NS.
* fontset.c: When compiling under NS, include nsterm.h.
(fontset_from_font): Autoconstruct fontset under NS.
* frame.c (various): Under NS, include nsterm.h, add Qns window system
symbol, document and use it.
(make_initial_frame): Call init_frame_faces(f) in CANNOT_DUMP case --
patch to fix crash due to different init order, due to Chris Hall and
Yamamoto Mitsuharu.
(do_switch_frame): When for_deletion under Cocoa, add
Fraise_frame(Qnil).
(x_set_frame_parameters): Ensure font attribute changes are picked up.
(x_get_arg): Allow "yes" and "no" as boolean values.
(syms_of_frame): Declare Qns. Init Vdefault_frame_scroll_bars to
Qright under Cocoa.
(focus-follows-mouse): Default to 0 under NS.
* frame.h (enum output_method): Add output_ns.
(external_tool_bar, external_menu_bar, FRAME_EXTERNAL_TOOLBAR)
(FRAME_EXTERNAL_MENU_BAR): Use under NS.
(FRAME_WINDOW_P): NS-specific definition.
* fringe.c (max_used_fringe_bitmap): Make public.
* getloadavg.c (mach/mach.h): Include it under NeXT descendant OS's.
(getloadavg): Use NeXT code under descendant OS's.
* image.c (includes and header section, x_create_bitmap_from_data)
(x_create_bitmap_from_file, free_bitmap_record, image_background)
(image_background_transparent, x_clear_image_1)
(x_create_x_image_and_pixmap, x_destroy_x_image, x_put_x_image)
(Create_Pixmap_From_Bitmap_Data, xpm_load_image, lookup_rgb_color)
(x_to_xcolors, x_from_xcolors, x_disable_image)
(x_build_heuristic_mask, syms_of_image): Add NS support parallel to
other GUIs, including XPM support using code originally written for
Carbon GUI.
(png_load, jpeg_load, tiff_load, gif_load): Added implementations
using NS API.
(image_ascent): Use font metrics macros instead of direct struct field
access.
* keyboard.c (includes): Add nsterm.h when compiling under NS.
(kbd_buffer_get_event): Handle NS as other GUI windowing systems.
Also, handle NS as GTK for menu bar purposes.
(make_lispy_event): Handle NS as other GUI windowing systems, and as X
toolkit where they differ.
(parse_menu_item): Prefer keybindings using 'super' modifier. Also,
use cachelist, still needed under NS.
* keyboard.h (ENCODE_MENU_STRING, XtPointer, Boolean): Handle as
NTGUI.
(struct widget_value): Define it here for menu.c.
* keymap.c (includes): Include modifier internals.
(lisp_to_mod, modifier_sequence_p): New functions, compiled only under
NS.
(where_is_internal, Fwhere_is_internal): When compiled under NS, add
support for preferring sequences using certain modifiers, specified by
the FIRSTONLY argument.
* lisp.h (hash_remove): Rename to avoid name clash when compiling
under NS GNUstep implementation.
(USE_LSB_TAG): Use it under Cocoa when compiling under NS.
* lread.c (init_lread): Treat NS as HAVE_CARBON for turn_off_warning.
* menu.c: Include nsterm.h under NS.
(single_menu_item, parse_single_submenu, xmalloc_widget_value)
(free_menubar_widget_tree_value, update_submenu_strings)
(find_and_call_menu_selection): Treat NS as X and NT.
(find_and_return_menu_selection): New function, used for popup menus.
* nsgui.h
* nsterm.h
* nsfns.m
* nsimage.m
* nsmenu.m
* nsselect.m
* nsterm.m: New files.
* process.c (wait_reading_process_output): Under NS, call ns_select()
instead of plain select().
* syntax.c (char_quoted): Under NS, avoid a crash when called near
beginning of buffer.
* sysselect.h (init_process): Rename when compiling under Cocoa to
avoid name conflict.
* termhooks.h (display_info): Add ns_display_info to union.
* terminal.c (Fterminal_live_p): Add ns to terminal types.
* terminfo.c (UP, BC, PC): Don't declare when compiling under NS in
COCOA environment.
* unexnext.c: Update to work with mach API on Mac OS X, and to use new
unexec() signature. (Note, this will dump, but the resulting file
crashes; unexosx is used instead; keeping around for reference and
possible aid in getting dump working under GNUstep.)
* w32gui.h (button_type, widget_value): Remove definitions (now in
keyboard.h).
* window.c: Include nsterm.h when compiling under NS.
* xdisp.c (includes): Include nsterm.h when compiling under NS.
(set_frame_menubar, update_menu_bar, display_menu_bar): Handle NS as
other GUI windowing systems.
(update_tool_bar, redisplay_tool_bar, redisplay_window): Handle NS as
GTK.
(x_consider_frame_title): Under NS, set icon type and frame
modified-state indicator; use ns_set_name_as_filename() when using
formatted title.
(update_window_cursor): Make public when compiling under NS.
(display_hourglass_p, syms_of_xdisp, hourglass_shown_p)
(hourglass_atimer, Vhourglass_delay
* xfaces.c (header section, init_frame_faces, clear_font_table)
(defined_color, unload_color, x_face_list_fonts)
(prepare_face_for_display): Add NS support parallel to other GUIs)
(emulate GCs like other non-X GUIs.
(split_font_name): Don't lowercase font name under NS.
(merge_face_ref, Finternal_set_lisp_face_attribute): Support stippling
under NS.
* s/darwin.h: Add support for compilation under NS.
2008-07-15 Jason Rumney <jasonr@gnu.org>
* w32fns.c (Fx_create_frame): Remove duplicate unwind_protect.

View file

@ -112,6 +112,11 @@ SHELL=/bin/sh
#endif
#endif
/* Under GNUstep, putting libc on the link line causes problems. */
#ifdef GNUSTEP
#define LIB_STANDARD
#endif
/* Unless inhibited or changed, use -lg to link for debugging. */
#ifndef LIBS_DEBUG
#define LIBS_DEBUG -lg
@ -229,6 +234,15 @@ STARTFILES = START_FILES
#endif /* not ORDINARY_LINK */
#ifdef GNUSTEP
/* Pull in stuff from GNUstep-make. */
FOUNDATION_LIB=gnu
GUI_LIB=gnu
include $(GNUSTEP_MAKEFILES)/Additional/base.make
include $(GNUSTEP_MAKEFILES)/Additional/gui.make
shared=no
#endif
#ifdef HAVE_DBUS
DBUS_CFLAGS = @DBUS_CFLAGS@
DBUS_LIBS = @DBUS_LIBS@
@ -249,8 +263,11 @@ DBUS_OBJ = dbusbind.o
/* C_SWITCH_X_SITE must come before C_SWITCH_X_MACHINE and C_SWITCH_X_SYSTEM
since it may have -I options that should override those two. */
ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAGS) -I. -I${srcdir} C_SWITCH_MACHINE C_SWITCH_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE C_SWITCH_X_MACHINE C_SWITCH_X_SYSTEM C_SWITCH_SYSTEM_TEMACS ${CFLAGS_SOUND} ${RSVG_CFLAGS} ${DBUS_CFLAGS} ${CFLAGS} @FREETYPE_CFLAGS@ @FONTCONFIG_CFLAGS@ @LIBOTF_CFLAGS@ @M17N_FLT_CFLAGS@
.SUFFIXES: .m
.c.o:
$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
.m.o:
$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) GNU_OBJC_CFLAGS $<
#ifndef LIBX11_SYSTEM
#define LIBX11_SYSTEM
@ -260,13 +277,8 @@ ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAGS) -I. -I${srcdir} C_SWITCH_MACHIN
#define LIB_X11_LIB -lX11
#endif
/* xmenu.c should not be compiled on OSX. */
#ifndef HAVE_CARBON
XMENU_OBJ = xmenu.o
#endif
#ifdef HAVE_X_WINDOWS
XMENU_OBJ = xmenu.o
XOBJ= xterm.o xfns.o xselect.o xrdb.o fontset.o xsmfns.o fringe.o image.o
#ifdef HAVE_MENUS
@ -518,6 +530,21 @@ emacsapp = $(PWD)/$(mac)Emacs.app/
emacsappsrc = ${srcdir}/../mac/Emacs.app/
#endif
#ifdef HAVE_NS
/* Object files for NeXTstep */
NS_OBJ= nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o nsfont.o \
fontset.o fringe.o image.o
emacsapp = $(PWD)/../nextstep/build/Emacs.app/
FONT_DRIVERS = nsfont.o
#ifdef GNUSTEP
emacsappsrc = ${srcdir}/../nextstep/GNUstep/Emacs.base
emacsbindir = $(emacsapp)
#else
emacsappsrc = ${srcdir}/../nextstep/Cocoa/Emacs.base
emacsbindir = $(emacsapp)/Contents/MacOS/
#endif /* GNUSTEP */
#endif /* HAVE_NS */
#ifdef HAVE_WINDOW_SYSTEM
#ifdef HAVE_X_WINDOWS
#if defined (HAVE_XFT)
@ -545,7 +572,7 @@ obj= dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \
process.o callproc.o \
region-cache.o sound.o atimer.o \
doprnt.o strftime.o intervals.o textprop.o composite.o md5.o \
$(MSDOS_OBJ) $(MAC_OBJ) $(CYGWIN_OBJ) $(FONT_DRIVERS)
$(MSDOS_OBJ) $(MAC_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_DRIVERS)
/* Object files used on some machine or other.
These go in the DOC file on all machines
@ -553,6 +580,7 @@ obj= dispnew.o frame.o scroll.o xdisp.o menu.o $(XMENU_OBJ) window.o \
SOME_MACHINE_OBJECTS = dosfns.o msdos.o \
xterm.o xfns.o xmenu.o xselect.o xrdb.o xsmfns.o fringe.o image.o \
mac.o macterm.o macfns.o macmenu.o macselect.o fontset.o \
nsterm.o nsfns.o nsmenu.o nsselect.o nsimage.o \
w32.o w32console.o w32fns.o w32heap.o w32inevt.o \
w32menu.o w32proc.o w32reg.o w32select.o w32term.o w32xfns.o $(FONT_DRIVERS)
@ -876,6 +904,7 @@ SOME_MACHINE_LISP = ../lisp/mouse.elc \
Note that SunOS needs -lm to come before -lc; otherwise, you get
duplicated symbols. If the standard libraries were compiled
with GCC, we might need gnulib again after them. */
LIBES = $(LOADLIBES) $(LIBS) $(LIBX) $(LIBSOUND) $(RSVG_LIBS) $(DBUS_LIBS) \
LIBGPM LIBRESOLV LIBS_SYSTEM LIBS_MACHINE LIBS_TERMCAP \
LIBS_DEBUG $(GETLOADAVG_LIBS) \
@ -910,7 +939,10 @@ emacs${EXEEXT}: temacs${EXEEXT} ${etc}DOC ${lisp} ${SOME_MACHINE_LISP}
@: bootstrap-emacs, so let us replace it.
-ln -f emacs${EXEEXT} bootstrap-emacs${EXEEXT}
#endif /* ! defined (CANNOT_DUMP) */
/* XXX: not working under NS currently due to path shenanigans.. */
#ifndef HAVE_NS
-./emacs -q -batch -f list-load-path-shadows
#endif
/* We run make-docfile twice because the command line may get too long
on some systems. */
@ -935,9 +967,13 @@ ${libsrc}make-docfile${EXEEXT}:
temacs${EXEEXT}: $(LOCALCPP) $(STARTFILES) stamp-oldxmenu ${obj} ${otherobj} OBJECTS_MACHINE prefix-args${EXEEXT}
echo "${obj} ${otherobj} " OBJECTS_MACHINE > buildobj.lst
#ifdef GNUSTEP
$(CC) -rdynamic YMF_PASS_LDFLAGS (${TEMACS_LDFLAGS}) -o temacs ${obj} ${otherobj} OBJECTS_MACHINE ${LIBES}
#else
$(LD) YMF_PASS_LDFLAGS (${STARTFLAGS} ${TEMACS_LDFLAGS}) $(LDFLAGS) \
-o temacs ${STARTFILES} ${obj} ${otherobj} \
OBJECTS_MACHINE ${LIBES}
#endif
/* We do not use ALL_LDFLAGS because LD_SWITCH_SYSTEM and LD_SWITCH_MACHINE
often contain options that have to do with using Emacs''s crt0,
@ -1080,7 +1116,7 @@ fontset.o: dispextern.h fontset.h fontset.c ccl.h buffer.h character.h \
getloadavg.o: getloadavg.c $(config_h)
image.o: image.c frame.h window.h dispextern.h blockinput.h atimer.h \
systime.h xterm.h w32term.h w32gui.h macterm.h macgui.h font.h \
$(config_h)
nsterm.h nsgui.h $(config_h)
indent.o: indent.c frame.h window.h indent.h buffer.h $(config_h) termchar.h \
termopts.h disptab.h region-cache.h character.h category.h composite.h \
dispextern.h keyboard.h
@ -1089,7 +1125,8 @@ insdel.o: insdel.c window.h buffer.h $(INTERVAL_SRC) blockinput.h character.h \
keyboard.o: keyboard.c termchar.h termhooks.h termopts.h buffer.h character.h \
commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h \
systime.h dispextern.h syntax.h $(INTERVAL_SRC) blockinput.h \
atimer.h xterm.h puresize.h msdos.h keymap.h w32term.h macterm.h $(config_h)
atimer.h xterm.h puresize.h msdos.h keymap.h w32term.h macterm.h nsterm.h \
$(config_h)
keymap.o: keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h \
atimer.h systime.h puresize.h character.h intervals.h keymap.h window.h \
$(config_h)
@ -1155,15 +1192,15 @@ widget.o: widget.c xterm.h frame.h dispextern.h widgetprv.h \
window.o: window.c indent.h commands.h frame.h window.h buffer.h termchar.h \
disptab.h keyboard.h dispextern.h msdos.h composite.h \
keymap.h blockinput.h atimer.h systime.h $(INTERVAL_SRC) \
xterm.h w32term.h macterm.h $(config_h)
xterm.h w32term.h macterm.h nsterm.h $(config_h)
xdisp.o: xdisp.c macros.h commands.h process.h indent.h buffer.h dispextern.h \
coding.h termchar.h frame.h window.h disptab.h termhooks.h character.h \
charset.h $(config_h) keyboard.h $(INTERVAL_SRC) region-cache.h xterm.h \
w32term.h macterm.h msdos.h composite.h fontset.h blockinput.h atimer.h \
systime.h keymap.h font.h
w32term.h macterm.h nsterm.h msdos.h composite.h fontset.h blockinput.h \
atimer.h systime.h keymap.h font.h
xfaces.o: xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h \
window.h character.h charset.h msdos.h dosfns.h composite.h atimer.h \
systime.h keyboard.h fontset.h w32term.h macterm.h $(INTERVAL_SRC) \
systime.h keyboard.h fontset.h w32term.h macterm.h nsterm.h $(INTERVAL_SRC) \
termchar.h termhooks.h font.h $(config_h)
xfns.o: xfns.c buffer.h frame.h window.h keyboard.h xterm.h dispextern.h \
$(srcdir)/../lwlib/lwlib.h blockinput.h atimer.h systime.h epaths.h \
@ -1276,7 +1313,38 @@ macosx-app: macosx-bundle ${emacsapp}Contents/MacOS/Emacs
${emacsapp}Contents/MacOS/Emacs: emacs${EXEEXT}
mkdir -p ${emacsapp}Contents/MacOS/;
cd ${emacsapp}Contents/MacOS/; cp ../../../../src/emacs${EXEEXT} Emacs${EXEEXT}
#endif
#endif /* HAVE_CARBON */
#ifdef HAVE_NS
abbrev.o buffer.o callint.o cmds.o dispnew.o editfns.o fileio.o frame.o \
fontset.o indent.o insdel.o keyboard.o macros.o minibuf.o msdos.o process.o \
scroll.o sysdep.o term.o widget.o window.o xdisp.o xfaces.o xfns.o \
xterm.o xselect.o sound.o: nsgui.h
nsfns.o: nsfns.m charset.h nsterm.h nsgui.h frame.h window.h buffer.h \
dispextern.h nsgui.h fontset.h $(INTERVAL_SRC) keyboard.h blockinput.h \
atimer.h systime.h epaths.h termhooks.h coding.h systime.h $(config_h)
nsmenu.o: nsmenu.m termhooks.h frame.h window.h dispextern.h \
nsgui.h keyboard.h blockinput.h atimer.h systime.h buffer.h \
nsterm.h $(config_h)
nsterm.o: nsterm.m blockinput.h atimer.h systime.h syssignal.h nsterm.h \
nsgui.h frame.h charset.h ccl.h dispextern.h fontset.h termhooks.h \
termopts.h termchar.h disptab.h buffer.h window.h keyboard.h \
$(INTERVAL_SRC) process.h coding.h $(config_h)
nsselect.o: nsselect.m blockinput.h nsterm.h nsgui.h frame.h $(config_h)
nsimage.o: nsimage.m nsterm.h
nsfont.o: nsterm.h dispextern.h frame.h lisp.h $(config_h)
${emacsapp}: ${emacsappsrc}
mkdir -p ${emacsapp}
( cd ${emacsappsrc} ; tar cfh - . ) | ( cd ${emacsapp} ; tar xf - )
${emacsbindir}Emacs: emacs${EXEEXT}
mkdir -p ${emacsbindir}
cp -f emacs${EXEEXT} ${emacsbindir}Emacs
ns-app: ${emacsapp} ${emacsbindir}Emacs
#endif /* HAVE_NS */
mostlyclean:
rm -f temacs${EXEEXT} prefix-args${EXEEXT} core *.core \#* *.o libXMenu11.a liblw.a
@ -1285,6 +1353,9 @@ mostlyclean:
rm -f buildobj.lst
clean: mostlyclean
rm -f emacs-*.*.*${EXEEXT} emacs${EXEEXT}
#ifdef GNUSTEP
rm -f *.d
#endif
/* bootstrap-clean is used to clean up just before a bootstrap.
It should remove all files generated during a compilation/bootstrap,
but not things like config.status or TAGS. */

View file

@ -59,6 +59,16 @@ extern int interrupt_input_pending;
extern int pending_atimers;
#if defined HAVE_NS && !defined COCOA_EXPERIMENTAL_CTRL_G
/* NS does not use interrupt-driven input processing (yet), so this is
unneeded and moreover was causing problems. */
#define BLOCK_INPUT
#define UNBLOCK_INPUT
#define TOTALLY_UNBLOCK_INPUT
#define UNBLOCK_INPUT_TO(LEVEL)
#else
/* Begin critical section. */
#define BLOCK_INPUT (interrupt_input_blocked++)
@ -115,6 +125,8 @@ extern int pending_atimers;
} \
while (0)
#endif /* defined HAVE_NS && !defined COCOA_EXPERIMENTAL_CTRL_G */
#define UNBLOCK_INPUT_RESIGNAL UNBLOCK_INPUT
/* In critical section ? */

View file

@ -1587,8 +1587,11 @@ set_initial_environment ()
register char **envp;
#ifndef CANNOT_DUMP
if (initialized)
#endif
{
#else
{
Vprocess_environment = Qnil;
#endif
for (envp = environ; *envp; envp++)
Vprocess_environment = Fcons (build_string (*envp),
Vprocess_environment);

View file

@ -30,6 +30,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if the mktime function is broken. */
#undef BROKEN_MKTIME
/* Define to 1 if you are trying experimental enhanced Ctrl-g support using NS
windowing under MacOS X. */
#undef COCOA_EXPERIMENTAL_CTRL_G
/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
systems. This function is required for `alloca.c' support on those systems.
*/
@ -472,6 +476,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if you have the <nlist.h> header file. */
#undef HAVE_NLIST_H
/* Define to 1 if you are using the NeXTstep API, either GNUstep or Cocoa on
Mac OS X. */
#undef HAVE_NS
/* Define to 1 if personality LINUX32 can be set. */
#undef HAVE_PERSONALITY_LINUX32
@ -798,6 +806,12 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if you don't have struct exception in math.h. */
#undef NO_MATHERR
/* Define to 1 if you are using NS windowing under MacOS X. */
#undef NS_IMPL_COCOA
/* Define to 1 if you are using NS windowing under GNUstep. */
#undef NS_IMPL_GNUSTEP
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
@ -965,8 +979,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#undef volatile
/* If we're using any sort of window system, define some consequences. */
#ifdef HAVE_X_WINDOWS
/* If we're using X11/Carbon/GNUstep, define some consequences. */
#if defined HAVE_X_WINDOWS || defined(HAVE_CARBON) || defined(HAVE_NS)
#define HAVE_WINDOW_SYSTEM
#define MULTI_KBOARD
#define HAVE_MOUSE
@ -978,13 +992,15 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define MULTI_KBOARD
#endif
/* If we're using the Carbon API on Mac OS X, define a few more
variables as well. */
#ifdef HAVE_CARBON
#define HAVE_WINDOW_SYSTEM
#define HAVE_MOUSE
/* Sadly for now, GNUstep dump does not work. */
#ifdef NS_IMPL_GNUSTEP
#define CANNOT_DUMP
#endif
/* PENDING: These are used for the Carbon port only. */
#undef MAC_OS
#undef MAC_OSX
/* Define USER_FULL_NAME to return a string
that is the user's full name.
It can assume that the variable `pw'
@ -1037,6 +1053,28 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include config_opsysfile
#include config_machfile
/* Set up some defines, C and LD flags for NeXTstep interface on GNUstep.
(There is probably a better place to do this, but right now the Cocoa
side does this in s/darwin.h, following the Carbon port, and we cannot
parallel this exactly since GNUstep is multi-OS. */
#ifdef HAVE_NS
# ifdef C_SWITCH_SYSTEM
# undef C_SWITCH_SYSTEM
# endif
# ifdef NS_IMPL_GNUSTEP
/* See also .m.o rule in Makefile.in */
# define C_SWITCH_X_SYSTEM -MMD -MP -D_REENTRANT -fPIC -fno-strict-aliasing
# define LD_SWITCH_SITE -lgnustep-gui -lgnustep-base -lobjc $(CONFIG_SYSTEM_LIBS) -lpthread
# define GNU_OBJC_CFLAGS -fgnu-runtime -Wno-import -fconstant-string-class=NSConstantString -DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNU_RUNTIME=1 -DGSWARN -DGSDIAGNOSE
# define OTHER_FILES ns-app
# else /* COCOA */
# define C_SWITCH_X_SYSTEM
# define GNU_OBJC_CFLAGS
# endif /* COCOA */
#endif /* HAVE_NS */
/* If no remapping takes place, static variables cannot be dumped as
pure, so don't worry about the `static' keyword. */
#ifdef NO_REMAP

View file

@ -69,6 +69,14 @@ typedef Pixmap XImagePtr;
typedef XImagePtr XImagePtr_or_DC;
#endif
#ifdef HAVE_NS
#include "nsgui.h"
/* following typedef needed to accomodate the MSDOS port, believe it or not */
typedef struct ns_display_info Display_Info;
typedef Pixmap XImagePtr;
typedef XImagePtr XImagePtr_or_DC;
#endif
#ifndef NativeRectangle
#define NativeRectangle int
#endif
@ -1563,6 +1571,13 @@ struct face
/* If non-zero, use overstrike (to simulate bold-face). */
unsigned overstrike : 1;
/* NOTE: this is not used yet, but eventually this impl should be done
similarly to overstrike */
#ifdef HAVE_NS
/* If non-zero, use geometric rotation (to simulate italic). */
unsigned synth_ital : 1;
#endif
/* Next and previous face in hash collision list of face cache. */
struct face *next, *prev;

View file

@ -63,6 +63,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#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. */
#include "systime.h"
@ -6895,6 +6899,20 @@ init_display ()
}
#endif /* MAC_OS */
#ifdef HAVE_NS
if (!inhibit_window_system
#ifndef CANNOT_DUMP
&& initialized
#endif
)
{
Vinitial_window_system = intern("ns");
Vwindow_system_version = make_number(10);
adjust_frame_glyphs_initially ();
return;
}
#endif
/* If no window system has been specified, try to use the terminal. */
if (! isatty (0))
{

View file

@ -46,6 +46,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include "w32heap.h" /* for prototype of sbrk */
#endif
#ifdef NS_IMPL_GNUSTEP
/* At least under Debian, GSConfig is in a subdirectory. --Stef */
#include <GNUstepBase/GSConfig.h>
#endif
#include "lisp.h"
#include "commands.h"
#include "intervals.h"
@ -193,7 +198,7 @@ int running_asynch_code;
extern int inherited_pgroup;
#endif
#ifdef HAVE_X_WINDOWS
#if defined(HAVE_X_WINDOWS) || defined(HAVE_NS)
/* If non-zero, -d was specified, meaning we're using some window system. */
int display_arg;
#endif
@ -838,7 +843,7 @@ main (argc, argv
run_time_remap (argv[0]);
#endif
#ifdef MAC_OSX
#if defined (MAC_OSX) || defined (NS_IMPL_COCOA)
if (!initialized)
unexec_init_emacs_zone ();
#endif
@ -1410,6 +1415,38 @@ main (argc, argv
no_loadup
= argmatch (argv, argc, "-nl", "--no-loadup", 6, NULL, &skip_args);
#ifdef HAVE_NS
ns_alloc_autorelease_pool();
if (!noninteractive)
{
char *tmp;
display_arg = 4;
#ifdef NS_IMPL_COCOA
if (skip_args < argc)
{
if (!strncmp(argv[skip_args], "-psn", 4))
{
skip_args += 1;
}
else
{
if (skip_args+1 < argc && !strncmp(argv[skip_args+1], "-psn", 4))
skip_args += 2;
}
}
#endif
/* This used for remote operation.. not fully implemented yet. */
if (argmatch (argv, argc, "-_NSMachLaunch", 0, 3, &tmp, &skip_args))
display_arg = 4;
else if (argmatch (argv, argc, "-MachLaunch", 0, 3, &tmp, &skip_args))
display_arg = 4;
else if (argmatch (argv, argc, "-macosx", 0, 2, NULL, &skip_args))
display_arg = 4;
else if (argmatch (argv, argc, "-NSHost", 0, 3, &tmp, &skip_args))
display_arg = 4;
}
#endif /* HAVE_NS */
#ifdef HAVE_X_WINDOWS
/* Stupid kludge to catch command-line display spec. We can't
handle this argument entirely in window system dependent code
@ -1487,6 +1524,13 @@ main (argc, argv
init_mac_osx_environment ();
#endif
#ifdef HAVE_NS
#ifndef CANNOT_DUMP
if (initialized)
#endif
ns_init_paths ();
#endif
/* egetenv is a pretty low-level facility, which may get called in
many circumstances; it seems flimsy to put off initializing it
until calling init_callproc. */
@ -1588,6 +1632,7 @@ main (argc, argv
#ifdef HAVE_X_WINDOWS
syms_of_xterm ();
syms_of_xfns ();
syms_of_xmenu ();
syms_of_fontset ();
#ifdef HAVE_X_SM
syms_of_xsmfns ();
@ -1599,13 +1644,6 @@ main (argc, argv
syms_of_menu ();
#ifndef HAVE_NTGUI
#ifndef MAC_OS
/* Called before init_window_once for Mac OS Classic. */
syms_of_xmenu ();
#endif
#endif
#ifdef HAVE_NTGUI
syms_of_w32term ();
syms_of_w32fns ();
@ -1622,6 +1660,14 @@ main (argc, argv
syms_of_fontset ();
#endif /* MAC_OSX && HAVE_CARBON */
#ifdef HAVE_NS
syms_of_nsterm ();
syms_of_nsfns ();
syms_of_nsmenu ();
syms_of_nsselect ();
syms_of_fontset ();
#endif /* HAVE_NS */
#ifdef HAVE_DBUS
syms_of_dbusbind ();
#endif /* HAVE_DBUS */
@ -1843,6 +1889,15 @@ struct standard_args standard_args[] =
{ "-color", "--color", 5, 0},
{ "-no-splash", "--no-splash", 3, 0 },
{ "-no-desktop", "--no-desktop", 3, 0 },
#ifdef HAVE_NS
{ "-NSAutoLaunch", 0, 5, 1 },
{ "-NXAutoLaunch", 0, 5, 1 },
{ "-disable-font-backend", "--disable-font-backend", 65, 0 },
{ "-_NSMachLaunch", 0, 85, 1 },
{ "-MachLaunch", 0, 85, 1 },
{ "-macosx", 0, 85, 0 },
{ "-NSHost", 0, 85, 1 },
#endif
/* These have the same priority as ordinary file name args,
so they are not reordered with respect to those. */
{ "-L", "--directory", 0, 1 },
@ -1862,6 +1917,13 @@ struct standard_args standard_args[] =
{ "-visit", "--visit", 0, 1 },
{ "-file", "--file", 0, 1 },
{ "-insert", "--insert", 0, 1 },
#ifdef HAVE_NS
{ "-NXOpen", 0, 0, 1 },
{ "-NXOpenTemp", 0, 0, 1 },
{ "-NSOpen", 0, 0, 1 },
{ "-NSOpenTemp", 0, 0, 1 },
{ "-GSFilePath", 0, 0, 1 },
#endif
/* This should be processed after ordinary file name args and the like. */
{ "-kill", "--kill", -10, 0 },
};
@ -2158,6 +2220,10 @@ shut_down_emacs (sig, no_x, stuff)
#ifdef MSDOS
dos_cleanup ();
#endif
#ifdef HAVE_NS
ns_term_shutdown (sig);
#endif
}

View file

@ -46,6 +46,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include "w32term.h"
#endif /* HAVE_NTGUI */
#ifdef HAVE_NS
#include "nsterm.h"
#endif /* HAVE_NS */
#ifdef MAC_OS
#include "macterm.h"
#endif /* MAC_OS */
@ -57,6 +61,12 @@ Lisp_Object Qopentype;
/* Important character set strings. */
Lisp_Object Qascii_0, Qiso8859_1, Qiso10646_1, Qunicode_bmp, Qunicode_sip;
#ifdef HAVE_NS
#define DEFAULT_ENCODING Qiso10646_1
#else
#define DEFAULT_ENCODING Qiso8859_1
#endif
/* Special vector of zero length. This is repeatedly used by (struct
font_driver *)->list when a specified font is not found. */
static Lisp_Object null_vector;
@ -3096,7 +3106,7 @@ font_find_for_lface (f, attrs, spec, c)
registry[0] = AREF (spec, FONT_REGISTRY_INDEX);
if (NILP (registry[0]))
{
registry[0] = Qiso8859_1;
registry[0] = DEFAULT_ENCODING;
registry[1] = Qascii_0;
registry[2] = null_vector;
}
@ -4948,6 +4958,7 @@ extern void syms_of_ftxfont P_ (());
extern void syms_of_bdffont P_ (());
extern void syms_of_w32font P_ (());
extern void syms_of_atmfont P_ (());
extern void syms_of_nsfont P_ (());
void
syms_of_font ()
@ -5117,6 +5128,9 @@ EMACS_FONT_LOG is set. Otherwise, it is set to t. */);
#ifdef WINDOWSNT
syms_of_w32font ();
#endif /* WINDOWSNT */
#ifdef HAVE_NS
syms_of_nsfont ();
#endif /* HAVE_NS */
#ifdef MAC_OS
syms_of_atmfont ();
#endif /* MAC_OS */

View file

@ -860,6 +860,9 @@ extern struct font_driver uniscribe_font_driver;
#ifdef MAC_OS
extern struct font_driver atmfont_driver;
#endif /* MAC_OS */
#ifdef HAVE_NS
extern struct font_driver nsfont_driver;
#endif /* HAVE_NS */
#ifndef FONT_DEBUG
#define FONT_DEBUG

View file

@ -47,6 +47,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef WINDOWSNT
#include "w32term.h"
#endif
#ifdef HAVE_NS
#include "nsterm.h"
#endif
#ifdef MAC_OS
#include "macterm.h"
#endif
@ -1622,6 +1625,11 @@ fontset_from_font (font_object)
ASET (font_spec, i, Qnil);
Fset_fontset_font (name, Qlatin, font_spec, Qnil, Qnil);
Fset_fontset_font (name, Qnil, font_spec, Qnil, Qnil);
#ifdef HAVE_NS
nsfont_make_fontset_for_font(name, font_object);
#endif
return XINT (FONTSET_ID (fontset));
}

View file

@ -32,6 +32,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef MAC_OS
#include "macterm.h"
#endif
#ifdef HAVE_NS
#include "nsterm.h"
#endif
#include "buffer.h"
/* These help us bind and responding to switch-frame events. */
#include "commands.h"
@ -72,7 +75,7 @@ Lisp_Object Vframe_alpha_lower_limit;
Lisp_Object Qframep, Qframe_live_p;
Lisp_Object Qicon, Qmodeline;
Lisp_Object Qonly;
Lisp_Object Qx, Qw32, Qmac, Qpc;
Lisp_Object Qx, Qw32, Qmac, Qpc, Qns;
Lisp_Object Qvisible;
Lisp_Object Qdisplay_type;
Lisp_Object Qbackground_mode;
@ -203,7 +206,8 @@ DEFUN ("framep", Fframep, Sframep, 1, 1, 0,
Value is t for a termcap frame (a character-only terminal),
`x' for an Emacs frame that is really an X window,
`w32' for an Emacs frame that is a window on MS-Windows display,
`mac' for an Emacs frame on a Macintosh display,
`mac' for an Emacs frame on a Macintosh 8/9 X-Carbon display,
`ns' for an Emacs frame on a GNUstep or Macintosh Cocoa display,
`pc' for a direct-write MS-DOS frame.
See also `frame-live-p'. */)
(object)
@ -224,6 +228,8 @@ See also `frame-live-p'. */)
return Qpc;
case output_mac:
return Qmac;
case output_ns:
return Qns;
default:
abort ();
}
@ -551,6 +557,11 @@ make_initial_frame (void)
FRAME_CAN_HAVE_SCROLL_BARS (f) = 0;
FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none;
#ifdef CANNOT_DUMP
if (!noninteractive)
init_frame_faces (f);
#endif
return f;
}
@ -880,6 +891,12 @@ do_switch_frame (frame, track, for_deletion)
Fselect_window (XFRAME (frame)->selected_window, Qnil);
#ifdef NS_IMPL_COCOA
/* term gets no other notification of this */
if (for_deletion)
Fraise_frame(Qnil);
#endif
/* We want to make sure that the next event generates a frame-switch
event to the appropriate frame. This seems kludgy to me, but
before you take it out, make sure that evaluating something like
@ -2969,8 +2986,9 @@ x_set_frame_parameters (f, alist)
old_value = get_frame_param (f, prop);
fullscreen_is_being_set |= EQ (prop, Qfullscreen);
#ifndef HAVE_NS /* PENDING: ensure font attrs change goes through */
if (NILP (Fequal (val, old_value)))
#endif
{
store_frame_param (f, prop, val);
@ -3949,6 +3967,9 @@ x_get_arg (dpyinfo, alist, param, attribute, class, type)
case RES_TYPE_BOOLEAN:
tem = Fdowncase (tem);
if (!strcmp (SDATA (tem), "on")
#ifdef HAVE_NS
|| !strcmp(SDATA(tem), "yes")
#endif
|| !strcmp (SDATA (tem), "true"))
return Qt;
else
@ -3964,9 +3985,15 @@ x_get_arg (dpyinfo, alist, param, attribute, class, type)
Lisp_Object lower;
lower = Fdowncase (tem);
if (!strcmp (SDATA (lower), "on")
#ifdef HAVE_NS
|| !strcmp(SDATA(lower), "yes")
#endif
|| !strcmp (SDATA (lower), "true"))
return Qt;
else if (!strcmp (SDATA (lower), "off")
#ifdef HAVE_NS
|| !strcmp(SDATA(lower), "no")
#endif
|| !strcmp (SDATA (lower), "false"))
return Qnil;
else
@ -4366,6 +4393,8 @@ syms_of_frame ()
staticpro (&Qpc);
Qmac = intern ("mac");
staticpro (&Qmac);
Qns = intern ("ns");
staticpro (&Qns);
Qvisible = intern ("visible");
staticpro (&Qvisible);
Qbuffer_predicate = intern ("buffer-predicate");
@ -4473,8 +4502,8 @@ Setting this variable does not affect existing frames, only new ones. */);
DEFVAR_LISP ("default-frame-scroll-bars", &Vdefault_frame_scroll_bars,
doc: /* Default position of scroll bars on this window-system. */);
#ifdef HAVE_WINDOW_SYSTEM
#if defined(HAVE_NTGUI) || defined(MAC_OS)
/* MS-Windows has scroll bars on the right by default. */
#if defined(HAVE_NTGUI) || defined(MAC_OS) || defined(NS_IMPL_COCOA)
/* MS-Windows and Mac OS X have scroll bars on the right by default. */
Vdefault_frame_scroll_bars = Qright;
#else
Vdefault_frame_scroll_bars = Qleft;
@ -4540,7 +4569,7 @@ You should set this variable to tell Emacs how your window manager
handles focus, since there is no way in general for Emacs to find out
automatically. */);
#ifdef HAVE_WINDOW_SYSTEM
#if defined(HAVE_NTGUI) || defined(MAC_OS)
#if defined(HAVE_NTGUI) || defined(MAC_OS) || defined(HAVE_NS)
focus_follows_mouse = 0;
#else
focus_follows_mouse = 1;

View file

@ -50,7 +50,8 @@ enum output_method
output_x_window,
output_msdos_raw,
output_w32,
output_mac
output_mac,
output_ns
};
enum vertical_scroll_bar_type
@ -242,7 +243,7 @@ struct frame
auto-resize-tool-bar is set to grow-only. */
unsigned minimize_tool_bar_window_p : 1;
#if defined (USE_GTK) || defined (MAC_OS)
#if defined (USE_GTK) || defined (HAVE_NS) || defined (MAC_OS)
/* Nonzero means using a tool bar that comes from the toolkit. */
int external_tool_bar;
#endif
@ -332,6 +333,7 @@ struct frame
struct x_output *x; /* xterm.h */
struct w32_output *w32; /* w32term.h */
struct mac_output *mac; /* macterm.h */
struct ns_output *ns; /* nsterm.h */
EMACS_INT nothing;
}
output_data;
@ -359,7 +361,7 @@ struct frame
int menu_bar_lines;
#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) || defined (MAC_OS) \
|| defined (USE_GTK)
|| defined (HAVE_NS) || defined (USE_GTK)
/* Nonzero means using a menu bar that comes from the X toolkit. */
unsigned int external_menu_bar : 1;
#endif
@ -519,6 +521,7 @@ typedef struct frame *FRAME_PTR;
#define FRAME_W32_P(f) ((f)->output_method == output_w32)
#define FRAME_MSDOS_P(f) ((f)->output_method == output_msdos_raw)
#define FRAME_MAC_P(f) ((f)->output_method == output_mac)
#define FRAME_NS_P(f) ((f)->output_method == output_ns)
/* FRAME_WINDOW_P tests whether the frame is a window, and is
defined to be the predicate for the window system being used. */
@ -532,6 +535,9 @@ typedef struct frame *FRAME_PTR;
#ifdef MAC_OS
#define FRAME_WINDOW_P(f) FRAME_MAC_P (f)
#endif
#ifdef HAVE_NS
#define FRAME_WINDOW_P(f) FRAME_NS_P(f)
#endif
#ifndef FRAME_WINDOW_P
#define FRAME_WINDOW_P(f) (0)
#endif
@ -570,7 +576,7 @@ typedef struct frame *FRAME_PTR;
/* Nonzero if this frame should display a tool bar
in a way that does not use any text lines. */
#if defined (USE_GTK) || defined (MAC_OS)
#if defined (USE_GTK) || defined (HAVE_NS) || defined (MAC_OS)
#define FRAME_EXTERNAL_TOOL_BAR(f) (f)->external_tool_bar
#else
#define FRAME_EXTERNAL_TOOL_BAR(f) 0
@ -589,7 +595,7 @@ typedef struct frame *FRAME_PTR;
/* Nonzero if this frame should display a menu bar
in a way that does not use any text lines. */
#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) || defined (MAC_OS) \
|| defined (USE_GTK)
|| defined (HAVE_NS) || defined (USE_GTK)
#define FRAME_EXTERNAL_MENU_BAR(f) (f)->external_menu_bar
#else
#define FRAME_EXTERNAL_MENU_BAR(f) 0
@ -1044,7 +1050,7 @@ extern Lisp_Object Qleft_fringe, Qright_fringe;
extern Lisp_Object Qheight, Qwidth;
extern Lisp_Object Qminibuffer, Qmodeline;
extern Lisp_Object Qonly;
extern Lisp_Object Qx, Qw32, Qmac, Qpc;
extern Lisp_Object Qx, Qw32, Qmac, Qpc, Qns;
extern Lisp_Object Qvisible;
extern Lisp_Object Qdisplay_type;
extern Lisp_Object Qbackground_mode;

View file

@ -482,7 +482,7 @@ static struct fringe_bitmap **fringe_bitmaps;
static Lisp_Object *fringe_faces;
static int max_fringe_bitmaps;
static int max_used_fringe_bitmap = MAX_STANDARD_FRINGE_BITMAPS;
int max_used_fringe_bitmap = MAX_STANDARD_FRINGE_BITMAPS;
/* Lookup bitmap number for symbol BITMAP.

View file

@ -420,7 +420,7 @@ extern int errno;
# define host_self mach_host_self
# endif
# ifdef NeXT
# if defined(NeXT) || defined(RHAPSODY) || defined(DARWIN) || defined(MAC_OSX)
# ifdef HAVE_MACH_MACH_H
# include <mach/mach.h>
# else
@ -467,7 +467,7 @@ extern int errno;
/* Avoid static vars inside a function since in HPUX they dump as pure. */
# ifdef NeXT
# if defined(NeXT) || defined(RHAPSODY) || defined(DARWIN) || defined(MAC_OSX)
static processor_set_t default_set;
static int getloadavg_initialized;
# endif /* NeXT */
@ -647,7 +647,8 @@ getloadavg (loadavg, nelem)
# endif /* __NetBSD__ */
# if !defined (LDAV_DONE) && defined (NeXT)
# if !defined (LDAV_DONE) && ( defined (NeXT) || defined(RHAPSODY) \
|| defined(DARWIN) || defined(MAC_OSX) )
# define LDAV_DONE
/* The NeXT code was adapted from iscreen 3.2. */

View file

@ -131,6 +131,32 @@ typedef struct mac_bitmap_record Bitmap_Record;
#endif /* MAC_OS */
#ifdef HAVE_NS
#include "nsterm.h"
#include <sys/types.h>
#include <sys/stat.h>
#undef COLOR_TABLE_SUPPORT
typedef struct ns_bitmap_record Bitmap_Record;
#define GET_PIXEL(ximg, x, y) XGetPixel(ximg, x, y)
#define NO_PIXMAP 0
#define RGB_PIXEL_COLOR unsigned long
#define ZPixmap 0
#define PIX_MASK_RETAIN 0
#define PIX_MASK_DRAW 1
#define FRAME_X_VISUAL FRAME_NS_DISPLAY_INFO(f)->visual
#define x_defined_color(f, name, color_def, alloc) \
ns_defined_color (f, name, color_def, alloc, 0)
#define FRAME_X_SCREEN(f) 0
#define DefaultDepthOfScreen(screen) ns_display_list->n_planes
#endif /* HAVE_NS */
/* Search path for bitmap files. */
Lisp_Object Vx_bitmap_file_path;
@ -403,6 +429,33 @@ mac_create_cg_image_from_image (f, img)
#endif /* USE_CG_DRAWING */
#endif /* MAC_OS */
#ifdef HAVE_NS
XImagePtr
XGetImage (Display *display, Pixmap pixmap, int x, int y,
unsigned int width, unsigned int height,
unsigned long plane_mask, int format)
{
/* PENDING: not sure what this function is supposed to do.. */
ns_retain_object(pixmap);
return pixmap;
}
/* use with imgs created by ns_image_for_XPM */
unsigned long
XGetPixel (XImagePtr ximage, int x, int y)
{
return ns_get_pixel(ximage, x, y);
}
/* use with imgs created by ns_image_for_XPM; alpha set to 1;
pixel is assumed to be in form RGB */
void
XPutPixel (XImagePtr ximage, int x, int y, unsigned long pixel)
{
ns_put_pixel(ximage, x, y, pixel);
}
#endif /* HAVE_NS */
/* Functions to access the contents of a bitmap, given an id. */
@ -519,12 +572,23 @@ x_create_bitmap_from_data (f, bits, width, height)
return -1;
#endif
#ifdef HAVE_NS
void *bitmap = ns_image_from_XBM(bits, width, height);
if (!bitmap)
return -1;
#endif
id = x_allocate_bitmap_record (f);
#ifdef MAC_OS
dpyinfo->bitmaps[id - 1].bitmap_data = (char *) xmalloc (height * width);
bcopy (bits, dpyinfo->bitmaps[id - 1].bitmap_data, height * width);
#endif /* MAC_OS */
#ifdef HAVE_NS
dpyinfo->bitmaps[id - 1].img = bitmap;
dpyinfo->bitmaps[id - 1].depth = 1;
#endif
dpyinfo->bitmaps[id - 1].file = NULL;
dpyinfo->bitmaps[id - 1].height = height;
dpyinfo->bitmaps[id - 1].width = width;
@ -552,6 +616,8 @@ x_create_bitmap_from_file (f, file)
struct frame *f;
Lisp_Object file;
{
Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
#ifdef MAC_OS
return -1; /* MAC_TODO : bitmap support */
#endif /* MAC_OS */
@ -560,8 +626,26 @@ x_create_bitmap_from_file (f, file)
return -1; /* W32_TODO : bitmap support */
#endif /* HAVE_NTGUI */
#ifdef HAVE_NS
int id;
void *bitmap = ns_image_from_file(file);
if (!bitmap)
return -1;
id = x_allocate_bitmap_record (f);
dpyinfo->bitmaps[id - 1].img = bitmap;
dpyinfo->bitmaps[id - 1].refcount = 1;
dpyinfo->bitmaps[id - 1].file = (char *) xmalloc (SBYTES (file) + 1);
dpyinfo->bitmaps[id - 1].depth = 1;
dpyinfo->bitmaps[id - 1].height = ns_image_width(bitmap);
dpyinfo->bitmaps[id - 1].width = ns_image_height(bitmap);
strcpy (dpyinfo->bitmaps[id - 1].file, SDATA (file));
return id;
#endif
#ifdef HAVE_X_WINDOWS
Display_Info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
unsigned int width, height;
Pixmap bitmap;
int xhot, yhot, result, id;
@ -630,6 +714,10 @@ free_bitmap_record (dpyinfo, bm)
bm->bitmap_data = NULL;
#endif /* MAC_OS */
#ifdef HAVE_NS
ns_release_object(bm->img);
#endif
if (bm->file)
{
xfree (bm->file);
@ -1407,7 +1495,8 @@ image_ascent (img, face, slice)
because a typical font is `top-heavy' (due to the presence
uppercase letters), so the image placement should err towards
being top-heavy too. It also just generally looks better. */
ascent = (height + face->font->ascent - face->font->descent + 1) / 2;
ascent = (height + FONT_BASE(face->font)
- FONT_DESCENT(face->font) + 1) / 2;
#endif /* HAVE_NTGUI */
}
else
@ -1476,6 +1565,14 @@ four_corners_best (ximg, corners, width, height)
#define Free_Pixmap(display, pixmap) \
DeleteObject (pixmap)
#elif defined (HAVE_NS)
#define Destroy_Image(ximg, dummy) \
ns_release_object(ximg)
#define Free_Pixmap(display, pixmap) \
ns_release_object(pixmap)
#else
#define Destroy_Image(ximg, dummy) \
@ -1484,7 +1581,7 @@ four_corners_best (ximg, corners, width, height)
#define Free_Pixmap(display, pixmap) \
XFreePixmap (display, pixmap)
#endif /* HAVE_NTGUI */
#endif /* !HAVE_NTGUI && !HAVE_NS */
/* Return the `background' field of IMG. If IMG doesn't have one yet,
@ -1607,6 +1704,10 @@ x_clear_image_1 (f, img, pixmap_p, mask_p, colors_p)
{
Free_Pixmap (FRAME_X_DISPLAY (f), img->pixmap);
img->pixmap = NO_PIXMAP;
#ifdef HAVE_NS
if (img->background_valid)
ns_free_indexed_color(img->background);
#endif
img->background_valid = 0;
}
@ -2387,6 +2488,18 @@ x_create_x_image_and_pixmap (f, width, height, depth, ximg, pixmap)
return 1;
#endif /* MAC_OS */
#ifdef HAVE_NS
*pixmap = ns_image_for_XPM(width, height, depth);
if (*pixmap == 0)
{
*ximg = NULL;
image_error ("Unable to allocate NSImage for XPM pixmap", Qnil, Qnil);
return 0;
}
*ximg = *pixmap;
return 1;
#endif
}
@ -2412,6 +2525,9 @@ x_destroy_x_image (ximg)
#ifdef MAC_OS
XDestroyImage (ximg);
#endif /* MAC_OS */
#ifdef HAVE_NS
ns_release_object(ximg);
#endif /* HAVE_NS */
}
}
@ -2446,6 +2562,11 @@ x_put_x_image (f, ximg, pixmap, width, height)
#ifdef MAC_OS
xassert (ximg == pixmap);
#endif /* MAC_OS */
#ifdef HAVE_NS
xassert (ximg == pixmap);
ns_retain_object(ximg);
#endif
}
@ -3499,6 +3620,10 @@ Create_Pixmap_From_Bitmap_Data (f, img, data, fg, bg, non_default_colors)
/* If colors were specified, transfer the bitmap to a color one. */
if (non_default_colors)
convert_mono_to_color_image (f, img, fg, bg);
#elif defined (HAVE_NS)
img->pixmap = ns_image_from_XBM(data, img->width, img->height);
#else
img->pixmap
= XCreatePixmapFromBitmapData (FRAME_X_DISPLAY (f),
@ -3507,7 +3632,7 @@ Create_Pixmap_From_Bitmap_Data (f, img, data, fg, bg, non_default_colors)
img->width, img->height,
fg, bg,
DefaultDepthOfScreen (FRAME_X_SCREEN (f)));
#endif /* HAVE_NTGUI */
#endif /* !HAVE_NTGUI && !HAVE_NS */
}
@ -3891,13 +4016,13 @@ xbm_load (f, img)
XPM images
***********************************************************************/
#if defined (HAVE_XPM) || defined (MAC_OS)
#if defined (HAVE_XPM) || defined (MAC_OS) || defined (HAVE_NS)
static int xpm_image_p P_ ((Lisp_Object object));
static int xpm_load P_ ((struct frame *f, struct image *img));
static int xpm_valid_color_symbols_p P_ ((Lisp_Object));
#endif /* HAVE_XPM || MAC_OS */
#endif /* HAVE_XPM || MAC_OS || HAVE_NS */
#ifdef HAVE_XPM
#ifdef HAVE_NTGUI
@ -3920,7 +4045,7 @@ static int xpm_valid_color_symbols_p P_ ((Lisp_Object));
#endif /* HAVE_NTGUI */
#endif /* HAVE_XPM */
#if defined (HAVE_XPM) || defined (MAC_OS)
#if defined (HAVE_XPM) || defined (MAC_OS) || defined (HAVE_NS)
/* The symbol `xpm' identifying XPM-format images. */
Lisp_Object Qxpm;
@ -4247,7 +4372,7 @@ xpm_image_p (object)
|| xpm_valid_color_symbols_p (fmt[XPM_COLOR_SYMBOLS].value)));
}
#endif /* HAVE_XPM || MAC_OS */
#endif /* HAVE_XPM || MAC_OS || HAVE_NS */
#if defined (HAVE_XPM) && defined (HAVE_X_WINDOWS)
int
@ -4526,7 +4651,7 @@ xpm_load (f, img)
#endif /* HAVE_XPM */
#ifdef MAC_OS
#if defined (MAC_OS) || ( defined (HAVE_NS) && !defined (HAVE_XPM) )
/* XPM support functions for Mac OS where libxpm is not available.
Only XPM version 3 (without any extensions) is supported. */
@ -4884,8 +5009,11 @@ xpm_load_image (f, img, contents, end)
if (!x_create_x_image_and_pixmap (f, width, height, 0,
&ximg, &img->pixmap)
#ifndef HAVE_NS
|| !x_create_x_image_and_pixmap (f, width, height, 1,
&mask_img, &img->mask))
&mask_img, &img->mask)
#endif
)
{
image_error ("Out of memory (%s)", img->spec, Qnil);
goto error;
@ -4905,9 +5033,14 @@ xpm_load_image (f, img, contents, end)
XPutPixel (ximg, x, y,
(INTEGERP (color_val) ? XINT (color_val)
: FRAME_FOREGROUND_PIXEL (f)));
#ifndef HAVE_NS
XPutPixel (mask_img, x, y,
(!EQ (color_val, Qt) ? PIX_MASK_DRAW
: (have_mask = 1, PIX_MASK_RETAIN)));
#else
if (EQ(color_val, Qt))
ns_set_alpha(ximg, x, y, 0);
#endif
}
if (y + 1 < height)
expect (',');
@ -4922,6 +5055,7 @@ xpm_load_image (f, img, contents, end)
x_put_x_image (f, ximg, img->pixmap, width, height);
x_destroy_x_image (ximg);
#ifndef HAVE_NS
if (have_mask)
{
/* Fill in the background_transparent field while we have the
@ -4937,7 +5071,7 @@ xpm_load_image (f, img, contents, end)
Free_Pixmap (FRAME_X_DISPLAY (f), img->mask);
img->mask = NO_PIXMAP;
}
#endif
return 1;
failure:
@ -5003,7 +5137,7 @@ xpm_load (f, img)
return success_p;
}
#endif /* MAC_OS */
#endif /* MAC_OS || (HAVE_NS && !HAVE_XPM) */
@ -5273,6 +5407,9 @@ lookup_rgb_color (f, r, g, b)
pixel = PALETTERGB (r >> 8, g >> 8, b >> 8);
#endif /* HAVE_NTGUI */
#ifdef HAVE_NS
pixel = RGB_TO_ULONG (r >> 8, g >> 8, b >> 8);
#endif /* HAVE_NS */
return pixel;
}
@ -5378,7 +5515,7 @@ x_to_xcolors (f, img, rgb_p)
p->pixel = GET_PIXEL (ximg, x, y);
if (rgb_p)
{
#ifdef MAC_OS
#if defined (MAC_OS) || defined (HAVE_NS)
p->red = RED16_FROM_ULONG (p->pixel);
p->green = GREEN16_FROM_ULONG (p->pixel);
p->blue = BLUE16_FROM_ULONG (p->pixel);
@ -5459,8 +5596,8 @@ x_from_xcolors (f, img, colors)
XColor *colors;
{
int x, y;
XImagePtr oimg;
Pixmap pixmap;
XImagePtr oimg = NULL;
Pixmap pixmap = NULL;
XColor *p;
init_color_table ();
@ -5673,6 +5810,8 @@ x_disable_image (f, img)
Display *dpy = FRAME_X_DISPLAY (f);
GC gc;
#ifndef HAVE_NS //TODO: NS support, however this not needed for toolbars
#ifdef MAC_OS
#define MaskForeground(f) PIX_MASK_DRAW
#else
@ -5697,6 +5836,7 @@ x_disable_image (f, img)
img->width - 1, 0);
XFreeGC (dpy, gc);
}
#endif /* !HAVE_NS */
#else
HDC hdc, bmpdc;
HGDIOBJ prev;
@ -5762,11 +5902,13 @@ x_build_heuristic_mask (f, img, how)
}
#ifndef HAVE_NTGUI
#ifndef HAVE_NS
/* Create an image and pixmap serving as mask. */
rc = x_create_x_image_and_pixmap (f, img->width, img->height, 1,
&mask_img, &img->mask);
if (!rc)
return 0;
#endif /* !HAVE_NS */
/* Get the X image of IMG->pixmap. */
ximg = XGetImage (FRAME_X_DISPLAY (f), img->pixmap, 0, 0,
@ -5820,16 +5962,21 @@ x_build_heuristic_mask (f, img, how)
#ifndef HAVE_NTGUI
for (y = 0; y < img->height; ++y)
for (x = 0; x < img->width; ++x)
#ifndef HAVE_NS
XPutPixel (mask_img, x, y, (XGetPixel (ximg, x, y) != bg
? PIX_MASK_DRAW : PIX_MASK_RETAIN));
#else
if (XGetPixel (ximg, x, y) == bg)
ns_set_alpha(ximg, x, y, 0);
#endif /* HAVE_NS */
#ifndef HAVE_NS
/* Fill in the background_transparent field while we have the mask handy. */
image_background_transparent (img, f, mask_img);
/* Put mask_img into img->mask. */
x_put_x_image (f, mask_img, img->mask, img->width, img->height);
x_destroy_x_image (mask_img);
#endif /* !HAVE_NS */
#else
for (y = 0; y < img->height; ++y)
for (x = 0; x < img->width; ++x)
@ -6280,7 +6427,7 @@ pbm_load (f, img)
PNG
***********************************************************************/
#if defined (HAVE_PNG) || defined (MAC_OS)
#if defined (HAVE_PNG) || defined (MAC_OS) || defined (HAVE_NS)
/* Function prototypes. */
@ -6352,7 +6499,7 @@ png_image_p (object)
return fmt[PNG_FILE].count + fmt[PNG_DATA].count == 1;
}
#endif /* HAVE_PNG || MAC_OS */
#endif /* HAVE_PNG || MAC_OS || HAVE_NS */
#ifdef HAVE_PNG
@ -6912,6 +7059,17 @@ png_load (f, img)
}
#endif /* MAC_OS */
#ifdef HAVE_NS
static int
png_load (struct frame *f, struct image *img)
{
return ns_load_image(f, img,
image_spec_value (img->spec, QCfile, NULL),
image_spec_value (img->spec, QCdata, NULL));
}
#endif /* HAVE_NS */
#endif /* !HAVE_PNG */
@ -6920,7 +7078,7 @@ png_load (f, img)
JPEG
***********************************************************************/
#if defined (HAVE_JPEG) || defined (MAC_OS)
#if defined (HAVE_JPEG) || defined (MAC_OS) || defined (HAVE_NS)
static int jpeg_image_p P_ ((Lisp_Object object));
static int jpeg_load P_ ((struct frame *f, struct image *img));
@ -6991,7 +7149,7 @@ jpeg_image_p (object)
return fmt[JPEG_FILE].count + fmt[JPEG_DATA].count == 1;
}
#endif /* HAVE_JPEG || MAC_OS */
#endif /* HAVE_JPEG || MAC_OS || HAVE_NS */
#ifdef HAVE_JPEG
@ -7491,6 +7649,16 @@ jpeg_load (f, img)
}
#endif /* MAC_OS */
#ifdef HAVE_NS
static int
jpeg_load (struct frame *f, struct image *img)
{
return ns_load_image(f, img,
image_spec_value (img->spec, QCfile, NULL),
image_spec_value (img->spec, QCdata, NULL));
}
#endif /* HAVE_NS */
#endif /* !HAVE_JPEG */
@ -7499,7 +7667,7 @@ jpeg_load (f, img)
TIFF
***********************************************************************/
#if defined (HAVE_TIFF) || defined (MAC_OS)
#if defined (HAVE_TIFF) || defined (MAC_OS) || defined (HAVE_NS)
static int tiff_image_p P_ ((Lisp_Object object));
static int tiff_load P_ ((struct frame *f, struct image *img));
@ -7569,7 +7737,7 @@ tiff_image_p (object)
return fmt[TIFF_FILE].count + fmt[TIFF_DATA].count == 1;
}
#endif /* HAVE_TIFF || MAC_OS */
#endif /* HAVE_TIFF || MAC_OS || HAVE_NS */
#ifdef HAVE_TIFF
@ -7916,6 +8084,16 @@ tiff_load (f, img)
}
#endif /* MAC_OS */
#ifdef HAVE_NS
static int
tiff_load (struct frame *f, struct image *img)
{
return ns_load_image(f, img,
image_spec_value (img->spec, QCfile, NULL),
image_spec_value (img->spec, QCdata, NULL));
}
#endif /* HAVE_NS */
#endif /* !HAVE_TIFF */
@ -7924,7 +8102,7 @@ tiff_load (f, img)
GIF
***********************************************************************/
#if defined (HAVE_GIF) || defined (MAC_OS)
#if defined (HAVE_GIF) || defined (MAC_OS) || defined (HAVE_NS)
static int gif_image_p P_ ((Lisp_Object object));
static int gif_load P_ ((struct frame *f, struct image *img));
@ -8553,6 +8731,16 @@ gif_load (f, img)
}
#endif /* MAC_OS */
#ifdef HAVE_NS
static int
gif_load (struct frame *f, struct image *img)
{
return ns_load_image(f, img,
image_spec_value (img->spec, QCfile, NULL),
image_spec_value (img->spec, QCdata, NULL));
}
#endif /* HAVE_NS */
#endif /* HAVE_GIF */
@ -9335,27 +9523,27 @@ of `image-library-alist', which see). */)
if (CONSP (tested))
return XCDR (tested);
#if defined (HAVE_XPM) || defined (MAC_OS)
#if defined (HAVE_XPM) || defined (MAC_OS) || defined (HAVE_NS)
if (EQ (type, Qxpm))
return CHECK_LIB_AVAILABLE (&xpm_type, init_xpm_functions, libraries);
#endif
#if defined (HAVE_JPEG) || defined (MAC_OS)
#if defined (HAVE_JPEG) || defined (MAC_OS) || defined (HAVE_NS)
if (EQ (type, Qjpeg))
return CHECK_LIB_AVAILABLE (&jpeg_type, init_jpeg_functions, libraries);
#endif
#if defined (HAVE_TIFF) || defined (MAC_OS)
#if defined (HAVE_TIFF) || defined (MAC_OS) || defined (HAVE_NS)
if (EQ (type, Qtiff))
return CHECK_LIB_AVAILABLE (&tiff_type, init_tiff_functions, libraries);
#endif
#if defined (HAVE_GIF) || defined (MAC_OS)
#if defined (HAVE_GIF) || defined (MAC_OS) || defined (HAVE_NS)
if (EQ (type, Qgif))
return CHECK_LIB_AVAILABLE (&gif_type, init_gif_functions, libraries);
#endif
#if defined (HAVE_PNG) || defined (MAC_OS)
#if defined (HAVE_PNG) || defined (MAC_OS) || defined (HAVE_NS)
if (EQ (type, Qpng))
return CHECK_LIB_AVAILABLE (&png_type, init_png_functions, libraries);
#endif
@ -9480,31 +9668,31 @@ non-numeric, there is no explicit limit on the size of images. */);
staticpro (&QCpt_height);
#endif /* HAVE_GHOSTSCRIPT */
#if defined (HAVE_XPM) || defined (MAC_OS)
#if defined (HAVE_XPM) || defined (MAC_OS) || defined (HAVE_NS)
Qxpm = intern ("xpm");
staticpro (&Qxpm);
ADD_IMAGE_TYPE (Qxpm);
#endif
#if defined (HAVE_JPEG) || defined (MAC_OS)
#if defined (HAVE_JPEG) || defined (MAC_OS) || defined (HAVE_NS)
Qjpeg = intern ("jpeg");
staticpro (&Qjpeg);
ADD_IMAGE_TYPE (Qjpeg);
#endif
#if defined (HAVE_TIFF) || defined (MAC_OS)
#if defined (HAVE_TIFF) || defined (MAC_OS) || defined (HAVE_NS)
Qtiff = intern ("tiff");
staticpro (&Qtiff);
ADD_IMAGE_TYPE (Qtiff);
#endif
#if defined (HAVE_GIF) || defined (MAC_OS)
#if defined (HAVE_GIF) || defined (MAC_OS) || defined (HAVE_NS)
Qgif = intern ("gif");
staticpro (&Qgif);
ADD_IMAGE_TYPE (Qgif);
#endif
#if defined (HAVE_PNG) || defined (MAC_OS)
#if defined (HAVE_PNG) || defined (MAC_OS) || defined (HAVE_NS)
Qpng = intern ("png");
staticpro (&Qpng);
ADD_IMAGE_TYPE (Qpng);

View file

@ -80,6 +80,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include "macterm.h"
#endif
#ifdef HAVE_NS
#include "nsterm.h"
extern Lisp_Object Qsuper;
#endif
#ifndef USE_CRT_DLL
extern int errno;
#endif
@ -4147,7 +4152,8 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
#endif
}
#if defined (HAVE_X11) || defined (HAVE_NTGUI) || defined (MAC_OS)
#if defined (HAVE_X11) || defined (HAVE_NTGUI) || defined (MAC_OS) \
|| defined (HAVE_NS)
else if (event->kind == DELETE_WINDOW_EVENT)
{
/* Make an event (delete-frame (FRAME)). */
@ -4156,7 +4162,8 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
kbd_fetch_ptr = event + 1;
}
#endif
#if defined (HAVE_X11) || defined (HAVE_NTGUI) || defined (MAC_OS)
#if defined (HAVE_X11) || defined (HAVE_NTGUI) || defined (MAC_OS) \
|| defined (HAVE_NS)
else if (event->kind == ICONIFY_EVENT)
{
/* Make an event (iconify-frame (FRAME)). */
@ -4179,7 +4186,7 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
kbd_fetch_ptr = event + 1;
}
#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) || defined (MAC_OS) \
|| defined (USE_GTK)
|| defined(HAVE_NS) || defined (USE_GTK)
else if (event->kind == MENU_BAR_ACTIVATE_EVENT)
{
kbd_fetch_ptr = event + 1;
@ -4289,7 +4296,7 @@ kbd_buffer_get_event (kbp, used_mouse_menu, end_time)
obj = make_lispy_event (event);
#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) || defined(MAC_OS) \
|| defined (USE_GTK)
|| defined(HAVE_NS) || defined (USE_GTK)
/* If this was a menu selection, then set the flag to inhibit
writing to last_nonmenu_event. Don't do this if the event
we're returning is (menu-bar), though; that indicates the
@ -5643,7 +5650,7 @@ make_lispy_event (event)
if (event->kind == MOUSE_CLICK_EVENT)
{
struct frame *f = XFRAME (event->frame_or_window);
#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK) && ! defined (HAVE_NS)
int row, column;
#endif
@ -5652,7 +5659,7 @@ make_lispy_event (event)
if (! FRAME_LIVE_P (f))
return Qnil;
#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
#if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK) && ! defined (HAVE_NS)
/* EVENT->x and EVENT->y are frame-relative pixel
coordinates at this place. Under old redisplay, COLUMN
and ROW are set to frame relative glyph coordinates
@ -5712,7 +5719,7 @@ make_lispy_event (event)
return Fcons (item, Fcons (position, Qnil));
}
#endif /* not USE_X_TOOLKIT && not USE_GTK */
#endif /* not USE_X_TOOLKIT && not USE_GTK && not HAVE_NS */
position = make_lispy_position (f, &event->x, &event->y,
event->timestamp);
@ -6092,7 +6099,7 @@ make_lispy_event (event)
#endif /* HAVE_MOUSE */
#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) || defined (MAC_OS) \
|| defined (USE_GTK)
|| defined(HAVE_NS) || defined (USE_GTK)
case MENU_BAR_EVENT:
if (EQ (event->arg, event->frame_or_window))
/* This is the prefix key. We translate this to
@ -7305,6 +7312,10 @@ tty_read_avail_input (struct terminal *terminal,
void
handle_async_input ()
{
#ifdef BSD4_1
extern int select_alarmed;
#endif
interrupt_input_pending = 0;
while (1)
@ -7317,6 +7328,9 @@ handle_async_input ()
if (nread <= 0)
break;
#ifdef BSD4_1
select_alarmed = 1; /* Force the select emulator back to life */
#endif
}
}
@ -7335,6 +7349,10 @@ input_available_signal (signo)
signal (signo, input_available_signal);
#endif /* USG */
#ifdef BSD4_1
sigisheld (SIGIO);
#endif
#ifdef SYNC_INPUT
interrupt_input_pending = 1;
#else
@ -7348,6 +7366,9 @@ input_available_signal (signo)
handle_async_input ();
#endif
#ifdef BSD4_1
sigfree ();
#endif
errno = old_errno;
}
#endif /* SIGIO */
@ -7975,10 +7996,15 @@ parse_menu_item (item, notreal, inmenubar)
/* With the introduction of where_is_cache, the computation
of equivalent key bindings is sufficiently fast that we
do not need to cache it here any more. */
/* CHECK_IMPURE (start);
XSETCDR (start, Fcons (Fcons (Qnil, Qnil), XCDR (start)));
cachelist = XCAR (XCDR (start)); */
/*PENDING: under NS this effect does not hold, perhaps due to the
modifier-preference changes to where-is-internal.. */
#ifdef HAVE_NS
CHECK_IMPURE (start);
XSETCDR (start, Fcons (Fcons (Qnil, Qnil), XCDR (start)));
cachelist = XCAR (XCDR (start));
#else
cachelist = Fcons (Qnil, Qnil);
#endif
newcache = 1;
tem = AREF (item_properties, ITEM_PROPERTY_KEYEQ);
if (!NILP (keyhint))
@ -8044,7 +8070,12 @@ parse_menu_item (item, notreal, inmenubar)
&& SYMBOLP (XSYMBOL (def)->function)
&& ! NILP (Fget (def, Qmenu_alias)))
def = XSYMBOL (def)->function;
#ifdef HAVE_NS
/* prefer 'super' bindings */
tem = Fwhere_is_internal (def, Qnil, Qsuper, Qt, Qt);
#else
tem = Fwhere_is_internal (def, Qnil, Qt, Qnil, Qt);
#endif
XSETCAR (cachelist, tem);
if (NILP (tem))
{
@ -8077,7 +8108,7 @@ parse_menu_item (item, notreal, inmenubar)
if (newcache && !NILP (tem))
{
tem = concat2 (build_string (" "), tem);
// tem = concat3 (build_string (" ("), tem, build_string (")"));
/* tem = concat3 (build_string (" ("), tem, build_string (")")); */
XSETCDR (cachelist, tem);
}

View file

@ -314,8 +314,7 @@ extern Lisp_Object unuse_menu_items P_ ((Lisp_Object dummy));
confined to an extended version of this with sections of code below
using it unconditionally. */
#ifndef HAVE_NTGUI
#ifdef USE_GTK
/* gtk just uses utf-8. */
#if defined (USE_GTK) || defined (HAVE_NS)
# define ENCODE_MENU_STRING(str) ENCODE_UTF_8 (str)
#elif defined HAVE_X_I18N
#define ENCODE_MENU_STRING(str) ENCODE_SYSTEM (str)
@ -325,6 +324,56 @@ extern Lisp_Object unuse_menu_items P_ ((Lisp_Object dummy));
#else /* HAVE_NTGUI */
#define ENCODE_MENU_STRING(str) (str)
#endif
#if defined (HAVE_NS) || defined (HAVE_NTGUI)
typedef void * XtPointer;
typedef unsigned char Boolean;
/* Definitions copied from lwlib.h */
enum button_type
{
BUTTON_TYPE_NONE,
BUTTON_TYPE_TOGGLE,
BUTTON_TYPE_RADIO
};
/* This structure is based on the one in ../lwlib/lwlib.h, with unused portions
removed. No term uses these. */
typedef struct _widget_value
{
/* name of widget */
Lisp_Object lname;
char* name;
/* value (meaning depend on widget type) */
char* value;
/* keyboard equivalent. no implications for XtTranslations */
Lisp_Object lkey;
char* key;
/* Help string or nil if none.
GC finds this string through the frame's menu_bar_vector
or through menu_items. */
Lisp_Object help;
/* true if enabled */
Boolean enabled;
/* true if selected */
Boolean selected;
/* The type of a button. */
enum button_type button_type;
#if defined (HAVE_NTGUI)
/* true if menu title */
Boolean title;
#endif
/* Contents of the sub-widgets, also selected slot for checkbox */
struct _widget_value* contents;
/* data passed to callback */
XtPointer call_data;
/* next one in the list */
struct _widget_value* next;
} widget_value;
#endif
/* Macros for dealing with lispy events. */

View file

@ -111,6 +111,10 @@ extern Lisp_Object meta_prefix_char;
extern Lisp_Object Voverriding_local_map;
#ifdef HAVE_NS
extern Lisp_Object Qalt, Qcontrol, Qhyper, Qmeta, Qsuper;
#endif
/* Hash table used to cache a reverse-map to speed up calls to where-is. */
static Lisp_Object where_is_cache;
/* Which keymaps are reverse-stored in the cache. */
@ -2621,6 +2625,41 @@ ascii_sequence_p (seq)
return 1;
}
#ifdef HAVE_NS
int lisp_to_mod(Lisp_Object lmod)
/* -------------------------------------------------------------------------
Convert lisp symbol to emacs modifier code.
------------------------------------------------------------------------- */
{
if (EQ(lmod, Qmeta))
return meta_modifier;
else if (EQ(lmod, Qsuper))
return super_modifier;
else if (EQ(lmod, Qcontrol))
return ctrl_modifier;
else if (EQ(lmod, Qalt))
return alt_modifier;
else if (EQ(lmod, Qhyper))
return hyper_modifier;
return 0;
}
/* Return non-zero if SEQ starts w/a char modified by given modifier only. */
static int
modifier_sequence_p (Lisp_Object seq, Lisp_Object modifier)
{
Lisp_Object idx, elt;
if (XINT (Flength (seq)) == 0)
return 0;
XSETFASTINT(idx, 0);
elt = Faref(seq, idx);
return (XUINT(elt) & (CHAR_MODIFIER_MASK ^ shift_modifier))
== lisp_to_mod(modifier);
}
#endif
/* where-is - finding a command in a set of keymaps. */
@ -2803,6 +2842,14 @@ where_is_internal (definition, keymaps, firstonly, noindirect, no_remap)
we find. */
if (EQ (firstonly, Qnon_ascii))
RETURN_UNGCPRO (sequence);
#ifdef HAVE_NS
/* respond to modifier preference */
else if ((EQ (firstonly, Qalt) || EQ (firstonly, Qcontrol)
|| EQ (firstonly, Qhyper) || EQ (firstonly, Qmeta)
|| EQ (firstonly, Qsuper)))
if (modifier_sequence_p(sequence, firstonly))
RETURN_UNGCPRO (sequence);
#endif
else if (!NILP (firstonly) && ascii_sequence_p (sequence))
RETURN_UNGCPRO (sequence);
@ -2836,6 +2883,10 @@ If KEYMAP is a list of keymaps, search only those keymaps.
If optional 3rd arg FIRSTONLY is non-nil, return the first key sequence found,
rather than a list of all possible key sequences.
#ifdef HAVE_NS
If FIRSTONLY is the symbol for a modifier key, return the first binding found,
that is modified by that modifier only.
#endif
If FIRSTONLY is the symbol `non-ascii', return the first binding found,
no matter what it is.
If FIRSTONLY has another non-nil value, prefer sequences of ASCII characters
@ -2909,10 +2960,19 @@ remapped command in the returned list. */)
for (i = n - 1; i >= 0; --i)
if (EQ (shadow_lookup (keymaps, defns[i], Qnil), definition))
{
if (ascii_sequence_p (defns[i]))
break;
else if (j < 0)
j = i;
#ifdef HAVE_NS
if ((EQ (firstonly, Qalt) || EQ (firstonly, Qcontrol)
|| EQ (firstonly, Qhyper) || EQ (firstonly, Qmeta)
|| EQ (firstonly, Qsuper))
&& modifier_sequence_p(defns[i], firstonly))
break;
else if (EQ (firstonly, Qt) && ascii_sequence_p (defns[i]))
#else
if (ascii_sequence_p (defns[i]))
#endif
break;
else if (j < 0)
j = i;
}
result = i >= 0 ? defns[i] : (j >= 0 ? defns[j] : Qnil);

View file

@ -28,6 +28,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define P_(proto) ()
#endif
#ifdef NS_IMPL_GNUSTEP
/* This conflicts with functions in the GNUstep libraries. */
#define hash_remove emacs_hash_remove
#endif /* NS_IMPL_GNUSTEP */
#if 0
/* Define this temporarily to hunt a bug. If defined, the size of
strings is redundantly recorded in sdata structures so that it can
@ -157,7 +162,7 @@ extern void die P_((const char *, const char *, int)) NO_RETURN;
#endif
/* Let's USE_LSB_TAG on systems where we know malloc returns mult-of-8. */
#if defined GNU_MALLOC || defined DOUG_LEA_MALLOC || defined __GLIBC__ || defined MAC_OSX
#if defined GNU_MALLOC || defined DOUG_LEA_MALLOC || defined __GLIBC__ || defined MAC_OSX || defined(NS_IMPL_COCOA)
/* We also need to be able to specify mult-of-8 alignment on static vars. */
# if defined DECL_ALIGN
/* We currently do not support USE_LSB_TAG with a union Lisp_Object. */

View file

@ -4095,7 +4095,7 @@ init_lread ()
}
#endif
#if (!(defined(WINDOWSNT) || (defined(HAVE_CARBON))))
#if (!(defined(WINDOWSNT) || (defined(HAVE_CARBON)) || (defined(HAVE_NS))))
/* When Emacs is invoked over network shares on NT, PATH_LOADSEARCH is
almost never correct, thereby causing a warning to be printed out that
confuses users. Since PATH_LOADSEARCH is always overridden by the
@ -4125,7 +4125,7 @@ init_lread ()
}
}
}
#endif /* !(WINDOWSNT || HAVE_CARBON) */
#endif /* !(WINDOWSNT || HAVE_CARBON || HAVE_NS) */
/* If the EMACSLOADPATH environment variable is set, use its value.
This doesn't apply if we're dumping. */

View file

@ -36,6 +36,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include "xterm.h"
#endif
#ifdef HAVE_NS
#include "nsterm.h"
#endif
#ifdef USE_GTK
#include "gtkutil.h"
#endif
@ -440,7 +444,7 @@ single_menu_item (key, item, dummy, skp_v)
XVECTOR (item_properties)->contents[ITEM_PROPERTY_SELECTED],
XVECTOR (item_properties)->contents[ITEM_PROPERTY_HELP]);
#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NTGUI)
#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS) || defined (HAVE_NTGUI)
/* Display a submenu using the toolkit. */
if (! (NILP (map) || NILP (enabled)))
{
@ -580,7 +584,7 @@ parse_single_submenu (item_key, item_name, maps)
}
#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NTGUI)
#if defined (USE_X_TOOLKIT) || defined (USE_GTK) || defined (HAVE_NS) || defined (HAVE_NTGUI)
/* Allocate a widget_value, blocking input. */
@ -956,7 +960,71 @@ find_and_call_menu_selection (f, menu_bar_items_used, vector, client_data)
}
}
#endif /* USE_X_TOOLKIT || USE_GTK || HAVE_NTGUI */
#endif /* USE_X_TOOLKIT || USE_GTK || HAVE_NS || HAVE_NTGUI */
#ifdef HAVE_NS
/* As above, but return the menu selection instead of storing in kb buffer.
If keymaps==1, return full prefixes to selection. */
Lisp_Object
find_and_return_menu_selection (FRAME_PTR f, int keymaps, void *client_data)
{
Lisp_Object prefix, entry;
int i;
Lisp_Object *subprefix_stack;
int submenu_depth = 0;
prefix = entry = Qnil;
i = 0;
subprefix_stack =
(Lisp_Object *)alloca(menu_items_used * sizeof (Lisp_Object));
while (i < menu_items_used)
{
if (EQ (XVECTOR (menu_items)->contents[i], Qnil))
{
subprefix_stack[submenu_depth++] = prefix;
prefix = entry;
i++;
}
else if (EQ (XVECTOR (menu_items)->contents[i], Qlambda))
{
prefix = subprefix_stack[--submenu_depth];
i++;
}
else if (EQ (XVECTOR (menu_items)->contents[i], Qt))
{
prefix
= XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX];
i += MENU_ITEMS_PANE_LENGTH;
}
/* Ignore a nil in the item list.
It's meaningful only for dialog boxes. */
else if (EQ (XVECTOR (menu_items)->contents[i], Qquote))
i += 1;
else
{
entry
= XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_VALUE];
if ((int) (EMACS_INT)client_data == i)
{
if (keymaps != 0)
{
int j;
entry = Fcons (entry, Qnil);
if (!NILP (prefix))
entry = Fcons (prefix, entry);
for (j = submenu_depth - 1; j >= 0; j--)
if (!NILP (subprefix_stack[j]))
entry = Fcons (subprefix_stack[j], entry);
}
return entry;
}
i += MENU_ITEMS_ITEM_LENGTH;
}
}
}
#endif
void
syms_of_menu ()

2668
src/nsfns.m Normal file

File diff suppressed because it is too large Load diff

208
src/nsgui.h Normal file
View file

@ -0,0 +1,208 @@
/* Definitions and headers for communication on the NeXT/Open/GNUstep API.
Copyright (C) 1995, 2005, 2008 Free Software Foundation, Inc.
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, 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
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. */
#ifndef __NSGUI_H__
#define __NSGUI_H__
/* this gets included from a couple of the plain (non-NS) .c files */
#ifdef __OBJC__
#ifdef NS_IMPL_COCOA
#ifdef Z
#warning "Z is defined. If you get a later parse error in a header, check that buffer.h or other files #define-ing Z are not included."
#endif /* Z */
#define Cursor FooFoo
#undef init_process
#endif /* NS_IMPL_COCOA */
#ifdef NS_IMPL_GNUSTEP
#undef hash_remove
#endif
#import <AppKit/AppKit.h>
#ifdef NS_IMPL_GNUSTEP
#define hash_remove emacs_hash_remove
#endif
#ifdef NS_IMPL_COCOA
#undef Cursor
#define init_process emacs_init_process
#endif /* NS_IMPL_COCOA */
#import <Foundation/NSDistantObject.h>
#ifdef NS_IMPL_COCOA
#include <AvailabilityMacros.h>
#endif /* NS_IMPL_COCOA */
#endif /* __OBJC__ */
/* menu-related */
#define free_widget_value(wv) xfree (wv)
#define malloc_widget_value() ((widget_value *) memset (xmalloc \
(sizeof (widget_value)), 0, sizeof (widget_value)))
/* Emulate XCharStruct. */
typedef struct _XCharStruct
{
int rbearing;
int lbearing;
int width;
int ascent;
int descent;
} XCharStruct;
/* 23: Fake tructure from Xlib.h to represent two-byte characters. */
#ifndef __OBJC__
typedef unsigned short unichar;
#endif
typedef unichar XChar2b;
#define STORE_XCHAR2B(chp, b1, b2) \
(*(chp) = ((XChar2b)((((b1) & 0x00ff) << 8) | ((b2) & 0x00ff))))
#define XCHAR2B_BYTE1(chp) \
(((*chp) & 0xff00) >> 8)
#define XCHAR2B_BYTE2(chp) \
((*chp) & 0x00ff)
#define FACE_DEFAULT (~0)
/* PENDING: xfaces requires these structures, but the question is are we
forced to use them? */
typedef struct _XGCValues
{
#ifdef __OBJC__
NSColor *foreground;
NSColor *background;
struct ns_font *font;
#else
void *foreground;
void *background;
void *font;
#endif
} XGCValues;
typedef XGCValues * GC;
#define GCForeground 0x01
#define GCBackground 0x02
#define GCFont 0x03
#ifdef __OBJC__
typedef id Pixmap;
#else
typedef void *Pixmap;
#endif
#ifdef __OBJC__
typedef NSCursor * Cursor;
#else
typedef void *Cursor;
#endif
#define No_Cursor (0)
#ifdef __OBJC__
typedef NSColor * Color;
#else
typedef void * Color;
#endif
typedef int Window;
typedef int Display;
/* Xism */
typedef Lisp_Object XrmDatabase;
/* 23: some sort of attempt to normalize rectangle handling.. seems a bit much
for what is accomplished */
typedef struct {
int x, y;
unsigned width, height;
} XRectangle;
#ifndef __OBJC__
typedef struct _NSPoint { float x, y; } NSPoint;
typedef struct _NSSize { float width, height; } NSSize;
typedef struct _NSRect { NSPoint origin; NSSize size; } NSRect;
#endif
#define NativeRectangle struct _NSRect
#define CONVERT_TO_XRECT(xr, nr) \
((xr).x = (nr).origin.x, \
(xr).y = (nr).origin.y, \
(xr).width = (nr).size.width, \
(xr).height = (nr).size.height)
#define CONVERT_FROM_XRECT(xr, nr) \
((nr).origin.x = (xr).x, \
(nr).origin.y = (xr).y, \
(nr).size.width = (xr).width, \
(nr).size.height = (xr).height)
#define STORE_NATIVE_RECT(nr, px, py, pwidth, pheight) \
((nr).origin.x = (px), \
(nr).origin.y = (py), \
(nr).size.width = (pwidth), \
(nr).size.height = (pheight))
/* This stuff needed by frame.c. */
#define ForgetGravity 0
#define NorthWestGravity 1
#define NorthGravity 2
#define NorthEastGravity 3
#define WestGravity 4
#define CenterGravity 5
#define EastGravity 6
#define SouthWestGravity 7
#define SouthGravity 8
#define SouthEastGravity 9
#define StaticGravity 10
#define NoValue 0x0000
#define XValue 0x0001
#define YValue 0x0002
#define WidthValue 0x0004
#define HeightValue 0x0008
#define AllValues 0x000F
#define XNegative 0x0010
#define YNegative 0x0020
#define USPosition (1L << 0) /* user specified x, y */
#define USSize (1L << 1) /* user specified width, height */
#define PPosition (1L << 2) /* program specified position */
#define PSize (1L << 3) /* program specified size */
#define PMinSize (1L << 4) /* program specified minimum size */
#define PMaxSize (1L << 5) /* program specified maximum size */
#define PResizeInc (1L << 6) /* program specified resize increments */
#define PAspect (1L << 7) /* program specified min, max aspect ratios */
#define PBaseSize (1L << 8) /* program specified base for incrementing */
#define PWinGravity (1L << 9) /* program specified window gravity */
#endif /* __NSGUI_H__ */

480
src/nsimage.m Normal file
View file

@ -0,0 +1,480 @@
/* Image support for the NeXT/Open/GNUstep and MacOSX window system.
Copyright (C) 1989, 1992, 1993, 1994, 2005, 2006, 2008,
Free Software Foundation, Inc.
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, 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
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.
Originally by Carl Edman
Updated by Christian Limpach (chris@nice.ch)
OpenStep/Rhapsody port by Scott Bender (sbender@harmony-ds.com)
MacOSX/Aqua port by Christophe de Dinechin (descubes@earthlink.net)
GNUstep port and post-20 update by Adrian Robert (arobert@cogsci.ucsd.edu)
*/
#include "config.h"
#include "lisp.h"
#include "dispextern.h"
#include "nsterm.h"
#include "frame.h"
extern Lisp_Object QCfile, QCdata;
/* call tracing */
#if 0
int image_trace_num = 0;
#define NSTRACE(x) fprintf (stderr, "%s:%d: [%d] " #x "\n", \
__FILE__, __LINE__, ++image_trace_num)
#else
#define NSTRACE(x)
#endif
/* ==========================================================================
C interface. This allows easy calling from C files. We could just
compile everything as Objective-C, but that might mean slower
compilation and possible difficulties on some platforms..
========================================================================== */
void *
ns_image_from_XBM (unsigned char *bits, int width, int height)
{
NSTRACE (ns_image_from_XBM);
return [[EmacsImage alloc] initFromXBM: bits
width: width height: height
flip: YES];
}
void *
ns_image_for_XPM (int width, int height, int depth)
{
NSTRACE (ns_image_for_XPM);
return [[EmacsImage alloc] initForXPMWithDepth: depth
width: width height: height];
}
void *
ns_image_from_file (Lisp_Object file)
{
NSTRACE (ns_image_from_bitmap_file);
return [EmacsImage allocInitFromFile: file];
}
int
ns_load_image (struct frame *f, struct image *img,
Lisp_Object spec_file, Lisp_Object spec_data)
{
NSTRACE (ns_load_image);
EmacsImage *eImg;
NSSize size;
if (NILP (spec_data))
{
eImg = [EmacsImage allocInitFromFile: spec_file];
}
else
{
NSData *data = [NSData dataWithBytes: XSTRING (spec_data)->data
length: SBYTES (spec_data)];
eImg = [[EmacsImage alloc] initWithData: data];
[eImg setPixmapData];
}
if (eImg == nil)
{
add_to_log ("Unable to load image %s", img->spec, Qnil);
return 0;
}
size = [eImg size];
img->width = size.width;
img->height = size.height;
/* 4) set img->pixmap = emacsimage */
img->pixmap = eImg;
return 1;
}
int
ns_image_width (void *img)
{
return [(id)img size].width;
}
int
ns_image_height (void *img)
{
return [(id)img size].height;
}
unsigned long
ns_get_pixel (void *img, int x, int y)
{
return [(EmacsImage *)img getPixelAtX: x Y: y];
}
void
ns_put_pixel (void *img, int x, int y, unsigned long argb)
{
unsigned char alpha = (argb >> 24) & 0xFF;
if (alpha == 0)
alpha = 0xFF;
[(EmacsImage *)img setPixelAtX: x Y: y toRed: (argb >> 16) & 0xFF
green: (argb >> 8) & 0xFF blue: (argb & 0xFF) alpha: alpha];
}
void
ns_set_alpha (void *img, int x, int y, unsigned char a)
{
[(EmacsImage *)img setAlphaAtX: x Y: y to: a];
}
/* ==========================================================================
Class supporting bitmaps and images of various sorts.
========================================================================== */
@implementation EmacsImage
static EmacsImage *ImageList = nil;
+ allocInitFromFile: (Lisp_Object)file
{
EmacsImage *image = ImageList;
Lisp_Object found;
/* look for an existing image of the same name */
while (image != nil &&
[[image name] compare: [NSString stringWithUTF8String: SDATA (file)]]
!= NSOrderedSame)
image = [image imageListNext];
if (image != nil)
{
[image reference];
return image;
}
/* Search bitmap-file-path for the file, if appropriate. */
found = x_find_image_file (file);
if (!STRINGP (found))
return nil;
image = [[EmacsImage alloc] initByReferencingFile:
[NSString stringWithUTF8String: SDATA (found)]];
if ([image bestRepresentationForDevice: nil] == nil)
{
[image release];
return nil;
}
[image setName: [NSString stringWithUTF8String: SDATA (file)]];
[image reference];
ImageList = [image imageListSetNext: ImageList];
return image;
}
- reference
{
refCount++;
return self;
}
- imageListSetNext: (id)arg
{
imageListNext = arg;
return self;
}
- imageListNext
{
return imageListNext;
}
- (void)dealloc
{
id list = ImageList;
if (refCount > 1)
{
refCount--;
return;
}
[stippleMask release];
if (list == self)
ImageList = imageListNext;
else
{
while (list != nil && [list imageListNext] != self)
list = [list imageListNext];
[list imageListSetNext: imageListNext];
}
[super dealloc];
}
- initFromXBM: (unsigned char *)bits width: (int)w height: (int)h
flip: (BOOL)flip
{
return [self initFromSkipXBM: bits width: w height: h flip: flip length: 0];
}
- initFromSkipXBM: (unsigned char *)bits width: (int)w height: (int)h
flip: (BOOL)flip length: (int)length;
{
int bpr = (w + 7) / 8;
unsigned char *planes[5];
[self initWithSize: NSMakeSize (w, h)];
bmRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: NULL
pixelsWide: w pixelsHigh: h
bitsPerSample: 8 samplesPerPixel: 4
hasAlpha: YES isPlanar: YES
colorSpaceName: NSCalibratedRGBColorSpace
bytesPerRow: w bitsPerPixel: 0];
[bmRep getBitmapDataPlanes: planes];
{
/* pull bits out to set the (bytewise) alpha mask */
int i, j, k;
unsigned char *s = bits;
unsigned char *alpha = planes[3];
unsigned char swt[16] = {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13,
3, 11, 7, 15};
unsigned char c, bitPat;
for (j = 0; j < h; j++)
for (i = 0; i < bpr; i++)
{
if (length)
{
unsigned char s1, s2;
while (*s++ != 'x' && s < bits + length);
if (s >= bits + length)
{
[bmRep release];
return nil;
}
#define hexchar(x) (isdigit (x) ? x - '0' : x - 'a' + 10)
s1 = *s++;
s2 = *s++;
c = hexchar (s1) * 0x10 + hexchar (s2);
}
else
c = *s++;
bitPat = flip ? swt[c >> 4] | (swt[c & 0xf] << 4) : c ^ 255;
for (k =0; k<8; k++)
{
*alpha++ = (bitPat & 0x80) ? 0xff : 0;
bitPat <<= 1;
}
}
}
[self addRepresentation: bmRep];
bzero (planes[0], w*h);
bzero (planes[1], w*h);
bzero (planes[2], w*h);
[self setXBMColor: [NSColor blackColor]];
return self;
}
/* Set color for a bitmap image (see initFromSkipXBM). Note that the alpha
is used as a mask, so we just memset the entire array. */
- setXBMColor: (NSColor *)color
{
NSSize s = [self size];
int len = (int) s.width * s.height;
unsigned char *planes[5];
float r, g, b, a;
NSColor *rgbColor;
if (bmRep == nil || color == nil)
return;
if ([color colorSpaceName] != NSCalibratedRGBColorSpace)
rgbColor = [color colorUsingColorSpaceName: NSCalibratedRGBColorSpace];
else
rgbColor = color;
[rgbColor getRed: &r green: &g blue: &b alpha: &a];
[bmRep getBitmapDataPlanes: planes];
/* we used to just do this, but Cocoa seems to have a bug when rendering
an alpha-masked image onto a dark background where it bloats the mask */
/* memset (planes[0..2], r, g, b*0xff, len); */
{
int i, len = s.width*s.height;
int rr = r * 0xff, gg = g * 0xff, bb = b * 0xff;
for (i =0; i<len; i++)
if (planes[3][i] != 0)
{
planes[0][i] = rr;
planes[1][i] = gg;
planes[2][i] = bb;
}
}
}
- initForXPMWithDepth: (int)depth width: (int)width height: (int)height
{
NSSize s = {width, height};
int i;
[self initWithSize: s];
bmRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: NULL
pixelsWide: width pixelsHigh: height
/* keep things simple for now */
bitsPerSample: 8 samplesPerPixel: 4 /*RGB+A*/
hasAlpha: YES isPlanar: YES
colorSpaceName: NSCalibratedRGBColorSpace
bytesPerRow: width bitsPerPixel: 0];
[bmRep getBitmapDataPlanes: pixmapData];
for (i =0; i<4; i++)
bzero (pixmapData[i], width*height);
[self addRepresentation: bmRep];
return self;
}
/* attempt to pull out pixmap data from a BitmapImageRep; returns NO if fails */
- (void) setPixmapData
{
NSEnumerator *reps;
NSImageRep *rep;
reps = [[self representations] objectEnumerator];
while (rep = (NSImageRep *) [reps nextObject])
{
if ([rep respondsToSelector: @selector (getBitmapDataPlanes:)])
{
bmRep = (NSBitmapImageRep *) rep;
onTiger = [bmRep respondsToSelector: @selector (colorAtX:y:)];
if ([bmRep numberOfPlanes] >= 3)
[bmRep getBitmapDataPlanes: pixmapData];
break;
}
}
}
/* note; this and next work only for image created with initForXPMWithDepth,
initFromSkipXBM, or where setPixmapData was called successfully */
/* return ARGB */
- (unsigned long) getPixelAtX: (int)x Y: (int)y
{
if (bmRep == nil)
return 0;
/* this method is faster but won't work for bitmaps */
if (pixmapData[0] != NULL)
{
int loc = x + y * [self size].width;
return (pixmapData[3][loc] << 24) /* alpha */
| (pixmapData[0][loc] << 16) | (pixmapData[1][loc] << 8)
| (pixmapData[2][loc]);
}
else if (onTiger)
{
NSColor *color = [bmRep colorAtX: x y: y];
float r, g, b, a;
[color getRed: &r green: &g blue: &b alpha: &a];
return ((int)(a * 255.0) << 24)
| ((int)(r * 255.0) << 16) | ((int)(g * 255.0) << 8)
| ((int)(b * 255.0));
}
return 0;
}
- (void) setPixelAtX: (int)x Y: (int)y toRed: (unsigned char)r
green: (unsigned char)g blue: (unsigned char)b
alpha:(unsigned char)a;
{
if (bmRep == nil)
return;
if (pixmapData[0] != NULL)
{
int loc = x + y * [self size].width;
pixmapData[0][loc] = r;
pixmapData[1][loc] = g;
pixmapData[2][loc] = b;
pixmapData[3][loc] = a;
}
else if (onTiger)
{
[bmRep setColor:
[NSColor colorWithCalibratedRed: r green: g blue: b alpha: a]
atX: x y: y];
}
}
- (void) setAlphaAtX: (int) x Y: (int) y to: (unsigned char) a
{
if (bmRep == nil)
return;
if (pixmapData[0] != NULL)
{
int loc = x + y * [self size].width;
pixmapData[3][loc] = a;
}
else if (onTiger)
{
NSColor *color = [bmRep colorAtX: x y: y];
color = [color colorWithAlphaComponent: (a / 255.0)];
[bmRep setColor: color atX: x y: y];
}
}
/* returns a pattern color, which is cached here */
- (NSColor *)stippleMask
{
if (stippleMask == nil)
stippleMask = [[NSColor colorWithPatternImage: self] retain];
return stippleMask;
}
@end

1948
src/nsmenu.m Normal file

File diff suppressed because it is too large Load diff

624
src/nsselect.m Normal file
View file

@ -0,0 +1,624 @@
/* NeXT/Open/GNUstep / MacOSX Cocoa selection processing for emacs.
Copyright (C) 1993, 1994, 2005, 2006, 2008,
Free Software Foundation, Inc.
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, 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
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.
Originally by Carl Edman
Updated by Christian Limpach (chris@nice.ch)
OpenStep/Rhapsody port by Scott Bender (sbender@harmony-ds.com)
MacOSX/Aqua port by Christophe de Dinechin (descubes@earthlink.net)
GNUstep port and post-20 update by Adrian Robert (arobert@cogsci.ucsd.edu)
*/
#include "config.h"
#include "lisp.h"
#include "nsterm.h"
#include "termhooks.h"
#define CUT_BUFFER_SUPPORT
Lisp_Object QPRIMARY, QSECONDARY, QTEXT, QFILE_NAME;
static Lisp_Object Vns_sent_selection_hooks;
static Lisp_Object Vns_lost_selection_hooks;
static Lisp_Object Vselection_alist;
static Lisp_Object Vselection_converter_alist;
/* 23: new */
/* Coding system for communicating with other programs. */
static Lisp_Object Vselection_coding_system;
/* Coding system for the next communicating with other programs. */
static Lisp_Object Vnext_selection_coding_system;
static Lisp_Object Qforeign_selection;
NSString *NXSecondaryPboard;
/* ==========================================================================
Internal utility functions
========================================================================== */
static NSString *
symbol_to_nsstring (Lisp_Object sym)
{
CHECK_SYMBOL (sym);
if (EQ (sym, QPRIMARY)) return NSGeneralPboard;
if (EQ (sym, QSECONDARY)) return NXSecondaryPboard;
if (EQ (sym, QTEXT)) return NSStringPboardType;
return [NSString stringWithUTF8String: XSTRING (XSYMBOL (sym)->xname)->data];
}
static Lisp_Object
ns_string_to_symbol (NSString *t)
{
if ([t isEqualToString: NSGeneralPboard])
return QPRIMARY;
if ([t isEqualToString: NXSecondaryPboard])
return QSECONDARY;
if ([t isEqualToString: NSStringPboardType])
return QTEXT;
if ([t isEqualToString: NSFilenamesPboardType])
return QFILE_NAME;
if ([t isEqualToString: NSTabularTextPboardType])
return QTEXT;
return intern ([t UTF8String]);
}
static Lisp_Object
clean_local_selection_data (Lisp_Object obj)
{
if (CONSP (obj)
&& INTEGERP (XCAR (obj))
&& CONSP (XCDR (obj))
&& INTEGERP (XCAR (XCDR (obj)))
&& NILP (XCDR (XCDR (obj))))
obj = Fcons (XCAR (obj), XCDR (obj));
if (CONSP (obj)
&& INTEGERP (XCAR (obj))
&& INTEGERP (XCDR (obj)))
{
if (XINT (XCAR (obj)) == 0)
return XCDR (obj);
if (XINT (XCAR (obj)) == -1)
return make_number (- XINT (XCDR (obj)));
}
if (VECTORP (obj))
{
int i;
int size = XVECTOR (obj)->size;
Lisp_Object copy;
if (size == 1)
return clean_local_selection_data (XVECTOR (obj)->contents [0]);
copy = Fmake_vector (size, Qnil);
for (i = 0; i < size; i++)
XVECTOR (copy)->contents [i]
= clean_local_selection_data (XVECTOR (obj)->contents [i]);
return copy;
}
return obj;
}
static void
ns_declare_pasteboard (id pb)
{
[pb declareTypes: ns_send_types owner: NSApp];
}
static void
ns_undeclare_pasteboard (id pb)
{
[pb declareTypes: [NSArray array] owner: nil];
}
static void
ns_string_to_pasteboard_internal (id pb, Lisp_Object str, NSString *gtype)
{
if (EQ (str, Qnil))
{
[pb declareTypes: [NSArray array] owner: nil];
}
else
{
char *utfStr;
NSString *type, *nsStr;
NSEnumerator *tenum;
CHECK_STRING (str);
utfStr = XSTRING (str)->data;
nsStr = [NSString stringWithUTF8String: utfStr];
if (gtype == nil)
{
[pb declareTypes: ns_send_types owner: nil];
tenum = [ns_send_types objectEnumerator];
while ( (type = [tenum nextObject]) )
[pb setString: nsStr forType: type];
}
else
{
[pb setString: nsStr forType: gtype];
}
}
}
static Lisp_Object
ns_get_local_selection (Lisp_Object selection_name,
Lisp_Object target_type)
{
Lisp_Object local_value;
Lisp_Object handler_fn, value, type, check;
int count;
local_value = assq_no_quit (selection_name, Vselection_alist);
if (NILP (local_value)) return Qnil;
count = specpdl_ptr - specpdl;
specbind (Qinhibit_quit, Qt);
CHECK_SYMBOL (target_type);
handler_fn = Fcdr (Fassq (target_type, Vselection_converter_alist));
if (!NILP (handler_fn))
value =call3 (handler_fn, selection_name, target_type,
XCAR (XCDR (local_value)));
else
value =Qnil;
unbind_to (count, Qnil);
check =value;
if (CONSP (value) && SYMBOLP (XCAR (value)))
{
type = XCAR (value);
check = XCDR (value);
}
if (STRINGP (check) || VECTORP (check) || SYMBOLP (check)
|| INTEGERP (check) || NILP (value))
return value;
if (CONSP (check)
&& INTEGERP (XCAR (check))
&& (INTEGERP (XCDR (check))||
(CONSP (XCDR (check))
&& INTEGERP (XCAR (XCDR (check)))
&& NILP (XCDR (XCDR (check))))))
return value;
Fsignal (Qquit, Fcons (build_string (
"invalid data returned by selection-conversion function"),
Fcons (handler_fn, Fcons (value, Qnil))));
}
static Lisp_Object
ns_get_foreign_selection (Lisp_Object symbol, Lisp_Object target)
{
id pb;
pb =[NSPasteboard pasteboardWithName: symbol_to_nsstring (symbol)];
return ns_string_from_pasteboard (pb);
}
static void
ns_handle_selection_request (struct input_event *event)
{
id pb =(id)event->x;
NSString *type =(NSString *)event->y;
Lisp_Object selection_name, selection_data, target_symbol, data;
Lisp_Object successful_p, rest;
selection_name =ns_string_to_symbol ([(NSPasteboard *)pb name]);
target_symbol =ns_string_to_symbol (type);
selection_data = assq_no_quit (selection_name, Vselection_alist);
successful_p =Qnil;
if (!NILP (selection_data))
{
data = ns_get_local_selection (selection_name, target_symbol);
if (!NILP (data))
{
if (STRINGP (data))
ns_string_to_pasteboard_internal (pb, data, type);
successful_p =Qt;
}
}
if (!EQ (Vns_sent_selection_hooks, Qunbound))
{
for (rest =Vns_sent_selection_hooks;CONSP (rest); rest =Fcdr (rest))
call3 (Fcar (rest), selection_name, target_symbol, successful_p);
}
}
static void
ns_handle_selection_clear (struct input_event *event)
{
id pb = (id)event->x;
Lisp_Object selection_name, selection_data, rest;
selection_name =ns_string_to_symbol ([(NSPasteboard *)pb name]);
selection_data =assq_no_quit (selection_name, Vselection_alist);
if (NILP (selection_data)) return;
if (EQ (selection_data, Fcar (Vselection_alist)))
Vselection_alist = Fcdr (Vselection_alist);
else
{
for (rest = Vselection_alist; !NILP (rest); rest = Fcdr (rest))
if (EQ (selection_data, Fcar (Fcdr (rest))))
Fsetcdr (rest, Fcdr (Fcdr (rest)));
}
if (!EQ (Vns_lost_selection_hooks, Qunbound))
{
for (rest =Vns_lost_selection_hooks;CONSP (rest); rest =Fcdr (rest))
call1 (Fcar (rest), selection_name);
}
}
/* ==========================================================================
Functions used externally
========================================================================== */
Lisp_Object
ns_string_from_pasteboard (id pb)
{
NSString *type, *str;
const char *utfStr;
type = [pb availableTypeFromArray: ns_return_types];
if (type == nil)
{
Fsignal (Qquit,
Fcons (build_string ("empty or unsupported pasteboard type"),
Qnil));
return Qnil;
}
/* get the string */
if (! (str = [pb stringForType: type]))
{
NSData *data = [pb dataForType: type];
if (data != nil)
str = [[NSString alloc] initWithData: data
encoding: NSUTF8StringEncoding];
if (str != nil)
{
[str autorelease];
}
else
{
Fsignal (Qquit,
Fcons (build_string ("pasteboard doesn't contain valid data"),
Qnil));
return Qnil;
}
}
/* assume UTF8 */
NS_DURING
{
/* EOL conversion: PENDING- is this too simple? */
NSMutableString *mstr = [[str mutableCopy] autorelease];
[mstr replaceOccurrencesOfString: @"\r\n" withString: @"\n"
options: NSLiteralSearch range: NSMakeRange (0, [mstr length])];
[mstr replaceOccurrencesOfString: @"\r" withString: @"\n"
options: NSLiteralSearch range: NSMakeRange (0, [mstr length])];
utfStr = [mstr UTF8String];
if (!utfStr)
utfStr = [mstr cString];
}
NS_HANDLER
{
message1 ("ns_string_from_pasteboard: UTF8String failed\n");
utfStr = [str lossyCString];
}
NS_ENDHANDLER
return build_string (utfStr);
}
void
ns_string_to_pasteboard (id pb, Lisp_Object str)
{
ns_string_to_pasteboard_internal (pb, str, nil);
}
/* ==========================================================================
Lisp Defuns
========================================================================== */
DEFUN ("ns-own-selection-internal", Fns_own_selection_internal,
Sns_own_selection_internal, 2, 2, 0, "Assert a selection.")
(selection_name, selection_value)
Lisp_Object selection_name, selection_value;
{
id pb;
Lisp_Object old_value, new_value;
check_ns ();
CHECK_SYMBOL (selection_name);
if (NILP (selection_value))
error ("selection-value may not be nil.");
pb =[NSPasteboard pasteboardWithName: symbol_to_nsstring (selection_name)];
ns_declare_pasteboard (pb);
old_value =assq_no_quit (selection_name, Vselection_alist);
new_value = Fcons (selection_name, Fcons (selection_value, Qnil));
if (NILP (old_value))
Vselection_alist =Fcons (new_value, Vselection_alist);
else
Fsetcdr (old_value, Fcdr (new_value));
/* XXX An evil hack, but a necessary one I fear XXX */
{
struct input_event ev;
ev.kind = SELECTION_REQUEST_EVENT;
ev.modifiers = 0;
ev.code = 0;
ev.x = (int)pb;
ev.y = (int)NSStringPboardType;
ns_handle_selection_request (&ev);
}
return selection_value;
}
DEFUN ("ns-disown-selection-internal", Fns_disown_selection_internal,
Sns_disown_selection_internal, 1, 2, 0,
"If we own the selection SELECTION, disown it.")
(selection_name, time)
Lisp_Object selection_name, time;
{
id pb;
check_ns ();
CHECK_SYMBOL (selection_name);
if (NILP (assq_no_quit (selection_name, Vselection_alist))) return Qnil;
pb =[NSPasteboard pasteboardWithName: symbol_to_nsstring (selection_name)];
ns_undeclare_pasteboard (pb);
return Qt;
}
DEFUN ("ns-selection-exists-p", Fns_selection_exists_p, Sns_selection_exists_p,
0, 1, 0, "Whether there is an owner for the given selection.\n\
The arg should be the name of the selection in question, typically one of\n\
the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.\n\
\(Those are literal upper-case symbol names.)\n\
For convenience, the symbol nil is the same as `PRIMARY',\n\
and t is the same as `SECONDARY'.)")
(selection)
Lisp_Object selection;
{
id pb;
NSArray *types;
check_ns ();
CHECK_SYMBOL (selection);
if (EQ (selection, Qnil)) selection = QPRIMARY;
if (EQ (selection, Qt)) selection = QSECONDARY;
pb =[NSPasteboard pasteboardWithName: symbol_to_nsstring (selection)];
types =[pb types];
return ([types count] == 0) ? Qnil : Qt;
}
DEFUN ("ns-selection-owner-p", Fns_selection_owner_p, Sns_selection_owner_p,
0, 1, 0,
"Whether the current Emacs process owns the given selection.\n\
The arg should be the name of the selection in question, typically one of\n\
the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.\n\
\(Those are literal upper-case symbol names.)\n\
For convenience, the symbol nil is the same as `PRIMARY',\n\
and t is the same as `SECONDARY'.)")
(selection)
Lisp_Object selection;
{
check_ns ();
CHECK_SYMBOL (selection);
if (EQ (selection, Qnil)) selection = QPRIMARY;
if (EQ (selection, Qt)) selection = QSECONDARY;
return (NILP (Fassq (selection, Vselection_alist))) ? Qnil : Qt;
}
DEFUN ("ns-get-selection-internal", Fns_get_selection_internal,
Sns_get_selection_internal, 2, 2, 0,
"Return text selected from some pasteboard.\n\
SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.\n\
\(Those are literal upper-case symbol names.)\n\
TYPE is the type of data desired, typically `STRING'.")
(selection_name, target_type)
Lisp_Object selection_name, target_type;
{
Lisp_Object val;
check_ns ();
CHECK_SYMBOL (selection_name);
CHECK_SYMBOL (target_type);
val = ns_get_local_selection (selection_name, target_type);
if (NILP (val))
val = ns_get_foreign_selection (selection_name, target_type);
if (CONSP (val) && SYMBOLP (Fcar (val)))
{
val = Fcdr (val);
if (CONSP (val) && NILP (Fcdr (val)))
val = Fcar (val);
}
val = clean_local_selection_data (val);
return val;
}
#ifdef CUT_BUFFER_SUPPORT
DEFUN ("ns-get-cut-buffer-internal", Fns_get_cut_buffer_internal,
Sns_get_cut_buffer_internal, 1, 1, 0,
"Returns the value of the named cut buffer.")
(buffer)
Lisp_Object buffer;
{
id pb;
check_ns ();
pb =[NSPasteboard pasteboardWithName: symbol_to_nsstring (buffer)];
return ns_string_from_pasteboard (pb);
}
DEFUN ("ns-rotate-cut-buffers-internal", Fns_rotate_cut_buffers_internal,
Sns_rotate_cut_buffers_internal, 1, 1, 0,
"Rotate the values of the cut buffers by the given number of steps;\n\
positive means move values forward, negative means backward. CURRENTLY NOT IMPLEMENTED UNDER NeXTstep.")
(n)
Lisp_Object n;
{
/* XXX This function is unimplemented under NeXTstep XXX */
Fsignal (Qquit, Fcons (build_string (
"Warning: ns-rotate-cut-buffers-internal not implemented\n"), Qnil));
return Qnil;
}
DEFUN ("ns-store-cut-buffer-internal", Fns_store_cut_buffer_internal,
Sns_store_cut_buffer_internal, 2, 2, 0,
"Sets the value of the named cut buffer (typically CUT_BUFFER0).")
(buffer, string)
Lisp_Object buffer, string;
{
id pb;
check_ns ();
pb =[NSPasteboard pasteboardWithName: symbol_to_nsstring (buffer)];
ns_string_to_pasteboard (pb, string);
return Qnil;
}
#endif
void
nxatoms_of_nsselect (void)
{
NXSecondaryPboard = @"Selection";
}
void
syms_of_nsselect (void)
{
QPRIMARY = intern ("PRIMARY"); staticpro (&QPRIMARY);
QSECONDARY = intern ("SECONDARY"); staticpro (&QSECONDARY);
QTEXT = intern ("TEXT"); staticpro (&QTEXT);
QFILE_NAME = intern ("FILE_NAME"); staticpro (&QFILE_NAME);
defsubr (&Sns_disown_selection_internal);
defsubr (&Sns_get_selection_internal);
defsubr (&Sns_own_selection_internal);
defsubr (&Sns_selection_exists_p);
defsubr (&Sns_selection_owner_p);
#ifdef CUT_BUFFER_SUPPORT
defsubr (&Sns_get_cut_buffer_internal);
defsubr (&Sns_rotate_cut_buffers_internal);
defsubr (&Sns_store_cut_buffer_internal);
#endif
Vselection_alist = Qnil;
staticpro (&Vselection_alist);
DEFVAR_LISP ("ns-sent-selection-hooks", &Vns_sent_selection_hooks,
"A list of functions to be called when Emacs answers a selection request.\n\
The functions are called with four arguments:\n\
- the selection name (typically `PRIMARY', `SECONDARY', or `CLIPBOARD');\n\
- the selection-type which Emacs was asked to convert the\n\
selection into before sending (for example, `STRING' or `LENGTH');\n\
- a flag indicating success or failure for responding to the request.\n\
We might have failed (and declined the request) for any number of reasons,\n\
including being asked for a selection that we no longer own, or being asked\n\
to convert into a type that we don't know about or that is inappropriate.\n\
This hook doesn't let you change the behavior of Emacs's selection replies,\n\
it merely informs you that they have happened.");
Vns_sent_selection_hooks = Qnil;
DEFVAR_LISP ("selection-converter-alist", &Vselection_converter_alist,
"An alist associating X Windows selection-types with functions.\n\
These functions are called to convert the selection, with three args:\n\
the name of the selection (typically `PRIMARY', `SECONDARY', or `CLIPBOARD');\n\
a desired type to which the selection should be converted;\n\
and the local selection value (whatever was given to `x-own-selection').\n\
\n\
The function should return the value to send to the X server\n\
\(typically a string). A return value of nil\n\
means that the conversion could not be done.\n\
A return value which is the symbol `NULL'\n\
means that a side-effect was executed,\n\
and there is no meaningful selection value.");
Vselection_converter_alist = Qnil;
DEFVAR_LISP ("ns-lost-selection-hooks", &Vns_lost_selection_hooks,
"A list of functions to be called when Emacs loses an X selection.\n\
\(This happens when some other X client makes its own selection\n\
or when a Lisp program explicitly clears the selection.)\n\
The functions are called with one argument, the selection type\n\
\(a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD').");
Vns_lost_selection_hooks = Qnil;
/* 23: { */
DEFVAR_LISP ("selection-coding-system", &Vselection_coding_system,
doc: /* Coding system for communicating with other programs.
When sending or receiving text via cut_buffer, selection, and clipboard,
the text is encoded or decoded by this coding system.
The default value is determined by the system script code. */);
Vselection_coding_system = Qnil;
DEFVAR_LISP ("next-selection-coding-system", &Vnext_selection_coding_system,
doc: /* Coding system for the next communication with other programs.
Usually, `selection-coding-system' is used for communicating with
other programs. But, if this variable is set, it is used for the
next communication only. After the communication, this variable is
set to nil. */);
Vnext_selection_coding_system = Qnil;
Qforeign_selection = intern ("foreign-selection");
staticpro (&Qforeign_selection);
/* } */
}

827
src/nsterm.h Normal file
View file

@ -0,0 +1,827 @@
/* Definitions and headers for communication with NeXT/Open/GNUstep API.
Copyright (C) 1989, 1993, 2005, 2008 Free Software Foundation, Inc.
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, 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
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. */
#include "dispextern.h"
#include "frame.h"
#include "character.h"
#include "font.h"
#ifdef HAVE_NS
#ifdef __OBJC__
/* ==========================================================================
The Emacs application
========================================================================== */
/* We override sendEvent: as a means to stop/start the event loop */
@interface EmacsApp : NSApplication
{
}
- (void)sendEvent: (NSEvent *)theEvent;
- (void)showPreferencesWindow: (id)sender;
@end
/* ==========================================================================
The main Emacs view
========================================================================== */
@class EmacsToolbar;
@interface EmacsView : NSView <NSTextInput>
{
char *old_title;
BOOL windowClosing;
NSString *workingText;
BOOL processingCompose;
@public
struct frame *emacsframe;
int rows, cols;
int scrollbarsNeedingUpdate;
EmacsToolbar *toolbar;
}
/* AppKit-side interface */
- menuDown: sender;
- toolbarClicked: (id)item;
- toggleToolbar: (id)sender;
- (void)keyDown: (NSEvent *)theEvent;
- (void)mouseDown: (NSEvent *)theEvent;
- (void)mouseUp: (NSEvent *)theEvent;
- setMiniwindowImage: (BOOL)setMini;
/* Emacs-side interface */
- initFrameFromEmacs: (struct frame *) f;
- (void) setRows: (int) r andColumns: (int) c;
- (void) setWindowClosing: (BOOL)closing;
- (EmacsToolbar *) toolbar;
- (void) deleteWorkingText;
@end
/* Small utility used for processing resize events under Cocoa. */
@interface EmacsWindow : NSWindow
{
NSPoint grabOffset;
}
@end
/* ==========================================================================
The main menu implementation
========================================================================== */
@interface EmacsMenu : NSMenu
{
struct frame *frame;
unsigned long keyEquivModMask;
}
- initWithTitle: (NSString *)title frame: (struct frame *)f;
- (void)setFrame: (struct frame *)f;
- (void)menuNeedsUpdate: (NSMenu *)menu; /* (delegate method) */
- (NSString *)parseKeyEquiv: (char *)key;
- (id <NSMenuItem>)addItemWithWidgetValue: (void *)wvptr;
- (void)fillWithWidgetValue: (void *)wvptr;
- (EmacsMenu *)addSubmenuWithTitle: (char *)title forFrame: (struct frame *)f;
- (void) clear;
- (Lisp_Object)runMenuAt: (NSPoint)p forFrame: (struct frame *)f
keymaps: (int)keymaps;
@end
/* ==========================================================================
Toolbar
========================================================================== */
@class EmacsImage;
@interface EmacsToolbar : NSToolbar
{
EmacsView *emacsView;
NSMutableDictionary *identifierToItem;
NSMutableArray *activeIdentifiers;
NSArray *prevIdentifiers;
unsigned long enablement, prevEnablement;
}
- initForView: (EmacsView *)view withIdentifier: (NSString *)identifier;
- (void) clearActive;
- (BOOL) changed;
- (void) addDisplayItemWithImage: (EmacsImage *)img idx: (int)idx
helpText: (char *)help
enabled: (BOOL)enabled;
/* delegate methods */
- (NSToolbarItem *)toolbar: (NSToolbar *)toolbar
itemForItemIdentifier: (NSString *)itemIdentifier
willBeInsertedIntoToolbar: (BOOL)flag;
- (NSArray *)toolbarDefaultItemIdentifiers: (NSToolbar *)toolbar;
- (NSArray *)toolbarAllowedItemIdentifiers: (NSToolbar *)toolbar;
@end
/* ==========================================================================
Message / question windows
========================================================================== */
@interface EmacsDialogPanel : NSPanel
{
NSTextField *command;
NSTextField *title;
NSMatrix *matrix;
int rows, cols;
}
- initFromContents: (Lisp_Object)menu isQuestion: (BOOL)isQ;
- addButton: (char *)str value: (Lisp_Object)val row: (int)row;
- addString: (char *)str row: (int)row;
- addSplit;
- (Lisp_Object)runDialogAt: (NSPoint)p;
@end
@interface EmacsTooltip : NSObject
{
NSWindow *win;
NSTextField *textField;
NSTimer *timer;
}
- init;
- (void) setText: (char *)text;
- (void) showAtX: (int)x Y: (int)y for: (int)seconds;
- (void) hide;
- (BOOL) isActive;
- (NSRect) frame;
@end
/* ==========================================================================
File open/save panels
This and next override methods to work around OS X behavior of
restarting application loop when user dismisses panel.
========================================================================== */
@interface EmacsSavePanel : NSSavePanel
{
}
@end
@interface EmacsOpenPanel : NSOpenPanel
{
}
@end
@interface EmacsFileDelegate : NSObject
{
}
- (BOOL)panel: (id)sender isValidFilename: (NSString *)filename;
- (BOOL)panel: (id)sender shouldShowFilename: (NSString *)filename;
- (NSString *)panel: (id)sender userEnteredFilename: (NSString *)filename
confirmed: (BOOL)okFlag;
@end
/* ==========================================================================
Images and stippling
========================================================================== */
@interface EmacsImage : NSImage
{
id imageListNext;
int refCount;
NSBitmapImageRep *bmRep; /* used for accessing pixel data */
unsigned char *pixmapData[5]; /* shortcut to access pixel data */
BOOL onTiger;
NSColor *stippleMask;
}
+ allocInitFromFile: (Lisp_Object)file;
- reference;
- imageListSetNext: (id)arg;
- imageListNext;
- (void)dealloc;
- initFromXBM: (unsigned char *)bits width: (int)w height: (int)h
flip: (BOOL)flip;
- initFromSkipXBM: (unsigned char *)bits width: (int)w height: (int)h
flip: (BOOL)flip length: (int)length;
- setXBMColor: (NSColor *)color;
- initForXPMWithDepth: (int)depth width: (int)width height: (int)height;
- (void)setPixmapData;
- (unsigned long)getPixelAtX: (int)x Y: (int)y;
- (void)setPixelAtX: (int)x Y: (int)y toRed: (unsigned char)r
green: (unsigned char)g blue: (unsigned char)b
alpha:(unsigned char)a;
- (void)setAlphaAtX: (int)x Y: (int)y to: (unsigned char)a;
- (NSColor *)stippleMask;
@end
/* ==========================================================================
Scrollbars
========================================================================== */
@interface EmacsScroller : NSScroller
{
Lisp_Object win;
struct frame *frame;
NSResponder *prevResponder;
/* offset to the bottom of knob of last mouse down */
float last_mouse_offset;
float min_portion;
int pixel_height;
int last_hit_part;
BOOL condemned;
/* optimize against excessive positioning calls generated by emacs */
int em_position;
int em_portion;
int em_whole;
}
- initFrame: (NSRect )r window: (Lisp_Object)win;
- (void)setFrame: (NSRect)r;
- (void)dealloc;
- setPosition: (int) position portion: (int) portion whole: (int) whole;
- (int) checkSamePosition: (int)position portion: (int)portion
whole: (int)whole;
- (void) getMouseMotionPart: (int *)part window: (Lisp_Object *)window
x: (Lisp_Object *)x y: ( Lisp_Object *)y;
- (void) sendScrollEventAtLoc: (float)loc fromEvent: (NSEvent *)e;
- repeatScroll: (NSTimer *)sender;
- condemn;
- reprieve;
- judge;
@end
/* ==========================================================================
Rendering on Panther and above
========================================================================== */
#ifdef NS_IMPL_COCOA
/* rendering util */
@interface EmacsGlyphStorage : NSObject <NSGlyphStorage>
{
@public
NSAttributedString *attrStr;
NSMutableDictionary *dict;
CGGlyph *cglyphs;
unsigned long maxChar, maxGlyph;
long i, len;
}
- initWithCapacity: (unsigned long) c;
- (void) setString: (NSString *)str font: (NSFont *)font;
@end
#endif /* NS_IMPL_COCOA */
/* ==========================================================================
Running the preferences window
========================================================================== */
@interface EmacsPrefsController : NSObject
{
struct frame *frame;
IBOutlet NSWindow *prefsWindow;
IBOutlet NSPopUpButton *alternateModMenu;
IBOutlet NSPopUpButton *commandModMenu;
#ifdef NS_IMPL_COCOA
IBOutlet NSPopUpButton *controlModMenu;
IBOutlet NSPopUpButton *functionModMenu;
#endif
IBOutlet NSMatrix *cursorTypeMatrix;
IBOutlet NSSlider *cursorBlinkSlider;
IBOutlet NSSlider *expandSpaceSlider;
#ifdef NS_IMPL_COCOA
IBOutlet NSButton *smoothFontsCheck;
IBOutlet NSButton *useQuickdrawCheck;
IBOutlet NSButton *useSysHiliteCheck;
BOOL prevUseHighlightColor;
#endif
float prevExpandSpace;
float prevBlinkRate;
}
- (IBAction)cancel: (id)sender;
- (IBAction)ok: (id)sender;
- (IBAction)resetToDefaults: (id)sender;
- (IBAction)runHelp: (id)sender;
- (IBAction)setColors: (id)sender;
- (IBAction)setDefaultFont: (id)sender;
- (void) showForFrame: (struct frame *)f;
- (void) setPanelFromValues;
- (void) setValuesFromPanel;
@end
extern NSArray *ns_send_types, *ns_return_types;
extern EmacsMenu *mainMenu, *svcsMenu;
/* Apple removed the declaration, but kept the implementation */
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_4
@interface NSApplication (EmacsApp)
- (void)setAppleMenu: (NSMenu *)menu;
@end
#endif
#endif /* __OBJC__ */
/* ==========================================================================
Non-OO stuff
========================================================================== */
enum ns_cursor_types
{
no_highlight =0,
filled_box,
hollow_box,
underscore,
bar
};
/* could use list to store these, but rest of emacs has a big infrastructure
for managing a table of bitmap "records" */
struct ns_bitmap_record
{
#ifdef __OBJC__
EmacsImage *img;
#else
void *img;
#endif
char *file;
int refcount;
int height, width, depth;
};
/* this to map between emacs color indices and NSColor objects */
struct ns_color_table
{
unsigned int size;
unsigned int avail;
#ifdef __OBJC__
NSColor **colors;
NSMutableSet *empty_indices;
#else
void **items;
void *availIndices;
#endif
};
#define NS_COLOR_CAPACITY 256
#define RGB_TO_ULONG(r, g, b) (((r) << 16) | ((g) << 8) | (b))
#define ARGB_TO_ULONG(a, r, g, b) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
#define ALPHA_FROM_ULONG(color) ((color) >> 24)
#define RED_FROM_ULONG(color) (((color) >> 16) & 0xff)
#define GREEN_FROM_ULONG(color) (((color) >> 8) & 0xff)
#define BLUE_FROM_ULONG(color) ((color) & 0xff)
/* Do not change `* 0x101' in the following lines to `<< 8'. If
changed, image masks in 1-bit depth will not work. */
#define RED16_FROM_ULONG(color) (RED_FROM_ULONG(color) * 0x101)
#define GREEN16_FROM_ULONG(color) (GREEN_FROM_ULONG(color) * 0x101)
#define BLUE16_FROM_ULONG(color) (BLUE_FROM_ULONG(color) * 0x101)
/* this extends font backend font */
struct nsfont_info
{
struct font font;
char *name; /* postscript name, uniquely identifies on NS systems */
float width; /* this and following metrics stored as float rather than int */
float height;
float underpos;
float underwidth;
float size;
#ifdef __OBJC__
NSFont *nsfont;
/* cgfont and synthItal are used only on OS X 10.3+ */
#if defined (NS_IMPL_COCOA) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3)
CGFontRef cgfont;
#else /* GNUstep or OS X < 10.3 */
void *cgfont;
#endif
#else /* ! OBJC */
void *nsfont;
void *cgfont;
#endif
char bold, ital; /* convenience flags */
char synthItal;
float voffset; /* mean of ascender/descender offsets */
XCharStruct max_bounds; /* 23 */
/* we compute glyph codes and metrics on-demand in blocks of 256 indexed
by hibyte, lobyte */
unsigned short **glyphs; /* map unicode index to glyph */
struct font_metrics **metrics;
};
/* init'd in ns_initialize_display_info () */
struct ns_display_info
{
/* Chain of all ns_display_info structures. */
struct ns_display_info *next;
/* The generic display parameters corresponding to this NS display. */
struct terminal *terminal;
/* This is a cons cell of the form (NAME . FONT-LIST-CACHE).
The same cons cell also appears in ns_display_name_list. */
Lisp_Object name_list_element;
/* The number of fonts loaded. */
int n_fonts;
/* Minimum width over all characters in all fonts in font_table. */
int smallest_char_width;
/* Minimum font height over all fonts in font_table. */
int smallest_font_height;
struct kboard *kboard;
/*/23 */
struct ns_bitmap_record *bitmaps;
int bitmaps_size;
int bitmaps_last;
/* 23 */
struct image_cache *image_cache;
struct ns_color_table *color_table;
/* 23: Dimensions and DPI resolution of this screen */
int height, width;
double resx, resy;
/* 23: Mask of things that cause the mouse to be grabbed */
int grabbed;
/* 23 */
int n_planes;
/* 23 */
int color_p;
/* 23 */
Window root_window;
/* 23: Xism */
XrmDatabase xrdb;
/* 23: The cursor to use for vertical scroll bars. */
Cursor vertical_scroll_bar_cursor;
/* 23: most mouse face stuff moved in here (and reasonably so) */
int mouse_face_beg_row, mouse_face_beg_col;
int mouse_face_end_row, mouse_face_end_col;
int mouse_face_beg_x, mouse_face_beg_y;
int mouse_face_end_x, mouse_face_end_y;
int mouse_face_past_end;
Lisp_Object mouse_face_window;
int mouse_face_face_id;
int mouse_face_deferred_gc;
Lisp_Object mouse_face_overlay;
FRAME_PTR mouse_face_mouse_frame;
int mouse_face_mouse_x, mouse_face_mouse_y;
int mouse_face_defer;
int mouse_face_hidden;
int mouse_face_image_state;
/* these are general, but we redefine due to Xism */
struct frame *ns_highlight_frame;
struct frame *ns_focus_frame;
#define x_highlight_frame ns_highlight_frame
#define x_focus_frame ns_focus_frame
};
/* This is a chain of structures for all the NS displays currently in use. */
extern struct ns_display_info *ns_display_list;
/* handle Xism */
#define x_display_list ns_display_list
extern Lisp_Object ns_display_name_list;
extern struct ns_display_info *ns_display_info_for_name ();
/* 23: PENDING: these functions (we defined in nsfns) are used in various
places, but no prototypes are provided */
struct ns_display_info *check_x_display_info (Lisp_Object frame);
FRAME_PTR check_x_frame (Lisp_Object frame);
struct ns_output
{
#ifdef __OBJC__
EmacsView *view;
id miniimage;
NSColor *current_cursor_color;
NSColor *desired_cursor_color;
NSColor *foreground_color;
NSColor *background_color;
EmacsToolbar *toolbar;
#else
void *view;
void *miniimage;
void *current_cursor_color;
void *desired_cursor_color;
void *foreground_color;
void *background_color;
void *toolbar;
#endif
/* 23: NSCursors init'ed in initFrameFromEmacs */
Cursor text_cursor;
Cursor nontext_cursor;
Cursor modeline_cursor;
Cursor hand_cursor;
Cursor hourglass_cursor;
Cursor horizontal_drag_cursor;
/* 23: NS-specific */
Cursor current_pointer;
/* 23: lord knows why Emacs needs to know about our Window ids.. */
Window window_desc, parent_desc;
char explicit_parent;
struct font *font;
int baseline_offset;
/* If a fontset is specified for this frame instead of font, this
value contains an ID of the fontset, else -1. */
int fontset; /* only used with font_backend */
Lisp_Object icon_top;
Lisp_Object icon_left;
enum ns_cursor_types current_cursor, desired_cursor;
unsigned char last_inactive;
/* The size of the extra width currently allotted for vertical
scroll bars, in pixels. */
int vertical_scroll_bar_extra;
/* The height of the titlebar decoration (included in NSWindow's frame). */
int titlebar_height;
/* The height of the toolbar if displayed, else 0. */
int toolbar_height;
/* This is the Emacs structure for the NS display this frame is on. */
struct ns_display_info *display_info;
};
/* 23: this dummy decl now needed to support TTYs */
struct x_output
{
unsigned long background_pixel;
unsigned long foreground_pixel;
};
/* This gives the ns_display_info structure for the display F is on. */
#define FRAME_NS_DISPLAY_INFO(f) ((f)->output_data.ns->display_info)
/* the primacy of X must be constantly worked with... */
#define FRAME_X_DISPLAY_INFO(f) ((f)->output_data.ns->display_info)
#define FRAME_X_OUTPUT(f) ((f)->output_data.ns)
#define FRAME_NS_WINDOW(f) ((f)->output_data.ns->window_desc)
#define FRAME_X_WINDOW(f) ((f)->output_data.ns->window_desc)
/* This is the `Display *' which frame F is on. */
#define FRAME_NS_DISPLAY(f) (0)
#define FRAME_X_DISPLAY(f) (0)
#define FRAME_FOREGROUND_COLOR(f) ((f)->output_data.ns->foreground_color)
#define FRAME_BACKGROUND_COLOR(f) ((f)->output_data.ns->background_color)
#define FRAME_X_IMAGE_CACHE(F) FRAME_NS_DISPLAY_INFO ((F))->image_cache
#define NS_FACE_FOREGROUND(f) ((f)->foreground)
#define NS_FACE_BACKGROUND(f) ((f)->background)
#define FRAME_NS_TITLEBAR_HEIGHT(f) ((f)->output_data.ns->titlebar_height)
#define FRAME_NS_TOOLBAR_HEIGHT(f) ((f)->output_data.ns->toolbar_height)
#define FONT_WIDTH(f) ((f)->max_width)
#define FONT_HEIGHT(f) ((f)->height)
/*#define FONT_BASE(f) ((f)->ascent) */
#define FONT_BASE(f) (((struct nsfont_info *)f)->max_bounds.ascent)
/*#define FONT_DESCENT(f) ((f)->descent) */
#define FONT_DESCENT(f) (((struct nsfont_info *)f)->max_bounds.descent)
#define FRAME_DEFAULT_FACE(f) FACE_FROM_ID (f, DEFAULT_FACE_ID)
#define FRAME_NS_VIEW(f) ((f)->output_data.ns->view)
#define FRAME_CURSOR(f) ((f)->output_data.ns->current_cursor)
#define FRAME_CURSOR_COLOR(f) ((f)->output_data.ns->current_cursor_color)
#define FRAME_NEW_CURSOR_COLOR(f) ((f)->output_data.ns->desired_cursor_color)
#define FRAME_NEW_CURSOR(f) ((f)->output_data.ns->desired_cursor)
#define FRAME_POINTER_TYPE(f) ((f)->output_data.ns->current_pointer)
#define FRAME_LAST_INACTIVE(f) ((f)->output_data.ns->last_inactive)
#define FRAME_FONT(f) ((f)->output_data.ns->font)
#ifdef __OBJC__
#define XNS_SCROLL_BAR(vec) ((id) XSAVE_VALUE (vec)->pointer)
#else
#define XNS_SCROLL_BAR(vec) XSAVE_VALUE (vec)->pointer
#endif
/* Compute pixel size for vertical scroll bars */
#define NS_SCROLL_BAR_WIDTH(f) \
(FRAME_HAS_VERTICAL_SCROLL_BARS (f) \
? rint (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0 \
? FRAME_CONFIG_SCROLL_BAR_WIDTH (f) \
: (FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f))) \
: 0)
/* Difference btwn char-column-calculated and actual SB widths.
This is only a concern for rendering when SB on left. */
#define NS_SCROLL_BAR_ADJUST(w, f) \
(WINDOW_HAS_VERTICAL_SCROLL_BAR_ON_LEFT (w) ? \
(FRAME_SCROLL_BAR_COLS (f) * FRAME_COLUMN_WIDTH (f) \
- NS_SCROLL_BAR_WIDTH (f)) : 0)
/*PENDING: fix for GNUstep inconsistent accounting for titlebar */
#ifdef NS_IMPL_GNUSTEP
#define NS_TOP_POS(f) ((f)->top_pos + 18)
#else
#define NS_TOP_POS(f) ((f)->top_pos)
#endif
#define FRAME_NS_FONT_TABLE(f) (FRAME_NS_DISPLAY_INFO (f)->font_table)
#define FRAME_FONTSET(f) ((f)->output_data.ns->fontset)
/* 23 */
#define FRAME_SMALLEST_CHAR_WIDTH(f) \
(FRAME_NS_DISPLAY_INFO (f)->smallest_char_width)
#define FRAME_SMALLEST_FONT_HEIGHT(f) \
(FRAME_NS_DISPLAY_INFO (f)->smallest_font_height)
#define FONT_TYPE_FOR_UNIBYTE(font, ch) 0
#define FONT_TYPE_FOR_MULTIBYTE(font, ch) 0
#define FRAME_BASELINE_OFFSET(f) ((f)->output_data.ns->baseline_offset)
#define BLACK_PIX_DEFAULT(f) 0x000000
#define WHITE_PIX_DEFAULT(f) 0xFFFFFF
/* First position where characters can be shown (instead of scrollbar, if
it is on left. */
#define FIRST_CHAR_POSITION(f) \
(! (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT (f)) ? 0 \
: FRAME_SCROLL_BAR_COLS (f))
extern struct ns_display_info *ns_term_init ();
extern void ns_term_shutdown (int sig);
/* constants for text rendering */
#define NS_DUMPGLYPH_NORMAL 0
#define NS_DUMPGLYPH_CURSOR 1
#define NS_DUMPGLYPH_FOREGROUND 2
#define NS_DUMPGLYPH_MOUSEFACE 3
/* In nsfont, called from fontset.c */
extern void nsfont_make_fontset_for_font (Lisp_Object name,
Lisp_Object font_object);
/* In nsfont, for debugging */
struct glyph_string;
void dump_glyphstring (struct glyph_string *s);
/* Implemented in nsterm, published in or needed from nsfns. */
extern Lisp_Object Qfontsize;
extern Lisp_Object ns_list_fonts (FRAME_PTR f, Lisp_Object pattern,
int size, int maxnames);
extern void ns_clear_frame (struct frame *f);
#ifdef __OBJC__
extern const char *ns_font_to_xlfd (NSFont *font);
#endif
extern const char *ns_fontname_to_xlfd (const char *name);
extern const char *ns_xlfd_to_fontname (const char *xlfd);
extern void check_ns (void);
extern Lisp_Object ns_map_event_to_object ();
extern Lisp_Object ns_string_from_pasteboard ();
extern void ns_string_to_pasteboard ();
extern void nxatoms_of_nsselect ();
extern int ns_lisp_to_cursor_type ();
extern Lisp_Object ns_cursor_type_to_lisp (int arg);
extern Lisp_Object Qnone;
/* XColor defined in dispextern.h (we use color_def->pixel = NSColor id), but
this causes an #include snafu, so we can't declare it.
extern int ns_defined_color (struct frame *f, char *name, XColor *color_def,
int alloc); */
#ifdef __OBJC__
extern int ns_lisp_to_color (Lisp_Object color, NSColor **col);
extern NSColor *ns_lookup_indexed_color (unsigned long idx, struct frame *f);
extern unsigned long ns_index_color (NSColor *color, struct frame *f);
extern void ns_free_indexed_color (unsigned long idx, struct frame *f);
#endif
/* C access to ObjC functionality */
extern void ns_release_object (void *obj);
extern void ns_retain_object (void *obj);
extern void *ns_alloc_autorelease_pool ();
extern void ns_release_autorelease_pool ();
/* in nsmenu */
extern void update_frame_tool_bar (FRAME_PTR f);
extern void free_frame_tool_bar (FRAME_PTR f);
extern void find_and_call_menu_selection (FRAME_PTR f,
EMACS_INT menu_bar_items_used, Lisp_Object vector, void *client_data);
extern Lisp_Object find_and_return_menu_selection (FRAME_PTR f,
int keymaps,
void *client_data);
extern Lisp_Object ns_popup_dialog (Lisp_Object position, Lisp_Object contents,
Lisp_Object header);
/* two more prototypes that should be moved to a more general include file */
extern void set_frame_menubar (struct frame *f, int first_time, int deep_p);
extern void x_set_window_size (struct frame *f, int change_grav,
int cols, int rows);
/* From nsimage.m, needed in image.c */
struct image;
extern void *ns_image_from_XBM (unsigned char *bits, int width, int height);
extern void *ns_image_for_XPM (int width, int height, int depth);
extern void *ns_image_from_file (Lisp_Object file);
extern int ns_load_image (struct frame *f, struct image *img,
Lisp_Object spec_file, Lisp_Object spec_data);
extern int ns_image_width (void *img);
extern int ns_image_height (void *img);
extern unsigned long ns_get_pixel (void *img, int x, int y);
extern void ns_put_pixel (void *img, int x, int y, unsigned long argb);
extern void ns_set_alpha (void *img, int x, int y, unsigned char a);
/* This in nsterm.m */
extern unsigned long ns_get_rgb_color (struct frame *f,
float r, float g, float b, float a);
extern NSPoint last_mouse_motion_position;
#ifdef NS_IMPL_GNUSTEP
extern char gnustep_base_version[]; /* version tracking */
#endif
#define MINWIDTH 10
#define MINHEIGHT 10
/* Screen max coordinate
Using larger coordinates causes movewindow/placewindow to abort */
#define SCREENMAX 16000
#define NS_SCROLL_BAR_WIDTH_DEFAULT [EmacsScroller scrollerWidth]
/* This is to match emacs on other platforms, ugly though it is. */
#define NS_SELECTION_COLOR_DEFAULT @"LightGoldenrod2";
#define RESIZE_HANDLE_SIZE 12
/* Little utility macros */
#define IN_BOUND(min, x, max) (((x) < (min)) \
? (min) : (((x)>(max)) ? (max) : (x)))
#define SCREENMAXBOUND(x) (IN_BOUND (-SCREENMAX, x, SCREENMAX))
/* 23: needed somewhere... */
#define VERTICAL_SCROLL_BAR_WIDTH_TRIM (0)
#endif /* HAVE_NS */

6598
src/nsterm.m Normal file

File diff suppressed because it is too large Load diff

View file

@ -4877,8 +4877,12 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
process_output_skip = 0;
}
#endif
nfds = select (max (max (max_process_desc, max_keyboard_desc),
#ifdef HAVE_NS
nfds = ns_select
#else
nfds = select
#endif
(max (max (max_process_desc, max_keyboard_desc),
max_gpm_desc) + 1,
&Available,
#ifdef NON_BLOCKING_CONNECT

View file

@ -221,7 +221,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* In Carbon, asynchronous I/O (using SIGIO) can't be used for window
events because they don't come from sockets, even though it works
fine on tty's. */
#ifdef HAVE_CARBON
/* This seems to help in Ctrl-G detection under Cocoa, however at the cost
of some quirks that may or may not bother a given user. */
#if defined (HAVE_CARBON) || defined (COCOA_EXPERIMENTAL_CTRL_G)
#define NO_SOCK_SIGIO
#endif
@ -247,8 +249,21 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Definitions for how to compile & link. */
/* Indicate that we are compiling for Mac OS X. */
/* This is for the Carbon port. Under the NeXTstep port, this is still picked
up during preprocessing, but is undone in config.in. */
#ifndef HAVE_NS
#define C_SWITCH_SYSTEM -fpascal-strings -DMAC_OSX
#endif
/* Link in the Carbon or AppKit lib. */
#ifdef HAVE_NS
/* PENDING: lresolv is here because configure when testing #undefs res_init,
a macro in /usr/include/resolv.h for res_9_init, not in stdc lib. */
#define LIBS_MACGUI -framework AppKit -lresolv
#define SYSTEM_PURESIZE_EXTRA 200000
#define HEADERPAD_EXTRA 6C8
#else
#define HEADERPAD_EXTRA 690
#ifdef HAVE_CARBON
@ -274,16 +289,17 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
/* Link in the Carbon lib. */
#ifdef HAVE_CARBON
#define LIBS_CARBON -framework Carbon LIBS_IMAGE
#define LIBS_MACGUI -framework Carbon LIBS_IMAGE
#else
#define LIBS_CARBON
#endif
#define LIBS_MACGUI
#endif /* !HAVE_CARBON */
#endif /* !HAVE_NS */
/* The -headerpad option tells ld (see man page) to leave room at the
end of the header for adding load commands. Needed for dumping.
0x690 is the total size of 30 segment load commands (at 56
each). */
#define LD_SWITCH_SYSTEM_TEMACS -prebind LIBS_CARBON -Xlinker -headerpad -Xlinker 690
each); under Cocoa 31 commands are required. */
#define LD_SWITCH_SYSTEM_TEMACS -prebind LIBS_MACGUI -Xlinker -headerpad -Xlinker HEADERPAD_EXTRA
#define C_SWITCH_SYSTEM_TEMACS -Dtemacs
@ -312,6 +328,11 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define OTHER_FILES macosx-app
#endif
/* PENDING: can this target be specified in a clearer way? */
#ifdef HAVE_NS
#define OTHER_FILES ns-app
#endif
/* Define the following so emacs symbols will not conflict with those
in the System framework. Otherwise -prebind will not work. */

View file

@ -1,3 +1,4 @@
#include <stdio.h>
/* GNU Emacs routines to deal with syntax tables; also word and list parsing.
Copyright (C) 1985, 1987, 1993, 1994, 1995, 1997, 1998, 1999, 2001,
2002, 2003, 2004, 2005, 2006, 2007, 2008
@ -298,6 +299,18 @@ char_quoted (charpos, bytepos)
register int quoted = 0;
int orig = charpos;
#ifdef HAVE_NS
/* For some reason keeps getting called w/both 1, then segfaulting
due to the definitions of DEC_BOTH and DEC_POS in character.h,
which lead to decrementing below initial address and then examining
character there. Need to investigate further.. */
if (charpos < 2 || bytepos < 2)
{
//fprintf(stderr,"Returning because charpos = %d, bytepos = %d\n",charpos, bytepos);
return 0;
}
#endif
DEC_BOTH (charpos, bytepos);
while (charpos >= beg)

View file

@ -18,11 +18,11 @@ You should have received a copy of the GNU General Public License
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef HAVE_SYS_SELECT_H
#if defined (DARWIN) || defined (MAC_OSX)
#if defined (DARWIN) || defined (MAC_OSX) || defined (NS_IMPL_COCOA)
#undef init_process
#endif
#include <sys/select.h>
#if defined (DARWIN) || defined (MAC_OSX)
#if defined (DARWIN) || defined (MAC_OSX) || defined (NS_IMPL_COCOA)
#define init_process emacs_init_process
#endif
#endif

View file

@ -318,6 +318,8 @@ extern struct tty_display_info *gpm_tty;
struct mac_display_info;
struct ns_display_info;
struct x_display_info;
struct w32_display_info;
/* Terminal-local parameters. */
@ -368,6 +370,7 @@ struct terminal
struct x_display_info *x; /* xterm.h */
struct w32_display_info *w32; /* w32term.h */
struct mac_display_info *mac; /* macterm.h */
struct ns_display_info *ns; /* nsterm.h */
} display_info;

View file

@ -397,6 +397,8 @@ possible return values. */)
return Qpc;
case output_mac:
return Qmac;
case output_ns:
return Qns;
default:
abort ();
}

View file

@ -24,7 +24,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
so that we do not need to conditionalize the places in Emacs
that set them. */
/* Causes a conflict on OS X 10.3 .*/
#ifndef NS_IMPL_COCOA
char *UP, *BC, PC;
#endif
/* Interface to curses/terminfo library.
Turns out that all of the terminfo-level routines look

View file

@ -21,66 +21,19 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define EMACS_W32GUI_H
#include <windows.h>
#include "w32bdf.h"
/* Emulate widget_value from ../lwlib/lwlib.h, modified for Windows. */
typedef void * XtPointer;
typedef char Boolean;
enum button_type
/* Emulate XCharStruct. */
typedef struct _XCharStruct
{
BUTTON_TYPE_NONE,
BUTTON_TYPE_TOGGLE,
BUTTON_TYPE_RADIO
};
typedef struct _widget_value
{
/* name of widget */
Lisp_Object lname;
char* name;
/* value (meaning depend on widget type) */
char* value;
/* keyboard equivalent. no implications for XtTranslations */
Lisp_Object lkey;
char* key;
/* Help string or nil if none.
GC finds this string through the frame's menu_bar_vector
or through menu_items. */
Lisp_Object help;
/* true if enabled */
Boolean enabled;
/* true if selected */
Boolean selected;
/* The type of a button. */
enum button_type button_type;
/* true if menu title */
Boolean title;
#if 0
/* true if was edited (maintained by get_value) */
Boolean edited;
/* true if has changed (maintained by lw library) */
change_type change;
/* true if this widget itself has changed,
but not counting the other widgets found in the `next' field. */
change_type this_one_change;
#endif
/* Contents of the sub-widgets, also selected slot for checkbox */
struct _widget_value* contents;
/* data passed to callback */
XtPointer call_data;
/* next one in the list */
struct _widget_value* next;
#if 0
/* slot for the toolkit dependent part. Always initialize to NULL. */
void* toolkit_data;
/* tell us if we should free the toolkit data slot when freeing the
widget_value itself. */
Boolean free_toolkit_data;
short rbearing;
short lbearing;
short width;
short ascent;
short descent;
} XCharStruct;
/* we resource the widget_value structures; this points to the next
one on the free list if this one has been deallocated.
*/
struct _widget_value *free_list;
#endif
} widget_value;
/* Local memory management for menus. */
#define local_heap (GetProcessHeap ())
#define local_alloc(n) (HeapAlloc (local_heap, HEAP_ZERO_MEMORY, (n)))
@ -89,6 +42,30 @@ typedef struct _widget_value
#define malloc_widget_value() ((widget_value *) local_alloc (sizeof (widget_value)))
#define free_widget_value(wv) (local_free ((wv)))
enum w32_char_font_type
{
UNKNOWN_FONT = 0 /* FONT_TYPE_UNKNOWN */,
ANSI_FONT,
UNICODE_FONT,
BDF_1D_FONT,
BDF_2D_FONT
};
typedef struct W32FontStruct {
enum w32_char_font_type font_type;
TEXTMETRIC tm;
HFONT hfont;
bdffont *bdf;
int double_byte_p;
XCharStruct max_bounds;
XCharStruct scratch;
/* Only store info for ascii chars, if not fixed pitch. */
XCharStruct * per_char;
} W32FontStruct;
typedef struct W32FontStruct XFontStruct;
/* Emulate X GC's by keeping color and font info in a structure. */
typedef struct _XGCValues
{

View file

@ -49,6 +49,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef MAC_OS
#include "macterm.h"
#endif
#ifdef HAVE_NS
#include "nsterm.h"
#endif
Lisp_Object Qwindowp, Qwindow_live_p, Qwindow_configuration_p;

View file

@ -199,6 +199,9 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#ifdef MAC_OS
#include "macterm.h"
#endif
#ifdef HAVE_NS
#include "nsterm.h"
#endif
#include "font.h"
@ -209,7 +212,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define INFINITY 10000000
#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) || defined (MAC_OS) \
|| defined (USE_GTK)
|| defined(HAVE_NS) || defined (USE_GTK)
extern void set_frame_menubar P_ ((struct frame *f, int, int));
extern int pending_menu_activation;
#endif
@ -861,7 +864,7 @@ int display_hourglass_p;
int hourglass_shown_p;
/* If non-null, an asynchronous timer that, when it expires, displays
an hourglass cursor on all frames. */
an hourglass cursor on all frames. */
struct atimer *hourglass_atimer;
/* Number of seconds to wait before displaying an hourglass cursor. */
@ -9462,7 +9465,32 @@ x_consider_frame_title (frame)
if (! STRINGP (f->name)
|| SBYTES (f->name) != len
|| bcmp (title, SDATA (f->name), len) != 0)
x_implicitly_set_name (f, make_string (title, len), Qnil);
{
#ifdef HAVE_NS
if (FRAME_NS_P (f))
{
if (!MINI_WINDOW_P(XWINDOW(f->selected_window)))
{
if (EQ (fmt, Qt))
ns_set_name_as_filename (f);
else
x_implicitly_set_name (f, make_string(title, len),
Qnil);
}
}
else
#endif
x_implicitly_set_name (f, make_string (title, len), Qnil);
}
#ifdef HAVE_NS
if (FRAME_NS_P (f))
{
/* do this also for frames with explicit names */
ns_implicitly_set_icon_type(f);
ns_set_doc_edited(f, Fbuffer_modified_p
(XWINDOW (f->selected_window)->buffer), Qnil);
}
#endif
}
}
@ -9627,7 +9655,7 @@ update_menu_bar (f, save_match_data, hooks_run)
if (FRAME_WINDOW_P (f)
?
#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) || defined (MAC_OS) \
|| defined (USE_GTK)
|| defined (HAVE_NS) || defined (USE_GTK)
FRAME_EXTERNAL_MENU_BAR (f)
#else
FRAME_MENU_BAR_LINES (f) > 0
@ -9686,10 +9714,10 @@ update_menu_bar (f, save_match_data, hooks_run)
/* Redisplay the menu bar in case we changed it. */
#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) || defined (MAC_OS) \
|| defined (USE_GTK)
|| defined (HAVE_NS) || defined (USE_GTK)
if (FRAME_WINDOW_P (f))
{
#ifdef MAC_OS
{
#if defined (MAC_OS) || defined (HAVE_NS)
/* All frames on Mac OS share the same menubar. So only
the selected frame should be allowed to set it. */
if (f == SELECTED_FRAME ())
@ -9700,11 +9728,11 @@ update_menu_bar (f, save_match_data, hooks_run)
/* On a terminal screen, the menu bar is an ordinary screen
line, and this makes it get updated. */
w->update_mode_line = Qt;
#else /* ! (USE_X_TOOLKIT || HAVE_NTGUI || MAC_OS || USE_GTK) */
#else /* ! (USE_X_TOOLKIT || HAVE_NTGUI || MAC_OS || HAVE_NS || USE_GTK) */
/* In the non-toolkit version, the menu bar is an ordinary screen
line, and this makes it get updated. */
w->update_mode_line = Qt;
#endif /* ! (USE_X_TOOLKIT || HAVE_NTGUI || MAC_OS || USE_GTK) */
#endif /* ! (USE_X_TOOLKIT || HAVE_NTGUI || MAC_OS || HAVE_NS || USE_GTK) */
unbind_to (count, Qnil);
set_buffer_internal_1 (prev);
@ -9815,7 +9843,7 @@ update_tool_bar (f, save_match_data)
struct frame *f;
int save_match_data;
{
#if defined (USE_GTK) || USE_MAC_TOOLBAR
#if defined (USE_GTK) || defined (HAVE_NS) || USE_MAC_TOOLBAR
int do_update = FRAME_EXTERNAL_TOOL_BAR (f);
#else
int do_update = WINDOWP (f->tool_bar_window)
@ -10281,7 +10309,7 @@ redisplay_tool_bar (f)
struct it it;
struct glyph_row *row;
#if defined (USE_GTK) || USE_MAC_TOOLBAR
#if defined (USE_GTK) || defined (HAVE_NS) || USE_MAC_TOOLBAR
if (FRAME_EXTERNAL_TOOL_BAR (f))
update_frame_tool_bar (f);
return 0;
@ -11501,6 +11529,10 @@ redisplay_internal (preserve_echo_area)
/* Resized active mini-window to fit the size of what it is
showing if its contents might have changed. */
must_finish = 1;
/* PENDING: this causes all frames to be updated, which seems unnecessary
since only the current frame needs to be considered. This function needs
to be rewritten with two variables, consider_all_windows and
consider_all_frames. */
consider_all_windows_p = 1;
++windows_or_buffers_changed;
++update_mode_lines;
@ -13913,7 +13945,7 @@ redisplay_window (window, just_this_one_p)
if (FRAME_WINDOW_P (f))
{
#if defined (USE_X_TOOLKIT) || defined (HAVE_NTGUI) || defined (MAC_OS) \
|| defined (USE_GTK)
|| defined (HAVE_NS) || defined (USE_GTK)
redisplay_menu_p = FRAME_EXTERNAL_MENU_BAR (f);
#else
redisplay_menu_p = FRAME_MENU_BAR_LINES (f) > 0;
@ -13928,7 +13960,7 @@ redisplay_window (window, just_this_one_p)
#ifdef HAVE_WINDOW_SYSTEM
if (FRAME_WINDOW_P (f))
{
#if defined (USE_GTK) || USE_MAC_TOOLBAR
#if defined (USE_GTK) || defined (HAVE_NS) || USE_MAC_TOOLBAR
redisplay_tool_bar_p = FRAME_EXTERNAL_TOOL_BAR (f);
#else
redisplay_tool_bar_p = WINDOWP (f->tool_bar_window)
@ -17072,6 +17104,11 @@ display_menu_bar (w)
return;
#endif
#ifdef HAVE_NS
if (FRAME_NS_P (f))
return;
#endif /* HAVE_NS */
#ifdef USE_X_TOOLKIT
xassert (!FRAME_WINDOW_P (f));
init_iterator (&it, w, -1, -1, f->desired_matrix->rows, MENU_FACE_ID);
@ -22539,7 +22576,10 @@ display_and_set_cursor (w, on, hpos, vpos, x, y)
/* Switch the display of W's cursor on or off, according to the value
of ON. */
static void
#ifndef HAVE_NS
static
#endif
void
update_window_cursor (w, on)
struct window *w;
int on;

View file

@ -244,6 +244,17 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#define check_x check_mac
#endif /* MAC_OS */
#ifdef HAVE_NS
#include "nsterm.h"
#undef FRAME_X_DISPLAY_INFO
#define FRAME_X_DISPLAY_INFO FRAME_NS_DISPLAY_INFO
#define x_display_info ns_display_info
#define FRAME_X_FONT_TABLE FRAME_NS_FONT_TABLE
#define check_x check_ns
#define x_list_fonts ns_list_fonts
#define GCGraphicsExposures 0
#endif /* HAVE_NS */
#include "buffer.h"
#include "dispextern.h"
#include "blockinput.h"
@ -556,6 +567,10 @@ static void x_free_gc P_ ((struct frame *, GC));
extern Lisp_Object w32_list_fonts P_ ((struct frame *, Lisp_Object, int, int));
#endif /* WINDOWSNT */
#ifdef HAVE_NS
extern Lisp_Object ns_list_fonts P_ ((struct frame *, Lisp_Object, int, int));
#endif /* HAVE_NS */
#ifdef USE_X_TOOLKIT
static void x_update_menu_appearance P_ ((struct frame *));
@ -766,6 +781,31 @@ x_free_gc (f, gc)
#endif /* WINDOWSNT */
#ifdef HAVE_NS
/* NS emulation of GCs */
static INLINE GC
x_create_gc (f, mask, xgcv)
struct frame *f;
unsigned long mask;
XGCValues *xgcv;
{
GC gc = xmalloc (sizeof (*gc));
if (gc)
bcopy(xgcv, gc, sizeof(XGCValues));
return gc;
}
static INLINE void
x_free_gc (f, gc)
struct frame *f;
GC gc;
{
if (gc)
xfree (gc);
}
#endif /* HAVE_NS */
#ifdef MAC_OS
/* Mac OS emulation of GCs */
@ -871,9 +911,12 @@ init_frame_faces (f)
#endif
#ifdef MAC_OS
if (!FRAME_MAC_P (f) || FRAME_MAC_WINDOW (f))
#endif
#ifdef HAVE_NS
if (!FRAME_NS_P (f) || FRAME_NS_WINDOW (f))
#endif
if (!realize_basic_faces (f))
abort ();
abort ();
}
@ -1268,6 +1311,10 @@ defined_color (f, color_name, color_def, alloc)
#ifdef MAC_OS
else if (FRAME_MAC_P (f))
return mac_defined_color (f, color_name, color_def, alloc);
#endif
#ifdef HAVE_NS
else if (FRAME_NS_P (f))
return ns_defined_color (f, color_name, color_def, alloc, 1);
#endif
else
abort ();
@ -1558,6 +1605,7 @@ free_face_colors (f, face)
struct frame *f;
struct face *face;
{
/* PENDING(NS): need to do something here? */
#ifdef HAVE_X_WINDOWS
if (face->colors_copied_bitwise_p)
return;
@ -2754,7 +2802,7 @@ merge_face_ref (f, face_ref, to, err_msgs, named_merge_points)
}
else if (EQ (keyword, QCstipple))
{
#ifdef HAVE_X_WINDOWS
#if defined(HAVE_X_WINDOWS) || defined(HAVE_NS)
Lisp_Object pixmap_p = Fbitmap_spec_p (value);
if (!NILP (pixmap_p))
to[LFACE_STIPPLE_INDEX] = value;
@ -3262,14 +3310,14 @@ FRAME 0 means change the face on all frames, and change the default
}
else if (EQ (attr, QCstipple))
{
#ifdef HAVE_X_WINDOWS
#if defined(HAVE_X_WINDOWS) || defined(HAVE_NS)
if (!UNSPECIFIEDP (value) && !IGNORE_DEFFACE_P (value)
&& !NILP (value)
&& NILP (Fbitmap_spec_p (value)))
signal_error ("Invalid stipple attribute", value);
old_value = LFACE_STIPPLE (lface);
LFACE_STIPPLE (lface) = value;
#endif /* HAVE_X_WINDOWS */
#endif /* HAVE_X_WINDOWS || HAVE_NS */
}
else if (EQ (attr, QCwidth))
{