mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
Add clipboard support in Mac console. (Bjorn Winckler)
This commit is contained in:
2
Filelist
2
Filelist
@@ -373,7 +373,7 @@ SRC_MAC = \
|
|||||||
src/os_mac.h \
|
src/os_mac.h \
|
||||||
src/os_mac.rsr.hqx \
|
src/os_mac.rsr.hqx \
|
||||||
src/os_mac_conv.c \
|
src/os_mac_conv.c \
|
||||||
src/os_macosx.c \
|
src/os_macosx.m \
|
||||||
src/proto/gui_mac.pro \
|
src/proto/gui_mac.pro \
|
||||||
src/proto/os_mac_conv.pro \
|
src/proto/os_mac_conv.pro \
|
||||||
|
|
||||||
|
@@ -39,7 +39,7 @@ This also applies when using the MingW tools.
|
|||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
2. Locating memory leaks *debug-leaks*
|
2. Locating memory leaks *debug-leaks* *valgrind*
|
||||||
|
|
||||||
If you suspect Vim is leaking memory and you are using Linux, the valgrind
|
If you suspect Vim is leaking memory and you are using Linux, the valgrind
|
||||||
tool is very useful to pinpoint memory leaks.
|
tool is very useful to pinpoint memory leaks.
|
||||||
@@ -47,14 +47,18 @@ tool is very useful to pinpoint memory leaks.
|
|||||||
First of all, build Vim with EXITFREE defined. Search for this in MAKEFILE
|
First of all, build Vim with EXITFREE defined. Search for this in MAKEFILE
|
||||||
and uncomment the line.
|
and uncomment the line.
|
||||||
|
|
||||||
Use this command to start Vim: *valgrind*
|
Use this command to start Vim:
|
||||||
>
|
>
|
||||||
valgrind --log-file=valgrind.log ./vim
|
valgrind --log-file=valgrind.log --leak-check=full ./vim
|
||||||
|
|
||||||
Note: Vim will run much slower. If your .vimrc is big or you have several
|
Note: Vim will run much slower. If your .vimrc is big or you have several
|
||||||
plugins you need to be patient for startup, or run with the "-u NONE"
|
plugins you need to be patient for startup, or run with the "-u NONE"
|
||||||
argument.
|
argument.
|
||||||
|
|
||||||
|
There are often a few leaks from libraries, such as getpwuid() and
|
||||||
|
XtVaAppCreateShell(). Those are unavoidable. The number of bytes should be
|
||||||
|
very small a Kbyte or less.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
3. Windows Bug Reporting *debug-win32*
|
3. Windows Bug Reporting *debug-win32*
|
||||||
|
@@ -1098,7 +1098,7 @@ Vim 7.3:
|
|||||||
- Conceal feature: no update when moving to another window. (Dominique Pelle,
|
- Conceal feature: no update when moving to another window. (Dominique Pelle,
|
||||||
2010 Jul 5) Vince will look into it.
|
2010 Jul 5) Vince will look into it.
|
||||||
Patches to possibly include:
|
Patches to possibly include:
|
||||||
- Mac: console clipboard support. (Bjoren Winckler, 2010 Jul 12)
|
- Mac: console clipboard support. (Bjorn Winckler, 2010 Jul 12)
|
||||||
- Win32: patch for better font scaling. (George Reilly, 2009 Mar 26)
|
- Win32: patch for better font scaling. (George Reilly, 2009 Mar 26)
|
||||||
- Patch for completion of ":find" arguments. (Nazri Ramliy, 2009 Feb 22, 26)
|
- Patch for completion of ":find" arguments. (Nazri Ramliy, 2009 Feb 22, 26)
|
||||||
8 For ":find" and ":sfind" expand files found in 'path'.
|
8 For ":find" and ":sfind" expand files found in 'path'.
|
||||||
@@ -1106,8 +1106,9 @@ Patches to possibly include:
|
|||||||
- Patch for vertical line at certain column position, 'guidecolumn' option.
|
- Patch for vertical line at certain column position, 'guidecolumn' option.
|
||||||
(Pankaj Garg, 2009 Apr 14, aka Lone, Apr 15)
|
(Pankaj Garg, 2009 Apr 14, aka Lone, Apr 15)
|
||||||
Update 2009 May 2, 'margincolumn'
|
Update 2009 May 2, 'margincolumn'
|
||||||
Alternative patch. (2010 Feb 2, Gregor Uhlenheuer, update Apr 18 2010)
|
Alternative patch. (2010 Feb 2, Gregor Uhlenheuer, update 2010 Jul 12)
|
||||||
Fix by Lech Lorens, Apr 19
|
Fix by Lech Lorens, Apr 19
|
||||||
|
When there are multiple columns it makes sense to call it 'guidecolumn'
|
||||||
- Another patch for Javascript indenting. (Hari Kumar, 2010 Jul 11)
|
- Another patch for Javascript indenting. (Hari Kumar, 2010 Jul 11)
|
||||||
Needs a few tests.
|
Needs a few tests.
|
||||||
- Add different highlighting for a fold line depending on the fold level.
|
- Add different highlighting for a fold line depending on the fold level.
|
||||||
@@ -1124,7 +1125,6 @@ Patches to possibly include:
|
|||||||
Docs patch by Dominique Pelle, Mar 25
|
Docs patch by Dominique Pelle, Mar 25
|
||||||
Update 2009 Mar 28.
|
Update 2009 Mar 28.
|
||||||
Fix for invalid memory access. (Lech Lorens, 2009 Apr 17)
|
Fix for invalid memory access. (Lech Lorens, 2009 Apr 17)
|
||||||
- Fix for test29. (Milan Vancura, 2010 May 16)
|
|
||||||
- Disable setting 'encoding' from a modeline? It usually causes problems,
|
- Disable setting 'encoding' from a modeline? It usually causes problems,
|
||||||
can't do any good. (Patch from Patrick Texier, 2008 Dec 9)
|
can't do any good. (Patch from Patrick Texier, 2008 Dec 9)
|
||||||
- Redraw problem when appending digraph causes line to wrap. (James Vega, 2007
|
- Redraw problem when appending digraph causes line to wrap. (James Vega, 2007
|
||||||
|
@@ -37,7 +37,8 @@
|
|||||||
# USEDLL no or yes: set to yes to use the Runtime library DLL (no)
|
# USEDLL no or yes: set to yes to use the Runtime library DLL (no)
|
||||||
# For USEDLL=yes the cygwin1.dll is required to run Vim.
|
# For USEDLL=yes the cygwin1.dll is required to run Vim.
|
||||||
# "no" does not work with latest version of Cygwin, use
|
# "no" does not work with latest version of Cygwin, use
|
||||||
# Make_ming.mak instead. Or set CC to gcc-3.
|
# Make_ming.mak instead. Or set CC to gcc-3 and add
|
||||||
|
# -L/lib/w32api to EXTRA_LIBS.
|
||||||
# POSTSCRIPT no or yes: set to yes for PostScript printing (no)
|
# POSTSCRIPT no or yes: set to yes for PostScript printing (no)
|
||||||
# FEATURES TINY, SMALL, NORMAL, BIG or HUGE (BIG)
|
# FEATURES TINY, SMALL, NORMAL, BIG or HUGE (BIG)
|
||||||
# WINVER Lowest Win32 version to support. (0x0400)
|
# WINVER Lowest Win32 version to support. (0x0400)
|
||||||
|
@@ -2511,8 +2511,8 @@ objects/os_beos.o: os_beos.c
|
|||||||
objects/os_qnx.o: os_qnx.c
|
objects/os_qnx.o: os_qnx.c
|
||||||
$(CCC) -o $@ os_qnx.c
|
$(CCC) -o $@ os_qnx.c
|
||||||
|
|
||||||
objects/os_macosx.o: os_macosx.c
|
objects/os_macosx.o: os_macosx.m
|
||||||
$(CCC) -o $@ os_macosx.c
|
$(CCC) -o $@ os_macosx.m
|
||||||
|
|
||||||
objects/os_mac_conv.o: os_mac_conv.c
|
objects/os_mac_conv.o: os_mac_conv.c
|
||||||
$(CCC) -o $@ os_mac_conv.c
|
$(CCC) -o $@ os_mac_conv.c
|
||||||
|
34
src/auto/configure
vendored
34
src/auto/configure
vendored
@@ -4004,7 +4004,7 @@ fi
|
|||||||
$as_echo "no" >&6; }
|
$as_echo "no" >&6; }
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if Darwin files are there" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if Darwin files are there" >&5
|
||||||
$as_echo_n "checking if Darwin files are there... " >&6; }
|
$as_echo_n "checking if Darwin files are there... " >&6; }
|
||||||
if test -f os_macosx.c; then
|
if test -f os_macosx.m; then
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||||
$as_echo "yes" >&6; }
|
$as_echo "yes" >&6; }
|
||||||
else
|
else
|
||||||
@@ -4160,14 +4160,9 @@ rm -f core conftest.err conftest.$ac_objext \
|
|||||||
|
|
||||||
if test "$enable_darwin" = "yes"; then
|
if test "$enable_darwin" = "yes"; then
|
||||||
MACOSX=yes
|
MACOSX=yes
|
||||||
OS_EXTRA_SRC="os_macosx.c os_mac_conv.c";
|
OS_EXTRA_SRC="os_macosx.m os_mac_conv.c";
|
||||||
OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
|
OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
|
||||||
CPPFLAGS="$CPPFLAGS -DMACOS_X_UNIX -no-cpp-precomp"
|
CPPFLAGS="$CPPFLAGS -DMACOS_X_UNIX -no-cpp-precomp"
|
||||||
if test "x$MACARCH" = "xboth"; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk/Developer/Headers/FlatCarbon"
|
|
||||||
else
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/Headers/FlatCarbon"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# On IRIX 5.3, sys/types and inttypes.h are conflicting.
|
# On IRIX 5.3, sys/types and inttypes.h are conflicting.
|
||||||
for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
|
for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
|
||||||
@@ -7025,8 +7020,9 @@ $as_echo "no GUI support" >&6; }
|
|||||||
SKIP_CARBON=YES ;;
|
SKIP_CARBON=YES ;;
|
||||||
yes|"") { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes - automatic GUI support" >&5
|
yes|"") { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes - automatic GUI support" >&5
|
||||||
$as_echo "yes - automatic GUI support" >&6; } ;;
|
$as_echo "yes - automatic GUI support" >&6; } ;;
|
||||||
auto) { $as_echo "$as_me:${as_lineno-$LINENO}: result: auto - automatic GUI support" >&5
|
auto) { $as_echo "$as_me:${as_lineno-$LINENO}: result: auto - Carbon GUI is outdated - disable GUI support" >&5
|
||||||
$as_echo "auto - automatic GUI support" >&6; } ;;
|
$as_echo "auto - Carbon GUI is outdated - disable GUI support" >&6; }
|
||||||
|
SKIP_CARBON=YES ;;
|
||||||
carbon) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Carbon GUI support" >&5
|
carbon) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Carbon GUI support" >&5
|
||||||
$as_echo "Carbon GUI support" >&6; } ;;
|
$as_echo "Carbon GUI support" >&6; } ;;
|
||||||
*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Sorry, $enable_gui GUI is not supported" >&5
|
*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: Sorry, $enable_gui GUI is not supported" >&5
|
||||||
@@ -7184,6 +7180,12 @@ $as_echo "yes" >&6; };
|
|||||||
VIMNAME=Vim
|
VIMNAME=Vim
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "x$MACARCH" = "xboth"; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk/Developer/Headers/FlatCarbon"
|
||||||
|
else
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/Headers/FlatCarbon"
|
||||||
|
fi
|
||||||
|
|
||||||
if test x$prefix = xNONE; then
|
if test x$prefix = xNONE; then
|
||||||
prefix=/Applications
|
prefix=/Applications
|
||||||
fi
|
fi
|
||||||
@@ -11774,13 +11776,11 @@ if test "x$MACOSX" = "xyes" -a -n "$PERL"; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$MACOSX" = "xyes" && test "x$CARBON" = "xyes" \
|
if test "x$MACOSX" = "xyes"; then
|
||||||
&& test "x$GUITYPE" != "xCARBONGUI"; then
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -framework Cocoa" >&5
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -framework Carbon" >&5
|
$as_echo_n "checking whether we need -framework Cocoa... " >&6; }
|
||||||
$as_echo_n "checking whether we need -framework Carbon... " >&6; }
|
if test "x$features" != "xtiny" || test "x$enable_multibyte" = "xyes"; then
|
||||||
if test "x$enable_multibyte" = "xyes" || test "x$features" = "xbig" \
|
LIBS=$"$LIBS -framework Cocoa"
|
||||||
|| test "x$features" = "xhuge"; then
|
|
||||||
LIBS="$LIBS -framework Carbon"
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||||
$as_echo "yes" >&6; }
|
$as_echo "yes" >&6; }
|
||||||
else
|
else
|
||||||
@@ -11788,7 +11788,7 @@ $as_echo "yes" >&6; }
|
|||||||
$as_echo "no" >&6; }
|
$as_echo "no" >&6; }
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if test "x$MACARCH" = "xboth"; then
|
if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
|
||||||
LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
|
LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@@ -101,7 +101,7 @@ if test "`(uname) 2>/dev/null`" = Darwin; then
|
|||||||
if test "$enable_darwin" = "yes"; then
|
if test "$enable_darwin" = "yes"; then
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
AC_MSG_CHECKING(if Darwin files are there)
|
AC_MSG_CHECKING(if Darwin files are there)
|
||||||
if test -f os_macosx.c; then
|
if test -f os_macosx.m; then
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT([no, Darwin support disabled])
|
AC_MSG_RESULT([no, Darwin support disabled])
|
||||||
@@ -168,15 +168,10 @@ if test "`(uname) 2>/dev/null`" = Darwin; then
|
|||||||
|
|
||||||
if test "$enable_darwin" = "yes"; then
|
if test "$enable_darwin" = "yes"; then
|
||||||
MACOSX=yes
|
MACOSX=yes
|
||||||
OS_EXTRA_SRC="os_macosx.c os_mac_conv.c";
|
OS_EXTRA_SRC="os_macosx.m os_mac_conv.c";
|
||||||
OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
|
OS_EXTRA_OBJ="objects/os_macosx.o objects/os_mac_conv.o"
|
||||||
dnl TODO: use -arch i386 on Intel machines
|
dnl TODO: use -arch i386 on Intel machines
|
||||||
CPPFLAGS="$CPPFLAGS -DMACOS_X_UNIX -no-cpp-precomp"
|
CPPFLAGS="$CPPFLAGS -DMACOS_X_UNIX -no-cpp-precomp"
|
||||||
if test "x$MACARCH" = "xboth"; then
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk/Developer/Headers/FlatCarbon"
|
|
||||||
else
|
|
||||||
CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/Headers/FlatCarbon"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl If Carbon is found, assume we don't want X11
|
dnl If Carbon is found, assume we don't want X11
|
||||||
dnl unless it was specifically asked for (--with-x)
|
dnl unless it was specifically asked for (--with-x)
|
||||||
@@ -1325,7 +1320,8 @@ elif test "x$MACOSX" = "xyes" -a "x$with_x" = "xno" ; then
|
|||||||
no) AC_MSG_RESULT(no GUI support)
|
no) AC_MSG_RESULT(no GUI support)
|
||||||
SKIP_CARBON=YES ;;
|
SKIP_CARBON=YES ;;
|
||||||
yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
|
yes|"") AC_MSG_RESULT(yes - automatic GUI support) ;;
|
||||||
auto) AC_MSG_RESULT(auto - automatic GUI support) ;;
|
auto) AC_MSG_RESULT(auto - Carbon GUI is outdated - disable GUI support)
|
||||||
|
SKIP_CARBON=YES ;;
|
||||||
carbon) AC_MSG_RESULT(Carbon GUI support) ;;
|
carbon) AC_MSG_RESULT(Carbon GUI support) ;;
|
||||||
*) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
|
*) AC_MSG_RESULT([Sorry, $enable_gui GUI is not supported])
|
||||||
SKIP_CARBON=YES ;;
|
SKIP_CARBON=YES ;;
|
||||||
@@ -1436,6 +1432,12 @@ if test "x$MACOSX" = "xyes" -a -z "$SKIP_CARBON" -a "x$CARBON" = "xyes"; then
|
|||||||
VIMNAME=Vim
|
VIMNAME=Vim
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "x$MACARCH" = "xboth"; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk/Developer/Headers/FlatCarbon"
|
||||||
|
else
|
||||||
|
CPPFLAGS="$CPPFLAGS -I$DEVELOPER_DIR/Headers/FlatCarbon"
|
||||||
|
fi
|
||||||
|
|
||||||
dnl Default install directory is not /usr/local
|
dnl Default install directory is not /usr/local
|
||||||
if test x$prefix = xNONE; then
|
if test x$prefix = xNONE; then
|
||||||
prefix=/Applications
|
prefix=/Applications
|
||||||
@@ -3109,19 +3111,18 @@ if test "x$MACOSX" = "xyes" -a -n "$PERL"; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$MACOSX" = "xyes" && test "x$CARBON" = "xyes" \
|
if test "x$MACOSX" = "xyes"; then
|
||||||
&& test "x$GUITYPE" != "xCARBONGUI"; then
|
AC_MSG_CHECKING(whether we need -framework Cocoa)
|
||||||
AC_MSG_CHECKING(whether we need -framework Carbon)
|
dnl Cocoa is needed with FEAT_CLIPBOARD or FEAT_MBYTE (the former is
|
||||||
dnl check for MACOSX without Carbon GUI, but with FEAT_MBYTE
|
dnl disabled during tiny build)
|
||||||
if test "x$enable_multibyte" = "xyes" || test "x$features" = "xbig" \
|
if test "x$features" != "xtiny" || test "x$enable_multibyte" = "xyes"; then
|
||||||
|| test "x$features" = "xhuge"; then
|
LIBS=$"$LIBS -framework Cocoa"
|
||||||
LIBS="$LIBS -framework Carbon"
|
|
||||||
AC_MSG_RESULT(yes)
|
AC_MSG_RESULT(yes)
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if test "x$MACARCH" = "xboth"; then
|
if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
|
||||||
LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
|
LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
* Include the Mac header files, unless also compiling with X11 (the header
|
* Include the Mac header files, unless also compiling with X11 (the header
|
||||||
* files have many conflicts).
|
* files have many conflicts).
|
||||||
*/
|
*/
|
||||||
#ifndef FEAT_X11
|
#ifdef FEAT_GUI_MAC
|
||||||
# include <Quickdraw.h> /* Apple calls it QuickDraw.h... */
|
# include <Quickdraw.h> /* Apple calls it QuickDraw.h... */
|
||||||
# include <ToolUtils.h>
|
# include <ToolUtils.h>
|
||||||
# include <LowMem.h>
|
# include <LowMem.h>
|
||||||
|
@@ -15,8 +15,13 @@
|
|||||||
|
|
||||||
#define NO_X11_INCLUDES
|
#define NO_X11_INCLUDES
|
||||||
#include "vim.h"
|
#include "vim.h"
|
||||||
|
#ifndef FEAT_GUI_MAC
|
||||||
|
# include <CoreServices/CoreServices.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined(MACOS_CONVERT) || defined(PROTO)
|
#if defined(MACOS_CONVERT) || defined(PROTO)
|
||||||
|
|
||||||
# ifdef PROTO
|
# ifdef PROTO
|
||||||
/* A few dummy types to be able to generate function prototypes. */
|
/* A few dummy types to be able to generate function prototypes. */
|
||||||
typedef int UniChar;
|
typedef int UniChar;
|
||||||
|
@@ -8,19 +8,20 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* os_macosx.c -- Mac specific things for Mac OS/X.
|
* os_macosx.m -- Mac specific things for Mac OS/X.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef MACOS_X_UNIX
|
#ifndef MACOS_X_UNIX
|
||||||
# ifdef HAVE_CONFIG_H /* Using Makefile. */
|
|
||||||
# include "vim.h"
|
|
||||||
# else
|
|
||||||
# include "os_unix.c" /* Using Project Builder */
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
Error: MACOS 9 is no longer supported in Vim 7
|
Error: MACOS 9 is no longer supported in Vim 7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "vim.h"
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
|
||||||
|
NSString *VimPboardType = @"VimPboardType";
|
||||||
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
void
|
void
|
||||||
Trace(char* fmt, ...)
|
Trace(char* fmt, ...)
|
||||||
@@ -609,3 +610,174 @@ mch_textdomain(const char *domain)
|
|||||||
return (char*)domain;
|
return (char*)domain;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef FEAT_CLIPBOARD
|
||||||
|
|
||||||
|
void
|
||||||
|
clip_mch_lose_selection(VimClipboard *cbd)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
clip_mch_own_selection(VimClipboard *cbd)
|
||||||
|
{
|
||||||
|
/* This is called whenever there is a new selection and 'guioptions'
|
||||||
|
* contains the "a" flag (automatically copy selection). Return TRUE, else
|
||||||
|
* the "a" flag does nothing. Note that there is no concept of "ownership"
|
||||||
|
* of the clipboard in Mac OS X.
|
||||||
|
*/
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
clip_mch_request_selection(VimClipboard *cbd)
|
||||||
|
{
|
||||||
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
|
||||||
|
NSPasteboard *pb = [NSPasteboard generalPasteboard];
|
||||||
|
NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType,
|
||||||
|
NSStringPboardType, nil];
|
||||||
|
NSString *bestType = [pb availableTypeFromArray:supportedTypes];
|
||||||
|
if (!bestType) goto releasepool;
|
||||||
|
|
||||||
|
int motion_type = MCHAR;
|
||||||
|
NSString *string = nil;
|
||||||
|
|
||||||
|
if ([bestType isEqual:VimPboardType])
|
||||||
|
{
|
||||||
|
/* This type should consist of an array with two objects:
|
||||||
|
* 1. motion type (NSNumber)
|
||||||
|
* 2. text (NSString)
|
||||||
|
* If this is not the case we fall back on using NSStringPboardType.
|
||||||
|
*/
|
||||||
|
id plist = [pb propertyListForType:VimPboardType];
|
||||||
|
if ([plist isKindOfClass:[NSArray class]] && [plist count] == 2)
|
||||||
|
{
|
||||||
|
id obj = [plist objectAtIndex:1];
|
||||||
|
if ([obj isKindOfClass:[NSString class]])
|
||||||
|
{
|
||||||
|
motion_type = [[plist objectAtIndex:0] intValue];
|
||||||
|
string = obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string)
|
||||||
|
{
|
||||||
|
/* Use NSStringPboardType. The motion type is set to line-wise if the
|
||||||
|
* string contains at least one EOL character, otherwise it is set to
|
||||||
|
* character-wise (block-wise is never used).
|
||||||
|
*/
|
||||||
|
NSMutableString *mstring =
|
||||||
|
[[pb stringForType:NSStringPboardType] mutableCopy];
|
||||||
|
if (!mstring) goto releasepool;
|
||||||
|
|
||||||
|
/* Replace unrecognized end-of-line sequences with \x0a (line feed). */
|
||||||
|
NSRange range = { 0, [mstring length] };
|
||||||
|
unsigned n = [mstring replaceOccurrencesOfString:@"\x0d\x0a"
|
||||||
|
withString:@"\x0a" options:0
|
||||||
|
range:range];
|
||||||
|
if (0 == n)
|
||||||
|
{
|
||||||
|
n = [mstring replaceOccurrencesOfString:@"\x0d" withString:@"\x0a"
|
||||||
|
options:0 range:range];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Scan for newline character to decide whether the string should be
|
||||||
|
* pasted line-wise or character-wise.
|
||||||
|
*/
|
||||||
|
motion_type = MCHAR;
|
||||||
|
if (0 < n || NSNotFound != [mstring rangeOfString:@"\n"].location)
|
||||||
|
motion_type = MLINE;
|
||||||
|
|
||||||
|
string = mstring;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(MCHAR == motion_type || MLINE == motion_type || MBLOCK == motion_type
|
||||||
|
|| MAUTO == motion_type))
|
||||||
|
motion_type = MCHAR;
|
||||||
|
|
||||||
|
char_u *str = (char_u*)[string UTF8String];
|
||||||
|
int len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
|
||||||
|
|
||||||
|
#ifdef FEAT_MBYTE
|
||||||
|
if (input_conv.vc_type != CONV_NONE)
|
||||||
|
str = string_convert(&input_conv, str, &len);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (str)
|
||||||
|
clip_yank_selection(motion_type, str, len, cbd);
|
||||||
|
|
||||||
|
#ifdef FEAT_MBYTE
|
||||||
|
if (input_conv.vc_type != CONV_NONE)
|
||||||
|
vim_free(str);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
releasepool:
|
||||||
|
[pool release];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Send the current selection to the clipboard.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
clip_mch_set_selection(VimClipboard *cbd)
|
||||||
|
{
|
||||||
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
|
||||||
|
/* If the '*' register isn't already filled in, fill it in now. */
|
||||||
|
cbd->owned = TRUE;
|
||||||
|
clip_get_selection(cbd);
|
||||||
|
cbd->owned = FALSE;
|
||||||
|
|
||||||
|
/* Get the text to put on the pasteboard. */
|
||||||
|
long_u llen = 0; char_u *str = 0;
|
||||||
|
int motion_type = clip_convert_selection(&str, &llen, cbd);
|
||||||
|
if (motion_type < 0)
|
||||||
|
goto releasepool;
|
||||||
|
|
||||||
|
/* TODO: Avoid overflow. */
|
||||||
|
int len = (int)llen;
|
||||||
|
#ifdef FEAT_MBYTE
|
||||||
|
if (output_conv.vc_type != CONV_NONE)
|
||||||
|
{
|
||||||
|
char_u *conv_str = string_convert(&output_conv, str, &len);
|
||||||
|
if (conv_str)
|
||||||
|
{
|
||||||
|
vim_free(str);
|
||||||
|
str = conv_str;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (len > 0)
|
||||||
|
{
|
||||||
|
NSString *string = [[NSString alloc]
|
||||||
|
initWithBytes:str length:len encoding:NSUTF8StringEncoding];
|
||||||
|
|
||||||
|
/* See clip_mch_request_selection() for info on pasteboard types. */
|
||||||
|
NSPasteboard *pb = [NSPasteboard generalPasteboard];
|
||||||
|
NSArray *supportedTypes = [NSArray arrayWithObjects:VimPboardType,
|
||||||
|
NSStringPboardType, nil];
|
||||||
|
[pb declareTypes:supportedTypes owner:nil];
|
||||||
|
|
||||||
|
NSNumber *motion = [NSNumber numberWithInt:motion_type];
|
||||||
|
NSArray *plist = [NSArray arrayWithObjects:motion, string, nil];
|
||||||
|
[pb setPropertyList:plist forType:VimPboardType];
|
||||||
|
|
||||||
|
[pb setString:string forType:NSStringPboardType];
|
||||||
|
|
||||||
|
[string release];
|
||||||
|
}
|
||||||
|
|
||||||
|
vim_free(str);
|
||||||
|
releasepool:
|
||||||
|
[pool release];
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* FEAT_CLIPBOARD */
|
@@ -93,6 +93,9 @@
|
|||||||
# ifndef HAVE_CONFIG_H
|
# ifndef HAVE_CONFIG_H
|
||||||
# define UNIX
|
# define UNIX
|
||||||
# endif
|
# endif
|
||||||
|
# ifndef FEAT_CLIPBOARD
|
||||||
|
# define FEAT_CLIPBOARD
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#if defined(MACOS_X) || defined(MACOS_CLASSIC)
|
#if defined(MACOS_X) || defined(MACOS_CLASSIC)
|
||||||
# define MACOS
|
# define MACOS
|
||||||
|
Reference in New Issue
Block a user