diff options
author | Vasil Dimov <vd@FreeBSD.org> | 2007-10-11 19:35:08 +0000 |
---|---|---|
committer | Vasil Dimov <vd@FreeBSD.org> | 2007-10-11 19:35:08 +0000 |
commit | e819d623ec8f95954200bd1be4f6728639b97cb2 (patch) | |
tree | 59423c8530a75477d28c7eb9f00b3c7c173d54f7 /chinese | |
parent | c2f042be13fb5f53c3aede42888dcee5e6930e76 (diff) | |
download | ports-e819d623ec8f95954200bd1be4f6728639b97cb2.tar.gz ports-e819d623ec8f95954200bd1be4f6728639b97cb2.zip |
Notes
Diffstat (limited to 'chinese')
-rw-r--r-- | chinese/Makefile | 1 | ||||
-rw-r--r-- | chinese/emacs20/Makefile | 38 | ||||
-rw-r--r-- | chinese/emacs20/files/Emacs | 2 | ||||
-rw-r--r-- | chinese/emacs20/files/dot.emacs | 26 | ||||
-rw-r--r-- | chinese/emacs20/files/emacs20-xim-20000713.diff | 746 | ||||
-rw-r--r-- | chinese/emacs20/pkg-message | 10 |
6 files changed, 0 insertions, 823 deletions
diff --git a/chinese/Makefile b/chinese/Makefile index 4f4ad030b315..2a1138250f8d 100644 --- a/chinese/Makefile +++ b/chinese/Makefile @@ -34,7 +34,6 @@ SUBDIR += dfsongsd SUBDIR += dictd-database SUBDIR += docproj - SUBDIR += emacs20 SUBDIR += enscript SUBDIR += eterm SUBDIR += fcitx diff --git a/chinese/emacs20/Makefile b/chinese/emacs20/Makefile deleted file mode 100644 index 74ad207bc48c..000000000000 --- a/chinese/emacs20/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -# ex:ts=8 -# Ports collection makefile for: emacs20 with XIM and a little zh-l10n -# Date created: Sat Nov 11, 2000 -# Whom: Clive Lin <clive@CirX.ORG> -# -# $FreeBSD$ -# - -CATEGORIES= chinese - -MASTERDIR= ${.CURDIR}/../../editors/emacs20 - -MAINTAINER= clive@FreeBSD.org - -DEPRECATED= emacs20 and related ports are obsolete; please use a more recent version -EXPIRATION_DATE= 2007-08-19 - -WITH_XPG4= yes - -PKGMESSAGE= ${.CURDIR}/pkg-message - -PLIST= ${WRKDIR}/pkg-plist - -pre-patch: - @( cd ${WRKSRC}; \ - ${PATCH} -sp1 < ${.CURDIR}/files/emacs20-xim-20000713.diff ; ) - -post-patch: - @${ECHO_CMD} "share/emacs/%%EMACS_VER%%/etc/Emacs" >> ${WRKDIR}/pkg-plist - @${ECHO_CMD} "share/emacs/%%EMACS_VER%%/etc/dot.emacs" >> ${WRKDIR}/pkg-plist - @${CAT} ${MASTERDIR}/pkg-plist >> ${WRKDIR}/pkg-plist - -post-install:: - ${INSTALL} -c ${.CURDIR}/files/Emacs ${PREFIX}/share/emacs/${PORTVERSION}/etc - ${INSTALL} -c ${.CURDIR}/files/dot.emacs ${PREFIX}/share/emacs/${PORTVERSION}/etc - @${CAT} ${PKGMESSAGE} - -.include "${MASTERDIR}/Makefile" diff --git a/chinese/emacs20/files/Emacs b/chinese/emacs20/files/Emacs deleted file mode 100644 index 6e162b334fe0..000000000000 --- a/chinese/emacs20/files/Emacs +++ /dev/null @@ -1,2 +0,0 @@ -Emacs.Font: fontset-16 -Emacs.Fontset-0: -*-*-medium-r-normal-*-16-*-*-*-*-*-fontset-16 diff --git a/chinese/emacs20/files/dot.emacs b/chinese/emacs20/files/dot.emacs deleted file mode 100644 index b07c6f694741..000000000000 --- a/chinese/emacs20/files/dot.emacs +++ /dev/null @@ -1,26 +0,0 @@ -;; Set environment to Chinese-Big5 -(set-language-environment 'chinese-big5) -(set-keyboard-coding-system 'chinese-big5) -(set-terminal-coding-system 'chinese-big5) -(set-buffer-file-coding-system 'chinese-big5) -(set-selection-coding-system 'chinese-big5) -(modify-coding-system-alist 'process "*" 'chinese-big5) -;; Do not conflict with xcin hook -(global-set-key (kbd "M-SPC") 'set-mark-command) -;; --------------------------------------------------------------------------- -;; To get emacs a bit more consistent, replace all yes or no questions with -;; simple y or n. -;; --------------------------------------------------------------------------- -;;(fset 'yes-or-no-p 'y-or-n-p) -;; -- Use Windows(tm) style selection -;;(custom-set-variables -;; '(pc-selection-mode t nil (pc-select))) -;; -- It's possible to use Chinese with liece IRC client -;;(custom-set-variables -;; '(liece-mime-charset-for-write (quote cn-big5)) -;; '(liece-mime-charset-for-read (quote cn-big5))) -;; To make sure you get as much highlighting as possible -;; (global-font-lock-mode t) -;; (setq-default font-lock-maximum-decoration t) -;; Don't ask me more about emacs customization ! You should read the -;; manual or just ask google.com. diff --git a/chinese/emacs20/files/emacs20-xim-20000713.diff b/chinese/emacs20/files/emacs20-xim-20000713.diff deleted file mode 100644 index 60ea83bfb5f1..000000000000 --- a/chinese/emacs20/files/emacs20-xim-20000713.diff +++ /dev/null @@ -1,746 +0,0 @@ -diff -Naurw emacs-20.7.orig/src/xfns.c emacs-20.7/src/xfns.c ---- emacs-20.7.orig/src/xfns.c Thu Jul 1 09:09:39 1999 -+++ emacs-20.7/src/xfns.c Sat Jun 17 00:18:36 2000 -@@ -2719,6 +2719,259 @@ - } - #endif - -+/* Support routines for XIC (X Input Context). */ -+#ifdef HAVE_X_I18N -+ -+/* Create X fontset. */ -+static XFontSet -+xic_create_xfontset (f, base_fontname) -+ struct frame *f; -+ char *base_fontname; -+{ -+ XFontSet xfs; -+ char **missing_list; -+ int missing_count; -+ char *def_string; -+ -+ xfs = XCreateFontSet (FRAME_X_DISPLAY (f), -+ base_fontname, &missing_list, -+ &missing_count, &def_string); -+ if (missing_list) -+ XFreeStringList (missing_list); -+ /* Don't need to free def_string. */ -+ -+ return xfs; -+} -+ -+/* Supported XIM styles, ordered in preferences. */ -+static XIMStyle supported_styles[] = -+{ -+ XIMPreeditPosition | XIMStatusArea, -+ XIMPreeditPosition | XIMStatusNothing, -+ XIMPreeditPosition | XIMStatusNone, -+ XIMPreeditNothing | XIMStatusArea, -+ XIMPreeditNothing | XIMStatusNothing, -+ XIMPreeditNothing | XIMStatusNone, -+ XIMPreeditNone | XIMStatusArea, -+ XIMPreeditNone | XIMStatusNothing, -+ XIMPreeditNone | XIMStatusNone, -+ 0, -+}; -+ -+/* Choose the best style, given: -+ * - user preferences (already checked to be supported by Emacs) -+ * - styles supported by the input method */ -+#define DEFAULTStyle (XIMPreeditNothing | XIMStatusNothing) -+static XIMStyle -+best_style (user, xim) -+ XIMStyles *user; -+ XIMStyles *xim; -+{ -+ int i, j; -+ -+ for (i = 0; i < user->count_styles; i++) -+ { -+ for (j = 0; j < xim->count_styles; j++) -+ { -+ if (user->supported_styles[i] == xim->supported_styles[j]) -+ return user->supported_styles[i]; -+ } -+ } -+ return DEFAULTStyle; /* Default Style */ -+} -+ -+/* Create XIC for a frame. */ -+void -+xic_create_frame (f) -+ struct frame *f; -+{ -+#ifndef X_I18N_INHIBITED -+ XIM xim; -+ XIC xic = NULL; -+ XFontSet xfs = NULL; -+ static XIMStyle xic_style; -+ -+ if (FRAME_XIC (f)) -+ return; -+ xim = FRAME_X_XIM (f); -+ -+ if (xim) -+ { -+ XRectangle s_area = {0, 0, 1, 1}; -+ XPoint spot = {0, 1}; -+ XVaNestedList preedit_attr; -+ XVaNestedList status_attr; -+ static const char DEFAULT_FONT[] = "-*-*-*-r-normal--14-*-*-*-*-*-*-*"; -+ char *base_fontname; -+ int fontset; -+ -+ /* Create X fontset. */ -+ fontset = FRAME_FONTSET (f); -+ if (fontset < 0) -+ base_fontname = DEFAULT_FONT; -+ else -+ { -+ struct fontset_info *fontsetp; -+ int len = 0; -+ int i; -+ -+ fontsetp = FRAME_FONTSET_DATA (f)->fontset_table[fontset]; -+ for (i = 0; i <= MAX_CHARSET; i++) -+ if (fontsetp->fontname[i]) -+ len += strlen (fontsetp->fontname[i]) + 1; -+ base_fontname = alloca (len); -+ strcpy (base_fontname, fontsetp->fontname[CHARSET_ASCII]); -+ for (i = MIN_CHARSET_OFFICIAL_DIMENSION1; i <= MAX_CHARSET; i++) -+ if (fontsetp->fontname[i]) -+ { -+ strcat (base_fontname, ","); -+ strcat (base_fontname, fontsetp->fontname[i]); -+ } -+ } -+ xfs = xic_create_xfontset (f, base_fontname); -+ -+ /* Determine XIC style. */ -+ if (xic_style == 0) -+ { -+ XIMStyles supported_list; -+ supported_list.count_styles = sizeof (supported_styles) / sizeof (supported_styles[0]); -+ supported_list.supported_styles = supported_styles; -+ xic_style = best_style (&supported_list, FRAME_X_XIM_STYLES (f)); -+ } -+ -+ preedit_attr = XVaCreateNestedList (0, -+ XNFontSet, xfs, -+ XNForeground, FRAME_FOREGROUND_PIXEL (f), -+ XNBackground, FRAME_BACKGROUND_PIXEL (f), -+ xic_style & XIMPreeditPosition ? XNSpotLocation : NULL, &spot, -+ NULL); -+ status_attr = XVaCreateNestedList (0, -+ XNArea, &s_area, -+ XNFontSet, xfs, -+ XNForeground, FRAME_FOREGROUND_PIXEL (f), -+ XNBackground, FRAME_BACKGROUND_PIXEL (f), -+ NULL); -+ -+ xic = XCreateIC (xim, -+ XNInputStyle, xic_style, -+ XNClientWindow, FRAME_X_WINDOW(f), -+ XNFocusWindow, FRAME_X_WINDOW(f), -+ XNStatusAttributes, status_attr, -+ XNPreeditAttributes, preedit_attr, -+ NULL); -+ XFree (preedit_attr); -+ XFree (status_attr); -+ } -+ -+ FRAME_XIC (f) = xic; -+ FRAME_XIC_STYLE (f) = xic_style; -+ FRAME_XIC_FONTSET (f) = xfs; -+#else /* X_I18N_INHIBITED */ -+ FRAME_XIC (f) = NULL; -+ FRAME_XIC_STYLE (f) = 0; -+ FRAME_XIC_FONTSET (f) = NULL; -+#endif /* X_I18N_INHIBITED */ -+} -+ -+/* Destroy XIC for a frame. */ -+void -+xic_destroy_frame (f) -+ struct frame *f; -+{ -+ if (FRAME_XIC (f) == NULL) -+ return; -+ -+ XDestroyIC (FRAME_XIC (f)); -+ if (FRAME_XIC_FONTSET (f)) -+ XFreeFontSet (FRAME_X_DISPLAY (f), FRAME_XIC_FONTSET (f)); -+ -+ FRAME_XIC (f) = NULL; -+ FRAME_XIC_FONTSET (f) = NULL; -+} -+ -+/* Place preedit area for XIC in cursor position. */ -+void -+xic_set_preeditarea (f, x, y) -+ struct frame *f; -+ int x, y; -+{ -+ XVaNestedList attr; -+ XPoint spot; -+ -+ spot.x = CHAR_TO_PIXEL_COL (f, x); -+ spot.y = CHAR_TO_PIXEL_ROW (f, y) + FONT_BASE (FRAME_FONT (f)); -+ attr = XVaCreateNestedList (0, -+ XNSpotLocation, &spot, -+ NULL); -+ XSetICValues (FRAME_XIC (f), XNPreeditAttributes, attr, NULL); -+ XFree (attr); -+} -+ -+/* Place status area for XIC in bottom right corner. */ -+void -+xic_set_statusarea (f) -+ struct frame *f; -+{ -+ XIC xic = FRAME_XIC (f); -+ XVaNestedList attr; -+ XRectangle area; -+ XRectangle *needed; -+ -+ /* Basically, I follow the way of XEmacs20.4. */ -+ /* Negotiate geometry of status area. */ -+ /* If input method has existing status area, use its current size */ -+ area.x = area.y = area.width = area.height = 0; -+ attr = XVaCreateNestedList (0, XNAreaNeeded, &area, NULL); -+ XSetICValues (xic, XNStatusAttributes, attr, NULL); -+ XFree (attr); -+ -+ attr = XVaCreateNestedList (0, XNAreaNeeded, &needed, NULL); -+ XGetICValues (xic, XNStatusAttributes, attr, NULL); -+ XFree (attr); -+ -+ if (needed->width == 0) /* Use XNArea instead of XNAreaNeeded */ -+ { -+ attr = XVaCreateNestedList (0, XNArea, &needed, NULL); -+ XGetICValues (xic, XNStatusAttributes, attr, NULL); -+ XFree (attr); -+ } -+ -+ area.width = needed->width; -+ area.height = needed->height; -+ area.x = PIXEL_WIDTH (f) - area.width - FRAME_INTERNAL_BORDER_WIDTH (f); -+ area.y = PIXEL_HEIGHT (f) - area.height - FRAME_MENUBAR_HEIGHT (f) - FRAME_INTERNAL_BORDER_WIDTH (f); -+ XFree(needed); -+ -+ attr = XVaCreateNestedList (0, XNArea, &area, NULL); -+ XSetICValues(xic, XNStatusAttributes, attr, NULL); -+ XFree(attr); -+} -+ -+/* Set X fontset for XIC, called when a new Emacs fontset is chosen. */ -+void -+xic_set_xfontset (f, base_fontname) -+ struct frame *f; -+ char *base_fontname; -+{ -+ XVaNestedList attr; -+ XFontSet xfs; -+ -+ xfs = xic_create_xfontset (f, base_fontname); -+ -+ attr = XVaCreateNestedList (0, XNFontSet, xfs, NULL); -+ if (FRAME_XIC_STYLE (f) & XIMPreeditPosition) -+ XSetICValues (FRAME_XIC (f), XNPreeditAttributes, attr, NULL); -+ if (FRAME_XIC_STYLE (f) & XIMStatusArea) -+ XSetICValues (FRAME_XIC (f), XNStatusAttributes, attr, NULL); -+ XFree (attr); -+ -+ if (FRAME_XIC_FONTSET (f)) -+ XFreeFontSet (FRAME_X_DISPLAY (f), FRAME_XIC_FONTSET (f)); -+ FRAME_XIC_FONTSET (f) = xfs; -+} -+#endif /* HAVE_X_I18N */ -+ -+ - #ifdef USE_X_TOOLKIT - - /* Create and set up the X widget for frame F. */ -@@ -2876,34 +3129,8 @@ - XSetClassHint (FRAME_X_DISPLAY (f), XtWindow (shell_widget), &class_hints); - - #ifdef HAVE_X_I18N --#ifndef X_I18N_INHIBITED -- { -- XIM xim; -- XIC xic = NULL; -- -- xim = XOpenIM (FRAME_X_DISPLAY (f), NULL, NULL, NULL); -- -- if (xim) -- { -- xic = XCreateIC (xim, -- XNInputStyle, XIMPreeditNothing | XIMStatusNothing, -- XNClientWindow, FRAME_X_WINDOW(f), -- XNFocusWindow, FRAME_X_WINDOW(f), -- NULL); -- -- if (xic == 0) -- { -- XCloseIM (xim); -- xim = NULL; -- } -- } -- FRAME_XIM (f) = xim; -- FRAME_XIC (f) = xic; -- } --#else /* X_I18N_INHIBITED */ -- FRAME_XIM (f) = 0; -- FRAME_XIC (f) = 0; --#endif /* X_I18N_INHIBITED */ -+ FRAME_XIC (f) = NULL; -+ xic_create_frame (f); - #endif /* HAVE_X_I18N */ - - f->output_data.x->wm_hints.input = True; -@@ -2928,6 +3155,16 @@ - - /* Make all the standard events reach the Emacs frame. */ - attributes.event_mask = STANDARD_EVENT_SET; -+#ifdef HAVE_X_I18N -+ if (FRAME_XIC (f)) -+ { -+ /* XIM server might require some X events. */ -+ unsigned long fevent = NoEventMask; -+ -+ XGetICValues(FRAME_XIC (f), XNFilterEvents, &fevent, NULL); -+ attributes.event_mask |= fevent; -+ } -+#endif /* HAVE_X_I18N */ - attribute_mask = CWEventMask; - XChangeWindowAttributes (XtDisplay (shell_widget), XtWindow (shell_widget), - attribute_mask, &attributes); -@@ -2998,38 +3235,21 @@ - InputOutput, /* class */ - FRAME_X_DISPLAY_INFO (f)->visual, - attribute_mask, &attributes); --#ifdef HAVE_X_I18N --#ifndef X_I18N_INHIBITED -- { -- XIM xim; -- XIC xic = NULL; - -- xim = XOpenIM (FRAME_X_DISPLAY(f), NULL, NULL, NULL); -- -- if (xim) -- { -- xic = XCreateIC (xim, -- XNInputStyle, XIMPreeditNothing | XIMStatusNothing, -- XNClientWindow, FRAME_X_WINDOW(f), -- XNFocusWindow, FRAME_X_WINDOW(f), -- NULL); -- -- if (!xic) -+#ifdef HAVE_X_I18N -+ xic_create_frame (f); -+ if (FRAME_XIC (f)) - { -- XCloseIM (xim); -- xim = NULL; -- } -- } -+ /* XIM server might require some X events. */ -+ unsigned long fevent = NoEventMask; - -- FRAME_XIM (f) = xim; -- FRAME_XIC (f) = xic; -+ XGetICValues(FRAME_XIC (f), XNFilterEvents, &fevent, NULL); -+ attributes.event_mask |= fevent; -+ attribute_mask = CWEventMask; -+ XChangeWindowAttributes (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), -+ attribute_mask, &attributes); - } --#else /* X_I18N_INHIBITED */ -- FRAME_XIM (f) = 0; -- FRAME_XIC (f) = 0; --#endif /* X_I18N_INHIBITED */ - #endif /* HAVE_X_I18N */ -- - validate_x_resource_name (); - - class_hints.res_name = (char *) XSTRING (Vx_resource_name)->data; -diff -Naurw emacs-20.7.orig/src/xterm.c emacs-20.7/src/xterm.c ---- emacs-20.7.orig/src/xterm.c Mon Aug 2 09:16:43 1999 -+++ emacs-20.7/src/xterm.c Wed Jul 12 23:28:40 2000 -@@ -3791,9 +3791,6 @@ - int prefix; - Lisp_Object part; - struct x_display_info *dpyinfo; --#ifdef HAVE_X_I18N -- Status status_return; --#endif - - if (interrupt_input_blocked) - { -@@ -3862,7 +3859,7 @@ - event.xclient.window); - /* The necessity of the following line took me - a full work-day to decipher from the docs!! */ -- if (f1 != 0 && FRAME_XIC (f1) && XFilterEvent (&event, None)) -+ if (XFilterEvent (&event, f1 ? FRAME_X_WINDOW(f1) : None)) - break; - } - #endif -@@ -4235,18 +4232,30 @@ - #ifdef HAVE_X_I18N - if (FRAME_XIC (f)) - { -- /* The necessity of the following line took me -- a full work-day to decipher from the docs!! */ -- if (XFilterEvent (&event, None)) -- break; -+ unsigned char *copy_bufptr = copy_buffer; -+ int copy_bufsiz = sizeof (copy_buffer); -+ Status status_return; -+ -+ nbytes = XmbLookupString (FRAME_XIC (f), -+ &event.xkey, copy_bufptr, -+ copy_bufsiz, &keysym, -+ &status_return); -+ if (status_return == XBufferOverflow) -+ { -+ copy_bufsiz = nbytes + 1; -+ copy_bufptr = (char *) alloca (copy_bufsiz); - nbytes = XmbLookupString (FRAME_XIC (f), -- &event.xkey, copy_buffer, -- 80, &keysym, -+ &event.xkey, copy_bufptr, -+ copy_bufsiz, &keysym, - &status_return); -+ } - if (status_return == XLookupNone) - break; - else if (status_return == XLookupChars) -+ { - keysym = NoSymbol; -+ modifiers = 0; -+ } - else if (status_return != XLookupKeySym - && status_return != XLookupBoth) - abort (); -@@ -4378,7 +4387,10 @@ - else - abort (); - } -- goto OTHER; -+ break; -+ -+ case KeyRelease: -+ break; - - /* Here's a possible interpretation of the whole - FocusIn-EnterNotify FocusOut-LeaveNotify mess. If you get a -@@ -4515,6 +4527,13 @@ - x_real_positions (f, &f->output_data.x->left_pos, - &f->output_data.x->top_pos); - -+#ifdef HAVE_X_I18N -+ if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMStatusArea)) -+ { -+ xic_set_statusarea (f); -+ } -+#endif -+ - if (f->output_data.x->parent_desc != FRAME_X_DISPLAY_INFO (f)->root_window) - { - /* Since the WM decorations come below top_pos now, -@@ -4992,6 +5011,13 @@ - /* Those are the only two we have implemented! */ - abort (); - -+#ifdef HAVE_X_I18N -+ if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMPreeditPosition)) -+ { -+ xic_set_preeditarea (f, x, y); -+ } -+#endif -+ - UNBLOCK_INPUT; - } - -@@ -5463,9 +5489,176 @@ - FS_LOAD_FONT (f, FRAME_X_FONT_TABLE (f), - CHARSET_ASCII, fontsetp->fontname[CHARSET_ASCII], fontset); - -+#ifdef HAVE_X_I18N -+ if (FRAME_XIC (f) -+ && (FRAME_XIC_STYLE (f) & (XIMPreeditPosition | XIMStatusArea))) -+ { -+ xic_set_xfontset (f, fontsetp->fontname[CHARSET_ASCII]); -+ } -+#endif /* HAVE_X_I18N */ - return build_string (fontsetname); - } - -+ -+/* Support routines for XIM (X Input Method). */ -+#ifdef HAVE_X_I18N -+ -+#ifdef HAVE_X11R6 -+/* XIM destroy callback function, -+ which is called whenever the connected XIM server dies. -+ Clear XIM information. */ -+static void -+xim_destroy_callback (xim, client_data, call_data) -+ XIM xim; -+ XPointer client_data; -+ XPointer call_data; -+{ -+ struct x_display_info *dpyinfo = (struct x_display_info *)client_data; -+ Lisp_Object frame, tail; -+ -+ BLOCK_INPUT; -+ /* Don't need to call XDestroyIC. */ -+ FOR_EACH_FRAME (tail, frame) -+ if (FRAME_X_DISPLAY_INFO (XFRAME (frame)) == dpyinfo) -+ { -+ FRAME_XIC (XFRAME (frame)) = NULL; -+ if (FRAME_XIC_FONTSET (XFRAME (frame))) -+ { -+ XFreeFontSet (FRAME_X_DISPLAY (XFRAME (frame)), FRAME_XIC_FONTSET (XFRAME (frame))); -+ FRAME_XIC_FONTSET (XFRAME (frame)) = NULL; -+ } -+ } -+ -+ /* Don't need to call XCloseIM. */ -+ dpyinfo->xim = NULL; -+ XFree (dpyinfo->xim_styles); -+ UNBLOCK_INPUT; -+} -+#endif /* HAVE_X11R6 */ -+ -+/* Open the connection with XIM server. */ -+static void -+xim_open_dpy (dpyinfo, resource_name) -+ struct x_display_info *dpyinfo; -+ char *resource_name; -+{ -+ XIM xim; -+ -+ xim = XOpenIM (dpyinfo->display, dpyinfo->xrdb, resource_name, EMACS_CLASS); -+ dpyinfo->xim = xim; -+ -+ if (xim) -+ { -+ XIMValuesList *xim_values_list; -+#ifdef HAVE_X11R6 -+ XIMCallback destroy; -+#endif -+ -+ /* Get supported styles and XIM values */ -+ XGetIMValues (xim, -+ XNQueryInputStyle, &dpyinfo->xim_styles, -+ NULL); -+#ifdef HAVE_X11R6 -+ destroy.callback = xim_destroy_callback; -+ destroy.client_data = (XPointer)dpyinfo; -+ XSetIMValues (xim, XNDestroyCallback, &destroy, NULL); -+#endif -+ } -+} -+ -+#ifdef HAVE_X11R6 -+struct xim_inst_t -+{ -+ struct x_display_info *dpyinfo; -+ char *resource_name; -+}; -+ -+/* XIM instantiate callback function, -+ which is called whenever an XIM server is available. */ -+static void -+xim_instantiate_callback(display, client_data, call_data) -+ Display *display; -+ XPointer client_data; -+ XPointer call_data; -+{ -+ struct xim_inst_t *xim_inst = (struct xim_inst_t *)client_data; -+ struct x_display_info *dpyinfo = xim_inst->dpyinfo; -+ -+ /* We don't support multiple XIM connections. */ -+ if (dpyinfo->xim) -+ return; -+ -+ xim_open_dpy (dpyinfo, xim_inst->resource_name); -+ -+ /* Create XIC for the existing frames on the same display, -+ as long as they have no XIC. */ -+ if (dpyinfo->xim && dpyinfo->reference_count > 0) -+ { -+ Lisp_Object tail, frame; -+ -+ BLOCK_INPUT; -+ FOR_EACH_FRAME (tail, frame) -+ if (FRAME_X_DISPLAY_INFO (XFRAME (frame)) == xim_inst->dpyinfo) -+ if (FRAME_XIC (XFRAME (frame)) == NULL) -+ { -+ xic_create_frame (XFRAME (frame)); -+ if (FRAME_XIC_STYLE (XFRAME (frame)) & XIMStatusArea) -+ xic_set_statusarea (XFRAME (frame)); -+ if (FRAME_XIC_STYLE (XFRAME (frame)) & XIMPreeditPosition) -+ xic_set_preeditarea (XFRAME (frame), -+ FRAME_CURSOR_X (XFRAME (frame)), -+ FRAME_CURSOR_Y (XFRAME (frame))); -+ } -+ UNBLOCK_INPUT; -+ } -+} -+#endif /* HAVE_X11R6 */ -+ -+/* It's dependent on X11R5 or X11R6 to open the connection with XIM server. -+ On X11R5, open the connection only at the first time. -+ On X11R6, open the connection in XIM instantiate callback function. */ -+static void -+xim_initialize (dpyinfo, resource_name) -+ struct x_display_info *dpyinfo; -+ char *resource_name; -+{ -+#ifdef HAVE_X11R6 -+ struct xim_inst_t *xim_inst; -+ int len; -+ -+ dpyinfo->xim = NULL; -+ xim_inst = (struct xim_inst_t *) xmalloc (sizeof (struct xim_inst_t)); -+ xim_inst->dpyinfo = dpyinfo; -+ len = strlen (resource_name); -+ xim_inst->resource_name = (char *) xmalloc (len + 1); -+ bcopy (resource_name, xim_inst->resource_name, len + 1); -+ XRegisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb, -+ resource_name, EMACS_CLASS, -+ xim_instantiate_callback, (XPointer)xim_inst); -+#else /* not HAVE_X11R6 */ -+ dpyinfo->xim = NULL; -+ xim_open_dpy (dpyinfo, resource_name); -+#endif /* not HAVE_X11R6 */ -+} -+ -+/* Close the connection with XIM server. */ -+static void -+xim_close_dpy (dpyinfo) -+ struct x_display_info *dpyinfo; -+{ -+#ifdef HAVE_X11R6 -+ XUnregisterIMInstantiateCallback(dpyinfo->display, dpyinfo->xrdb, -+ NULL, EMACS_CLASS, -+ xim_instantiate_callback, NULL); -+#endif /* HAVE_X11R6 */ -+ XCloseIM (dpyinfo->xim); -+ dpyinfo->xim = NULL; -+ -+ XFree (dpyinfo->xim_styles); -+} -+#endif /* HAVE_X_I18N */ -+ -+ - /* Calculate the absolute position in frame F - from its current recorded position values and gravity. */ - -@@ -6175,15 +6368,9 @@ - if (f->output_data.x->icon_desc != 0) - XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->icon_desc); - #ifdef HAVE_X_I18N -- if (FRAME_XIM (f)) -+ if (FRAME_XIC (f)) - { -- XDestroyIC (FRAME_XIC (f)); --#if ! defined (SOLARIS2) || defined (HAVE_X11R6) -- /* This line causes crashes on Solaris with Openwin, -- due to an apparent bug in XCloseIM. -- X11R6 seems not to have the bug. */ -- XCloseIM (FRAME_XIM (f)); --#endif -+ xic_destroy_frame (f); - } - #endif - XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->window_desc); -@@ -7335,6 +7522,10 @@ - 1); - } - -+#ifdef HAVE_X_I18N -+ xim_initialize (dpyinfo, resource_name); -+#endif -+ - #ifdef subprocesses - /* This is only needed for distinguishing keyboard and process input. */ - if (connection != 0) -@@ -7440,6 +7631,11 @@ - if (--dpyinfo->kboard->reference_count == 0) - delete_kboard (dpyinfo->kboard); - #endif -+#ifdef HAVE_X_I18N -+ if (dpyinfo->xim) -+ xim_close_dpy (dpyinfo); -+#endif -+ - xfree (dpyinfo->font_table); - xfree (dpyinfo->x_id_name); - xfree (dpyinfo); -diff -Naurw emacs-20.7.orig/src/xterm.h emacs-20.7/src/xterm.h ---- emacs-20.7.orig/src/xterm.h Sun Aug 16 07:58:10 1998 -+++ emacs-20.7/src/xterm.h Sat Jun 17 00:18:37 2000 -@@ -297,6 +297,12 @@ - /* The null pixel used for filling a character background with - background color of a gc. */ - Pixmap null_pixel; -+ -+#ifdef HAVE_X_I18N -+ /* XIM(X Input method) */ -+ XIM xim; -+ XIMStyles *xim_styles; -+#endif - }; - - /* This is a chain of structures for all the X displays currently in use. */ -@@ -492,10 +498,11 @@ - char has_been_visible; - - #ifdef HAVE_X_I18N -- /* Input method. */ -- XIM xim; -+ /* XIM(X Input method) */ - /* Input context (currently, this means Compose key handler setup). */ - XIC xic; -+ XIMStyle xic_style; -+ XFontSet xic_xfs; - #endif - }; - -@@ -526,6 +533,7 @@ - #define FRAME_FONT(f) ((f)->output_data.x->font) - #define FRAME_FONTSET(f) ((f)->output_data.x->fontset) - #define FRAME_INTERNAL_BORDER_WIDTH(f) ((f)->output_data.x->internal_border_width) -+#define FRAME_MENUBAR_HEIGHT(f) ((f)->output_data.x->menubar_height) - #define FRAME_LINE_HEIGHT(f) ((f)->output_data.x->line_height) - - /* This gives the x_display_info structure for the display F is on. */ -@@ -546,8 +554,11 @@ - - #define FRAME_DESIRED_CURSOR(f) ((f)->output_data.x->desired_cursor) - --#define FRAME_XIM(f) ((f)->output_data.x->xim) -+#define FRAME_X_XIM(f) (FRAME_X_DISPLAY_INFO (f)->xim) -+#define FRAME_X_XIM_STYLES(f) (FRAME_X_DISPLAY_INFO (f)->xim_styles) - #define FRAME_XIC(f) ((f)->output_data.x->xic) -+#define FRAME_XIC_STYLE(f) ((f)->output_data.x->xic_style) -+#define FRAME_XIC_FONTSET(f) ((f)->output_data.x->xic_xfs) - - /* X-specific scroll bar stuff. */ - -@@ -877,6 +888,11 @@ - extern void x_set_border_pixel P_ ((struct frame *, int)); - extern void x_set_menu_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object)); - extern void x_implicitly_set_name P_ ((struct frame *, Lisp_Object, Lisp_Object)); -+extern void xic_create_frame P_ ((struct frame *)); -+extern void xic_destroy_frame P_ ((struct frame *)); -+extern void xic_set_preeditarea P_ ((struct frame *, int, int)); -+extern void xic_set_statusarea P_ ((struct frame *)); -+extern void xic_set_xfontset P_ ((struct frame *, char *)); - extern int x_pixel_width P_ ((struct frame *)); - extern int x_pixel_height P_ ((struct frame *)); - extern int x_char_width P_ ((struct frame *)); diff --git a/chinese/emacs20/pkg-message b/chinese/emacs20/pkg-message deleted file mode 100644 index 4daf1c24d2d6..000000000000 --- a/chinese/emacs20/pkg-message +++ /dev/null @@ -1,10 +0,0 @@ - -!!!! Notice !!!! - -1) You have to copy Emacs and dot.emacs within - ${PREFIX}/share/emacs/${EMACS_VER}/etc/ - into your home directory, and rename dot.emacs to .emacs, - in order to make it work. -2) Remember to install one input methods and set - environment varible XMODIFIERS ! - |