From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.devel Subject: Re: unicode merge failures 2007-10-12 Date: Fri, 12 Oct 2007 00:05:02 -0400 Message-ID: References: <61d4vlaatb.fsf@fencepost.gnu.org> <470EA52C.9030001@gnu.org> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: sea.gmane.org 1192162292 4842 80.91.229.12 (12 Oct 2007 04:11:32 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Fri, 12 Oct 2007 04:11:32 +0000 (UTC) Cc: emacs-unicode@gnu.org, emacs-devel@gnu.org, Miles Bader To: Jason Rumney Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Oct 12 06:11:20 2007 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1IgBmF-0008C5-5s for ged-emacs-devel@m.gmane.org; Fri, 12 Oct 2007 06:05:50 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IgBm7-0005NN-TE for ged-emacs-devel@m.gmane.org; Fri, 12 Oct 2007 00:05:23 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IgBm4-0005N8-QD for emacs-devel@gnu.org; Fri, 12 Oct 2007 00:05:20 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IgBm1-0005Lt-Qe for emacs-devel@gnu.org; Fri, 12 Oct 2007 00:05:20 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IgBm1-0005Lp-MU for emacs-devel@gnu.org; Fri, 12 Oct 2007 00:05:17 -0400 Original-Received: from tomts5.bellnexxia.net ([209.226.175.25] helo=tomts5-srv.bellnexxia.net) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IgBlp-0001jp-Qb; Fri, 12 Oct 2007 00:05:06 -0400 Original-Received: from ceviche.home ([70.55.141.81]) by tomts5-srv.bellnexxia.net (InterMail vM.5.01.06.13 201-253-122-130-113-20050324) with ESMTP id <20071012040503.KDCY17217.tomts5-srv.bellnexxia.net@ceviche.home>; Fri, 12 Oct 2007 00:05:03 -0400 Original-Received: by ceviche.home (Postfix, from userid 20848) id C4206B41BB; Fri, 12 Oct 2007 00:05:02 -0400 (EDT) In-Reply-To: (Stefan Monnier's message of "Thu\, 11 Oct 2007 21\:04\:46 -0400") User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/23.0.50 (gnu/linux) X-detected-kernel: by monty-python.gnu.org: Solaris 8 (1) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:80694 Archived-At: >>>>> "Stefan" =3D=3D Stefan Monnier writes: >> Miles Bader wrote: >>> M src/xdisp.c >>> M src/coding.c >>>=20 >> These two look like multi-tty wins - the only difference being that >> global variables are replaced with members of the terminal struct. >> The others are harder to judge, my approach would be to diff each one >> with its branch point, and decide which has the simpler changes, then >> try to manually apply the equivalent changes to the other branch's >> version. encoded-kb.el seems to have been completely rewritten for >> multi-tty, but the others look like the actual changes involved could be >> quite simple. > I'm looking into it. I believe the patch below makes it work (*very* lightly tested). Can people take a look at it and tell me if it makes sense? Stefan * looking for emacs@sv.gnu.org/emacs--unicode--0--patch-258 to compare with * comparing to emacs@sv.gnu.org/emacs--unicode--0--patch-258 A etc/buildobj.lst A tmp.diff M lisp/emacs-lisp/cl-loaddefs.el M src/chartab.c M lisp/ChangeLog M src/coding.h M src/coding.c M src/term.c M src/doc.c M src/ChangeLog.10 M src/w32term.c M src/alloc.c M lisp/term/w32-win.el M src/xterm.c M lisp/term/mac-win.el M lisp/international/encoded-kb.el M src/emacs.c M lisp/international/characters.el M src/xfaces.c M src/lread.c M lisp/language/ethio-util.el M lisp/version.el M src/terminal.c M src/fontset.c M src/xdisp.c M lisp/term/x-win.el M lisp/ps-print.el M src/Makefile.in M lisp/ldefs-boot.el M configure * modified files --- orig/configure +++ mod/configure @@ -18922,11 +18922,13 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include +#include /* for off_t */ + #include int main () { -return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0); +int (*fp) (FILE *, off_t, int) =3D fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } @@ -18966,11 +18968,13 @@ cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 -#include +#include /* for off_t */ + #include int main () { -return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0); +int (*fp) (FILE *, off_t, int) =3D fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } --- orig/lisp/international/encoded-kb.el +++ mod/lisp/international/encoded-kb.el @@ -333,53 +333,43 @@ (defun encoded-kbd-setup-display (display) "Set up a `input-decode-map' for `keyboard-coding-system' on DISPLAY. =20 -(put 'encoded-kbd-mode 'permanent-local t) -;;;###autoload -(define-minor-mode encoded-kbd-mode - "Toggle Encoded-kbd minor mode. -With arg, turn Encoded-kbd mode on if and only if arg is positive. - -You should not turn this mode on manually, instead use the command -\\[set-keyboard-coding-system] which turns on or off this mode -automatically. - -In Encoded-kbd mode, a text sent from keyboard is accepted -as a multilingual text encoded in a coding system set by -\\[set-keyboard-coding-system]." - :global t :group 'keyboard :group 'mule - - (if encoded-kbd-mode - ;; We are turning on Encoded-kbd mode. - (let ((coding (keyboard-coding-system)) - result) - (or saved-key-translation-map - (if (keymapp key-translation-map) - (setq saved-key-translation-map - (copy-keymap key-translation-map)) - (setq key-translation-map (make-sparse-keymap)))) - (or saved-input-mode - (setq saved-input-mode - (current-input-mode))) - (setq result (and coding (encoded-kbd-setup-keymap coding))) - (if result - (if (eq result 8) - (set-input-mode - (nth 0 saved-input-mode)=20 - (nth 1 saved-input-mode) - 'use-8th-bit - (nth 3 saved-input-mode))) - (setq encoded-kbd-mode nil - saved-key-translation-map nil - saved-input-mode nil) - (error "Unsupported coding system in Encoded-kbd mode: %S" - coding))) - - ;; We are turning off Encoded-kbd mode. - (when saved-input-mode - (setq key-translation-map saved-key-translation-map - saved-key-translation-map nil) - (apply 'set-input-mode saved-input-mode) - (setq saved-input-mode nil)))) +DISPLAY may be a display id, a frame, or nil for the selected frame's disp= lay." + (let ((frame (if (framep display) display (car (frames-on-display-list d= isplay))))) + (when frame + (with-selected-frame frame + ;; Remove any previous encoded-kb keymap from input-decode-map. + (let ((m input-decode-map)) + (if (equal (keymap-prompt m) "encoded-kb") + (setq input-decode-map (keymap-parent m)) + (while (keymap-parent m) + (if (equal (keymap-prompt (keymap-parent m)) "encoded-kb") + (set-keymap-parent m (keymap-parent (keymap-parent m)))) + (setq m (keymap-parent m))))) + + (if (keyboard-coding-system) + ;; We are turning on Encoded-kbd mode. + (let ((coding (keyboard-coding-system)) + (keymap (make-sparse-keymap "encoded-kb")) + (cim (current-input-mode)) + result) + (set-keymap-parent keymap input-decode-map) + (setq input-decode-map keymap) + (unless (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode) + (set-terminal-parameter nil 'encoded-kbd-saved-input-mode (nth 2 cim))) + (setq result (and coding (encoded-kbd-setup-keymap keymap coding))) + (if result + (when (and (eq result 8) + (memq (nth 2 cim) '(t nil))) + (set-input-meta-mode 'use-8th-bit)) + (set-terminal-parameter nil 'encoded-kbd-saved-input-meta-mode nil) + (error "Unsupported coding system in Encoded-kbd mode: %S" + coding))) + ;; We are turning off Encoded-kbd mode. + (when (and (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode) + (not (equal (nth 2 (current-input-mode)) + (terminal-parameter nil 'encoded-kbd-saved-input-meta-mode)))) + (set-input-meta-mode (terminal-parameter nil 'encoded-kbd-saved-input= -meta-mode))) + (set-terminal-parameter nil 'saved-input-meta-mode nil)))))) =20 (provide 'encoded-kb) =20 --- orig/lisp/term/mac-win.el +++ mod/lisp/term/mac-win.el @@ -2346,34 +2346,6 @@ (mac-dnd-drop-data event (selected-frame) window (cdr item) (car item) action))))) -;;; Do the actual Windows setup here; the above code just defines -;;; functions and variables that we use now. - -(setq command-line-args (x-handle-args command-line-args)) - -;;; Make sure we have a valid resource name. -(or (stringp x-resource-name) - (let (i) - (setq x-resource-name (invocation-name)) - - ;; Change any . or * characters in x-resource-name to hyphens, - ;; so as not to choke when we use it in X resource queries. - (while (setq i (string-match "[.*]" x-resource-name)) - (aset x-resource-name i ?-)))) - -(if (x-display-list) - ;; On Mac OS 8/9, Most coding systems used in code conversion for - ;; font names are not ready at the time when the terminal frame is - ;; created. So we reconstruct font name table for the initial - ;; frame. - (mac-clear-font-name-table) - (x-open-connection "Mac" - x-command-line-resources - ;; Exit Emacs with fatal error if this fails. - t)) - -(setq frame-creation-function 'x-create-frame-with-faces) - (setq font-encoding-alist (append '(("mac-roman" . mac-roman) --- orig/lisp/term/w32-win.el +++ mod/lisp/term/w32-win.el @@ -1076,44 +1076,6 @@ =20 See the documentation of `create-fontset-from-fontset-spec' for the format= .") =20 -;; Conditional on new-fontset so bootstrapping works on non-GUI compiles -(when (fboundp 'new-fontset) - ;; Setup the default fontset. - (setup-default-fontset) - ;; Create the standard fontset. - (create-fontset-from-fontset-spec w32-standard-fontset-spec t) - ;; Create fontset specified in X resources "Fontset-N" (N is 0, 1,..= .). - (create-fontset-from-x-resource)) - -;; Apply a geometry resource to the initial frame. Put it at the end -;; of the alist, so that anything specified on the command line takes -;; precedence. -(let* ((res-geometry (x-get-resource "geometry" "Geometry")) - parsed) - (if res-geometry - (progn - (setq parsed (x-parse-geometry res-geometry)) - ;; If the resource specifies a position, - ;; call the position and size "user-specified". - (if (or (assq 'top parsed) (assq 'left parsed)) - (setq parsed (cons '(user-position . t) - (cons '(user-size . t) parsed)))) - ;; All geometry parms apply to the initial frame. - (setq initial-frame-alist (append initial-frame-alist parsed)) - ;; The size parms apply to all frames. - (if (assq 'height parsed) - (push (cons 'height (cdr (assq 'height parsed))) - default-frame-alist)) - (if (assq 'width parsed) - (push (cons 'width (cdr (assq 'width parsed))) - default-frame-alist))))) - -;; Check the reverseVideo resource. -(let ((case-fold-search t)) - (let ((rv (x-get-resource "reverseVideo" "ReverseVideo"))) - (if (and rv (string-match "^\\(true\\|yes\\|on\\)$" rv)) - (push '(reverse . t) default-frame-alist)))) - (defun x-win-suspend-error () "Report an error when a suspend is attempted." (error "Suspending an Emacs running under W32 makes no sense")) @@ -1145,7 +1107,7 @@ ;; Append list of fontsets currently defined. ;; Conditional on new-fontset so bootstrapping works on non-GUI comp= iles (if (fboundp 'new-fontset) - (append w32-fixed-font-alist (list (generate-fontset-menu))))))) + (append w32-fixed-font-alist (list (generate-fontset-menu))))))) (if fonts (let (font) (while fonts @@ -1199,30 +1161,6 @@ (create-fontset-from-fontset-spec w32-standard-fontset-spec t) ;; Create fontset specified in X resources "Fontset-N" (N is 0, 1,...). (create-fontset-from-x-resource) - ;; Try to create a fontset from a font specification which comes - ;; from initial-frame-alist, default-frame-alist, or X resource. - ;; A font specification in command line argument (i.e. -fn XXXX) - ;; should be already in default-frame-alist as a `font' - ;; parameter. However, any font specifications in site-start - ;; library, user's init file (.emacs), and default.el are not - ;; yet handled here. - - (let ((font (or (cdr (assq 'font initial-frame-alist)) - (cdr (assq 'font default-frame-alist)) - (x-get-resource "font" "Font"))) - xlfd-fields resolved-name) - (if (and font - (not (query-fontset font)) - (setq resolved-name (x-resolve-font-name font)) - (setq xlfd-fields (x-decompose-font-name font))) - (if (string=3D "fontset" - (aref xlfd-fields xlfd-regexp-registry-subnum)) - (new-fontset font - (x-complement-fontset-spec xlfd-fields nil)) - ;; Create a fontset from FONT. The fontset name is - ;; generated from FONT. - (create-fontset-from-ascii-font font - resolved-name "startup")))) =20 ;; Apply a geometry resource to the initial frame. Put it at the end ;; of the alist, so that anything specified on the command line takes --- orig/lisp/term/x-win.el +++ mod/lisp/term/x-win.el @@ -2469,28 +2469,6 @@ ;; Create fontset specified in X resources "Fontset-N" (N is 0, 1, ...). (create-fontset-from-x-resource) =20 - ;; Try to create a fontset from a font specification which comes - ;; from initial-frame-alist, default-frame-alist, or X resource. - ;; A font specification in command line argument (i.e. -fn XXXX) - ;; should be already in default-frame-alist as a `font' - ;; parameter. However, any font specifications in site-start - ;; library, user's init file (.emacs), and default.el are not - ;; yet handled here. - - (let ((font (or (cdr (assq 'font initial-frame-alist)) - (cdr (assq 'font default-frame-alist)) - (x-get-resource "font" "Font"))) - xlfd-fields resolved-name) - (if (and font - (not (query-fontset font)) - (setq resolved-name (x-resolve-font-name font)) - (setq xlfd-fields (x-decompose-font-name font))) - (if (string=3D "fontset" (aref xlfd-fields xlfd-regexp-registry-subnum)) - (new-fontset font (x-complement-fontset-spec xlfd-fields nil)) - ;; Create a fontset from FONT. The fontset name is - ;; generated from FONT. - (create-fontset-from-ascii-font font resolved-name "startup")))) - ;; Set scroll bar mode to right if set by X resources. Default is left. (if (equal (x-get-resource "verticalScrollBars" "ScrollBars") "right") (customize-set-variable 'scroll-bar-mode 'right)) --- orig/lisp/version.el +++ mod/lisp/version.el @@ -30,7 +30,7 @@ (defconst emacs-copyright "Copyright (C) 2007 Free Software Foundation, In= c." "Short copyright string for this version of Emacs.") =20 -(defconst emacs-version "23.0.50" "\ +(defconst emacs-version "23.0.60" "\ Version numbers of this version of Emacs.") =20 (defconst emacs-major-version --- orig/src/ChangeLog.10 +++ mod/src/ChangeLog.10 @@ -12403,6 +12403,11 @@ * regex.c (re_error_msgid): Add an entry for REG_ERANGEX. (regex_compile): Return REG_ERANGEX if appropriate. =20 +2004-10-22 Kenichi Handa + + * editfns.c (Ftranslate_region_internal): New function. + (syms_of_editfns): Defsubr it. + 2004-10-22 Jan Dj=E4rv =20 * xfns.c (xic_create_xfontset): Initialize missing_list to NULL. --- orig/src/Makefile.in +++ mod/src/Makefile.in @@ -1007,7 +1007,7 @@ #endif =20 temacs${EXEEXT}: MAKE_PARALLEL $(LOCALCPP) $(STARTFILES) stamp-oldxmenu ${= obj} ${otherobj} OBJECTS_MACHINE prefix-args${EXEEXT} - echo "${obj} ${otherobj} " OBJECTS_MACHINE > buildobj.lst + echo "${obj} ${otherobj} " OBJECTS_MACHINE > ${etc}buildobj.lst $(LD) YMF_PASS_LDFLAGS (${STARTFLAGS} ${TEMACS_LDFLAGS}) $(LDFLAGS) \ -o temacs ${STARTFILES} ${obj} ${otherobj} \ OBJECTS_MACHINE ${LIBES} @@ -1133,7 +1133,7 @@ CRT0_COMPILE ${srcdir}/ecrt0.c dired.o: dired.c commands.h buffer.h $(config_h) character.h charset.h \ coding.h regex.h systime.h blockinput.h atimer.h -dispnew.o: dispnew.c systty.h systime.h commands.h process.h frame.h \ +dispnew.o: dispnew.c systime.h commands.h process.h frame.h \ window.h buffer.h dispextern.h termchar.h termopts.h termhooks.h cm.h \ disptab.h indent.h intervals.h \ xterm.h blockinput.h atimer.h character.h msdos.h composite.h keyboard.= h \ @@ -1156,7 +1156,7 @@ frame.o: frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.= h \ blockinput.h atimer.h systime.h buffer.h character.h fontset.h \ msdos.h dosfns.h dispextern.h w32term.h macterm.h termchar.h $(config_h) -fringe.o: fringe.c dispextern.h frame.h window.h buffer.h termhook.h $(con= fig_h) +fringe.o: fringe.c dispextern.h frame.h window.h buffer.h termhooks.h $(co= nfig_h) font.o: font.c dispextern.h frame.h window.h ccl.h character.h charset.h \ font.h $(config_h) ftfont.o: dispextern.h frame.h character.h charset.h font.h $(config_h) @@ -1188,7 +1188,7 @@ md5.o: md5.c md5.h $(config_h) minibuf.o: minibuf.c syntax.h dispextern.h frame.h window.h keyboard.h \ buffer.h commands.h character.h msdos.h $(INTERVAL_SRC) keymap.h \ - terhooks.h $(config_h) + termhooks.h $(config_h) mktime.o: mktime.c $(config_h) msdos.o: msdos.c msdos.h dosfns.h systime.h termhooks.h dispextern.h frame= .h \ termopts.h termchar.h character.h coding.h ccl.h disptab.h window.h \ @@ -1288,11 +1288,10 @@ keymap.h frame.h window.h dispextern.h $(INTERVAL_SRC) coding.h md5.h \ blockinput.h atimer.h systime.h xterm.h termhooks.h print.o: print.c process.h frame.h window.h buffer.h keyboard.h character.= h \ - $(config_h) dispextern.h termchar.h $(INTERVAL_SRC) msdos.h composite.h= \ + $(config_h) dispextern.h termchar.h $(INTERVAL_SRC) msdos.h composite.h= \ blockinput.h atimer.h systime.h lread.o: lread.c commands.h keyboard.h buffer.h epaths.h character.h \ - charset.h $(config_h) $(INTERVAL_SRC) termhooks.h coding.h msdos.h \ - blockinput.h atimer.h systime.h + charset.h $(config_h) $(INTERVAL_SRC) termhooks.h coding.h msdos.h =20 /* Text properties support */ textprop.o: textprop.c buffer.h window.h dispextern.h $(INTERVAL_SRC) \ @@ -1357,7 +1356,7 @@ rm -f temacs${EXEEXT} prefix-args${EXEEXT} core *.core \#* *.o libXMenu11= .a liblw.a rm -f ../etc/DOC rm -f bootstrap-emacs${EXEEXT} emacs-${version}${EXEEXT} - rm -f buildobj.lst + rm -f ${etc}buildobj.lst clean: mostlyclean rm -f emacs-*${EXEEXT} emacs${EXEEXT} /**/# This is used in making a distribution. --- orig/src/alloc.c +++ mod/src/alloc.c @@ -3070,51 +3070,6 @@ } =20 =20 -DEFUN ("make-char-table", Fmake_char_table, Smake_char_table, 1, 2, 0, - doc: /* Return a newly created char-table, with purpose PURPOSE. -Each element is initialized to INIT, which defaults to nil. -PURPOSE should be a symbol which has a `char-table-extra-slots' property. -The property's value should be an integer between 0 and 10. */) - (purpose, init) - register Lisp_Object purpose, init; -{ - Lisp_Object vector; - Lisp_Object n; - CHECK_SYMBOL (purpose); - n =3D Fget (purpose, Qchar_table_extra_slots); - CHECK_NUMBER (n); - if (XINT (n) < 0 || XINT (n) > 10) - args_out_of_range (n, Qnil); - /* Add 2 to the size for the defalt and parent slots. */ - vector =3D Fmake_vector (make_number (CHAR_TABLE_STANDARD_SLOTS + XINT (= n)), - init); - XSETPVECTYPE (XVECTOR (vector), PVEC_CHAR_TABLE); - XCHAR_TABLE (vector)->top =3D Qt; - XCHAR_TABLE (vector)->parent =3D Qnil; - XCHAR_TABLE (vector)->purpose =3D purpose; - XSETCHAR_TABLE (vector, XCHAR_TABLE (vector)); - return vector; -} - - -/* Return a newly created sub char table with slots initialized by INIT. - Since a sub char table does not appear as a top level Emacs Lisp - object, we don't need a Lisp interface to make it. */ - -Lisp_Object -make_sub_char_table (init) - Lisp_Object init; -{ - Lisp_Object vector - =3D Fmake_vector (make_number (SUB_CHAR_TABLE_STANDARD_SLOTS), init); - XSETPVECTYPE (XVECTOR (vector), PVEC_CHAR_TABLE); - XCHAR_TABLE (vector)->top =3D Qnil; - XCHAR_TABLE (vector)->defalt =3D Qnil; - XSETCHAR_TABLE (vector, XCHAR_TABLE (vector)); - return vector; -} - - DEFUN ("vector", Fvector, Svector, 0, MANY, 0, doc: /* Return a newly created vector with specified arguments as e= lements. Any number of arguments, even zero arguments, are allowed. @@ -4964,7 +4919,10 @@ for (i =3D 0; i < size; i++) vec->contents[i] =3D Fpurecopy (XVECTOR (obj)->contents[i]); if (COMPILEDP (obj)) - XSETCOMPILED (obj, vec); + { + XSETPVECTYPE (vec, PVEC_COMPILED); + XSETCOMPILED (obj, vec); + } else XSETVECTOR (obj, vec); return obj; --- orig/src/chartab.c +++ mod/src/chartab.c @@ -7,7 +7,7 @@ =20 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) +the Free Software Foundation; either version 3, or (at your option) any later version. =20 GNU Emacs is distributed in the hope that it will be useful, @@ -85,6 +85,7 @@ =20 size =3D VECSIZE (struct Lisp_Char_Table) - 1 + n_extras; vector =3D Fmake_vector (make_number (size), init); + XSETPVECTYPE (XVECTOR (vector), PVEC_CHAR_TABLE); XCHAR_TABLE (vector)->parent =3D Qnil; XCHAR_TABLE (vector)->purpose =3D purpose; XSETCHAR_TABLE (vector, XCHAR_TABLE (vector)); @@ -100,6 +101,7 @@ int size =3D VECSIZE (struct Lisp_Sub_Char_Table) - 1 + chartab_size[dep= th]; =20 table =3D Fmake_vector (make_number (size), defalt); + XSETPVECTYPE (XVECTOR (table), PVEC_SUB_CHAR_TABLE); XSUB_CHAR_TABLE (table)->depth =3D make_number (depth); XSUB_CHAR_TABLE (table)->min_char =3D make_number (min_char); XSETSUB_CHAR_TABLE (table, XSUB_CHAR_TABLE (table)); @@ -156,6 +158,7 @@ int i; =20 copy =3D Fmake_vector (make_number (size), Qnil); + XSETPVECTYPE (XVECTOR (copy), PVEC_CHAR_TABLE); XCHAR_TABLE (copy)->defalt =3D XCHAR_TABLE (table)->defalt; XCHAR_TABLE (copy)->parent =3D XCHAR_TABLE (table)->parent; XCHAR_TABLE (copy)->purpose =3D XCHAR_TABLE (table)->purpose; --- orig/src/coding.c +++ mod/src/coding.c @@ -387,9 +387,6 @@ terminal coding system is nil. */ struct coding_system safe_terminal_coding; =20 -/* Default coding system to be used to write a file. */ -struct coding_system default_buffer_file_coding; - Lisp_Object Vfile_coding_system_alist; Lisp_Object Vprocess_coding_system_alist; Lisp_Object Vnetwork_coding_system_alist; @@ -8329,9 +8326,10 @@ (terminal) Lisp_Object terminal; { - Lisp_Object coding_system; + struct coding_system *terminal_coding + =3D TERMINAL_TERMINAL_CODING (get_terminal (terminal, 1)); + Lisp_Object coding_system =3D CODING_ID_NAME (terminal_coding->id); =20 - coding_system =3D TERMINAL_TERMINAL_CODING (get_terminal (terminal, 1))-= >symbol; /* For backward compatibility, return nil if it is `undecided'. */ return (! EQ (coding_system, Qundecided) ? coding_system : Qnil); } @@ -8354,11 +8352,13 @@ } =20 DEFUN ("keyboard-coding-system", - Fkeyboard_coding_system, Skeyboard_coding_system, 0, 0, 0, + Fkeyboard_coding_system, Skeyboard_coding_system, 0, 1, 0, doc: /* Return coding system specified for decoding keyboard input.= */) - () + (terminal) + Lisp_Object terminal; { - return CODING_ID_NAME (keyboard_coding.id); + return CODING_ID_NAME (TERMINAL_KEYBOARD_CODING + (get_terminal (terminal, 1))->id); } =20 @@ -8643,11 +8643,11 @@ else { charset_list =3D Fcopy_sequence (charset_list); - for (tail =3D charset_list; !NILP (tail); tail =3D Fcdr (tail)) + for (tail =3D charset_list; CONSP (tail); tail =3D XCDR (tail)) { struct charset *charset; =20 - val =3D Fcar (tail); + val =3D XCAR (tail); CHECK_CHARSET_GET_CHARSET (val, charset); if (EQ (coding_type, Qiso_2022) ? CHARSET_ISO_FINAL (charset) < 0 @@ -9827,8 +9827,6 @@ Fdefine_coding_system_internal (coding_arg_max, args); } =20 - setup_coding_system (Qno_conversion, &keyboard_coding); - setup_coding_system (Qundecided, &terminal_coding); setup_coding_system (Qno_conversion, &safe_terminal_coding); =20 { --- orig/src/coding.h +++ mod/src/coding.h @@ -746,9 +746,6 @@ terminal coding system is nil. */ extern struct coding_system safe_terminal_coding; =20 -/* Default coding system to be used to write a file. */ -extern struct coding_system default_buffer_file_coding; - /* Default coding systems used for process I/O. */ extern Lisp_Object Vdefault_process_coding_system; =20 --- orig/src/doc.c +++ mod/src/doc.c @@ -617,8 +617,10 @@ int nr_read; char *cp =3D NULL; char *beg, *end; + Lisp_Object buildobj =3D Fexpand_file_name (build_string ("buildobj.ls= t"), + Vdoc_directory); =20 - fd =3D emacs_open ("buildobj.lst", O_RDONLY, 0); + fd =3D emacs_open (SDATA (buildobj), O_RDONLY, 0); if (fd < 0) report_file_error ("Opening file buildobj.lst", Qnil); =20 --- orig/src/emacs.c +++ mod/src/emacs.c @@ -1324,7 +1324,6 @@ syms_of_macterm (); syms_of_macmenu (); syms_of_macselect (); - syms_of_data (); syms_of_search (); syms_of_frame (); =20 @@ -1332,6 +1331,16 @@ mac_term_init (build_string ("Mac"), NULL, NULL); init_keyboard (); #endif + /* Called before syms_of_fileio, because it sets up Qerror_condition= . */ + syms_of_data (); + syms_of_fileio (); + /* Before syms_of_coding to initialize Vgc_cons_threshold. */ + syms_of_alloc (); + /* Before syms_of_coding because it initializes Qcharsetp. */ + syms_of_charset (); + /* Before init_window_once, because it sets up the + Vcoding_system_hash_table. */ + syms_of_coding (); /* This should be after syms_of_fileio. */ =20 init_window_once (); /* Init the window system. */ init_fileio_once (); /* Must precede any path manipulation. */ @@ -1553,7 +1562,6 @@ /* Called before init_window_once for Mac OS Classic. */ syms_of_data (); #endif - syms_of_alloc (); syms_of_chartab (); syms_of_lread (); syms_of_print (); @@ -1574,7 +1582,6 @@ syms_of_ccl (); #endif syms_of_character (); - syms_of_charset (); syms_of_cmds (); #ifndef NO_DIR_LIBRARY syms_of_dired (); @@ -1583,8 +1590,6 @@ syms_of_doc (); syms_of_editfns (); syms_of_emacs (); - syms_of_fileio (); - syms_of_coding (); /* This should be after syms_of_fileio. */ #ifdef CLASH_DETECTION syms_of_filelock (); #endif /* CLASH_DETECTION */ --- orig/src/fontset.c +++ mod/src/fontset.c @@ -1442,7 +1442,7 @@ { Lisp_Object this =3D AREF (Vfontset_table, id); =20 - if (EQ (FONTSET_BASE (this), base)) + if (CHAR_TABLE_P (this) && EQ (FONTSET_BASE (this), base)) { Fclear_face_cache (Qt); break; --- orig/src/lread.c +++ mod/src/lread.c @@ -2324,7 +2324,7 @@ tmp =3D read_vector (readcharfun, 0); if (XVECTOR (tmp)->size < CHAR_TABLE_STANDARD_SLOTS) error ("Invalid size char-table"); - XSETCHAR_TABLE (tmp, XCHAR_TABLE (tmp)); + XSETPVECTYPE (XVECTOR (tmp), PVEC_CHAR_TABLE); return tmp; } else if (c =3D=3D '^') @@ -2344,7 +2344,7 @@ size =3D XVECTOR (tmp)->size - 2; if (chartab_size [depth] !=3D size) error ("Invalid size char-table"); - XSETSUB_CHAR_TABLE (tmp, XSUB_CHAR_TABLE (tmp)); + XSETPVECTYPE (XVECTOR (tmp), PVEC_SUB_CHAR_TABLE); return tmp; } invalid_syntax ("#^^", 3); --- orig/src/term.c +++ mod/src/term.c @@ -41,7 +41,6 @@ #include "lisp.h" #include "termchar.h" #include "termopts.h" -#include "lisp.h" #include "buffer.h" #include "character.h" #include "charset.h" --- orig/src/terminal.c +++ mod/src/terminal.c @@ -242,8 +242,8 @@ terminal->terminal_coding =3D (struct coding_system *) xmalloc (sizeof (struct coding_system)); =20 - setup_coding_system (Qnil, terminal->keyboard_coding); - setup_coding_system (Qnil, terminal->terminal_coding); + setup_coding_system (Qno_conversion, terminal->keyboard_coding); + setup_coding_system (Qundecided, terminal->terminal_coding); =20 terminal->param_alist =3D Qnil; return terminal; --- orig/src/xdisp.c +++ mod/src/xdisp.c @@ -18210,9 +18210,11 @@ { /* No need to mention EOL here--the terminal never needs to do EOL conversion. */ - p =3D decode_mode_spec_coding (CODING_ID_NAME (keyboard_coding.id), + p =3D decode_mode_spec_coding (CODING_ID_NAME + (FRAME_KEYBOARD_CODING (f)->id), p, 0); - p =3D decode_mode_spec_coding (CODING_ID_NAME (terminal_coding.id), + p =3D decode_mode_spec_coding (CODING_ID_NAME + (FRAME_TERMINAL_CODING (f)->id), p, 0); } p =3D decode_mode_spec_coding (b->buffer_file_coding_system, @@ -19615,70 +19617,6 @@ } =20 =20 -/* Get face and two-byte form of character C in face FACE_ID on frame - F. The encoding of C is returned in *CHAR2B. MULTIBYTE_P non-zero - means we want to display multibyte text. DISPLAY_P non-zero means - make sure that X resources for the face returned are allocated. - Value is a pointer to a realized face that is ready for display if - DISPLAY_P is non-zero. */ - -static INLINE struct face * -get_char_face_and_encoding (f, c, face_id, char2b, multibyte_p, display_p) - struct frame *f; - int c, face_id; - XChar2b *char2b; - int multibyte_p, display_p; -{ - struct face *face =3D FACE_FROM_ID (f, face_id); - - if (!multibyte_p) - { - /* Unibyte case. We don't have to encode, but we have to make - sure to use a face suitable for unibyte. */ - STORE_XCHAR2B (char2b, 0, c); - face_id =3D FACE_FOR_CHAR (f, face, c); - face =3D FACE_FROM_ID (f, face_id); - } - else if (c < 128) - { - /* Case of ASCII in a face known to fit ASCII. */ - STORE_XCHAR2B (char2b, 0, c); - } - else - { - int c1, c2, charset; - - /* Split characters into bytes. If c2 is -1 afterwards, C is - really a one-byte character so that byte1 is zero. */ - SPLIT_CHAR (c, charset, c1, c2); - if (c2 > 0) - STORE_XCHAR2B (char2b, c1, c2); - else - STORE_XCHAR2B (char2b, 0, c1); - - /* Maybe encode the character in *CHAR2B. */ - if (face->font !=3D NULL) - { - struct font_info *font_info - =3D FONT_INFO_FROM_ID (f, face->font_info_id); - if (font_info) - FRAME_RIF (f)->encode_char (c, char2b, font_info, 0); - } - } - - /* Make sure X resources of the face are allocated. */ -#ifdef HAVE_X_WINDOWS - if (display_p) -#endif - { - xassert (face !=3D NULL); - PREPARE_FACE_FOR_DISPLAY (f, face); - } - - return face; -} - - /* Set background width of glyph string S. START is the index of the first glyph following S. LAST_X is the right-most x-position + 1 in the drawing area. */ --- orig/src/xfaces.c +++ mod/src/xfaces.c @@ -5572,11 +5572,11 @@ free_face_fontset (f, face); if (face->gc) { + BLOCK_INPUT; #ifdef USE_FONT_BACKEND if (enable_font_backend && face->font_info) font_done_for_face (f, face); #endif /* USE_FONT_BACKEND */ - BLOCK_INPUT; x_free_gc (f, face->gc); face->gc =3D 0; UNBLOCK_INPUT; @@ -5747,11 +5747,11 @@ struct face *face =3D c->faces_by_id[i]; if (face && face->gc) { + BLOCK_INPUT; #ifdef USE_FONT_BACKEND if (enable_font_backend && face->font_info) font_done_for_face (c->f, face); #endif /* USE_FONT_BACKEND */ - BLOCK_INPUT; x_free_gc (c->f, face->gc); face->gc =3D 0; UNBLOCK_INPUT; --- orig/src/xterm.c +++ mod/src/xterm.c @@ -6777,17 +6777,6 @@ copy_bufptr =3D coding.destination; } =20 - require =3D decoding_buffer_size (&coding, nbytes); - p =3D (unsigned char *) alloca (require); - coding.mode |=3D CODING_MODE_LAST_BLOCK; - /* We explicitly disable composition handling because - key data should not contain any composition sequence. */ - coding.composing =3D COMPOSITION_DISABLED; - decode_coding (&coding, copy_bufptr, p, nbytes, require); - nbytes =3D coding.produced; - nchars =3D coding.produced_char; - copy_bufptr =3D p; - /* Convert the input data to a sequence of character events. */ for (i =3D 0; i < nbytes; i +=3D len) @@ -6803,6 +6792,5 @@ inev.ie.code =3D c; kbd_buffer_store_event_hold (&inev.ie, hold_quit); } - } =20 /* Previous code updated count by nchars rather than nbytes, * added files