From unknown Fri Jun 13 11:28:25 2025 X-Loop: help-debbugs@gnu.org Subject: bug#38691: CC Mode 5.34 (C++//lhw); `Invalid search bound` when undo Resent-From: "Sun, Wei" Original-Sender: "Debbugs-submit" Resent-CC: bug-cc-mode@gnu.org Resent-Date: Fri, 20 Dec 2019 15:34:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 38691 X-GNU-PR-Package: cc-mode X-GNU-PR-Keywords: To: 38691@debbugs.gnu.org X-Debbugs-Original-To: "submit@debbugs.gnu.org" Received: via spool by submit@debbugs.gnu.org id=B.15768559891572 (code B ref -1); Fri, 20 Dec 2019 15:34:02 +0000 Received: (at submit) by debbugs.gnu.org; 20 Dec 2019 15:33:09 +0000 Received: from localhost ([127.0.0.1]:47176 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iiKH6-0000PH-Sr for submit@debbugs.gnu.org; Fri, 20 Dec 2019 10:33:09 -0500 Received: from smtp-fw-9102.amazon.com ([207.171.184.29]:4317) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iiFI7-0006Ru-DE for submit@debbugs.gnu.org; Fri, 20 Dec 2019 05:13:52 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1576836831; x=1608372831; h=from:to:subject:date:message-id: content-transfer-encoding:mime-version; bh=4VOjqa6J6rnDlGsJFY62vZkDa6eaWRZ7C09qDSAHmlk=; b=tUd3DOpTEnTWZ749IoDP1BxDVGFqlZHdVzsfbHXBj7h2b5vs9FVqwqD2 AV+22PAgbe+Zu2ClmSuvGnxV49DKH25gDMHbsY4VAQG3aFG6salxRNlWS GH3XEwOFxVlDgP6WILS2VBlsVjMAhrWjudkSO4QoNKN7NE7x2UDQLqbOe k=; IronPort-SDR: O5bPu8kfbaqQQinPQ9UVf5krtWUcJ2lPHv/7gcsu/nhdOm5YaFIBV5CWdCQCP/H+w75GXWbTuf LlaMwcz8CS+w== X-IronPort-AV: E=Sophos;i="5.69,335,1571702400"; d="scan'208";a="14640307" Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-1d-98acfc19.us-east-1.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-9102.sea19.amazon.com with ESMTP; 20 Dec 2019 10:13:35 +0000 Received: from EX13MTAUWA001.ant.amazon.com (iad55-ws-svc-p15-lb9-vlan3.iad.amazon.com [10.40.159.166]) by email-inbound-relay-1d-98acfc19.us-east-1.amazon.com (Postfix) with ESMTPS id 9D0B7A26F4 for ; Fri, 20 Dec 2019 10:13:34 +0000 (UTC) Received: from EX13D01ANC002.ant.amazon.com (10.43.157.162) by EX13MTAUWA001.ant.amazon.com (10.43.160.118) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Fri, 20 Dec 2019 10:13:34 +0000 Received: from EX13D01ANC002.ant.amazon.com (10.43.157.162) by EX13D01ANC002.ant.amazon.com (10.43.157.162) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Fri, 20 Dec 2019 10:13:32 +0000 Received: from EX13D01ANC002.ant.amazon.com ([10.43.157.162]) by EX13D01ANC002.ant.amazon.com ([10.43.157.162]) with mapi id 15.00.1367.000; Fri, 20 Dec 2019 10:13:32 +0000 From: "Sun, Wei" Thread-Topic: CC Mode 5.34 (C++//lhw); `Invalid search bound` when undo Thread-Index: AQHVtx4i+hD1jt7e3kC/V6QXOe3niQ== Date: Fri, 20 Dec 2019 10:13:32 +0000 Message-ID: Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.43.161.112] Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Precedence: Bulk X-Spam-Score: -12.5 (------------) X-Mailman-Approved-At: Fri, 20 Dec 2019 10:33:07 -0500 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -13.5 (-------------) Package: cc-mode $> cat test.cpp // 2019-12-20 17:57 emacs -Q test.cpp M-x mark-page RET C-u M-x shell-command-on-region RET sort RET M-x undo RET Debugger entered--Lisp error: (error "Invalid search bound (wrong side of p= oint)") search-forward-regexp("R\"\\([^ ()\\\n\15\11]\\{0,16\\}\\)(" -20 bound) c-after-change-unmark-raw-strings(1 1 21) #f(compiled-function (fn) #)(c-after-change-unmark-raw= -strings) mapc(#f(compiled-function (fn) #) (c-depropertize-new-= text c-after-change-escape-NL-in-string c-after-change-unmark-raw-strings c= -parse-quotes-after-change c-after-change-mark-abnormal-strings c-extend-fo= nt-lock-region-for-macros c-neutralize-syntax-in-CPP c-restore-<>-propertie= s c-change-expand-fl-region)) c-after-change(1 1 21) primitive-undo(1 ((1 . 22) (#("// 2019-12-20 17:57\n\n" 0 1 (face font-lo= ck-comment-delimiter-face c-is-sws t c-in-sws t fontified t) 1 3 (face font= -lock-comment-delimiter-face c-in-sws t fontified t) 3 20 (face font-lock-c= omment-face c-in-sws t fontified t) 20 21 (fontified t c-is-sws t)) . 1) (#= . -21) (# . -21) (# . -21) (t 24060 40235 192206 220000) nil (#("-" 0 1 (fonti= fied t)) . 1) nil (#("#include " 0 1 (face font-lock-preprocessor= -face c-is-sws t c-in-sws t fontified t) 1 8 (face font-lock-preprocessor-f= ace c-in-sws t fontified t) 8 9 (c-in-sws t fontified t) 9 10 (category c-<= -as-paren-syntax face font-lock-string-face c-in-sws t fontified t) 10 18 (= face font-lock-string-face c-in-sws t fontified t) 18 19 (category c->-as-p= aren-syntax face font-lock-string-face c-in-sws t fontified t)) . 22) (t 24= 060 40193 724383 390000))) undo-more(1) undo(nil) funcall-interactively(undo nil) call-interactively(undo nil nil) command-execute(undo) Package: cc-mode Emacs : GNU Emacs 27.0.50 (build 6, x86_64-pc-linux-gnu, GTK+ Version 3.18= .9) of 2019-12-20 Package: CC Mode 5.34 (C++//lhw) Buffer Style: google c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-st= ring-delim gen-comment-delim syntax-properties 1-bit) current state: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D (setq c-basic-offset 4 c-comment-only-line-offset 0 c-indent-comment-alist '((other space . 2)) c-indent-comments-syntactically-p t c-block-comment-prefix "* " c-comment-prefix-regexp '((pike-mode . "//+!?\\|\\**") (awk-mode . "#+") (= other . "//+\\|\\**")) c-doc-comment-style '((java-mode . javadoc) (pike-mode . autodoc) (c-mode = . gtkdoc) (c++-mode . gtkdoc)) c-cleanup-list '(brace-else-brace brace-elseif-brace brace-catch-brace emp= ty-defun-braces defun-close-semi list-close-comma scope-operator) c-hanging-braces-alist '((defun-open after) (defun-close before after) (cl= ass-open after) (class-close before after) (inexpr-class-open after) (inexp= r-class-close before) (namespace-open after) (inline-open after) (inline-cl= ose before after) (block-open after) (block-close . c-snug-do-while= ) (extern-lang-open after) (extern-lang-close after) (statement-case-open a= fter) (substatement-open after)) c-hanging-colons-alist '((case-label) (label after) (access-label after) (= member-init-intro before) (inher-intro)) c-hanging-semi&comma-criteria '(c-semi&comma-no-newlines-for-oneline-inlin= ers c-semi&comma-inside-parenlist c-semi&comma-no-newlines-before-nonblanks= ) c-backslash-column 48 c-backslash-max-column 72 c-special-indent-hook nil c-label-minimum-indentation 1 c-offsets-alist '((inexpr-class . +) (inexpr-statement . +) (lambda-intro-cont . +) (inlambda . 0) (template-args-cont c-lineup-template-args +) (incomposition . +) (inmodule . +) (innamespace . 0) (inextern-lang . +) (composition-close . 0) (module-close . 0) (namespace-close . 0) (extern-lang-close . 0) (composition-open . 0) (module-open . 0) (namespace-open . 0) (extern-lang-open . 0) (objc-method-call-cont c-lineup-ObjC-method-call-colons = c-lineup-ObjC-method-call +) (objc-method-args-cont . c-lineup-ObjC-method-args) (objc-method-intro . [0]) (friend . 0) (cpp-define-intro c-lineup-cpp-define +) (cpp-macro-cont . +) (cpp-macro . [0]) (inclass . +) (stream-op . c-lineup-streamop) (arglist-cont-nonempty c-lineup-gcc-asm-reg c-lineup-arg= list) (arglist-cont c-lineup-gcc-asm-reg 0) (comment-intro . 0) (catch-clause . 0) (else-clause . 0) (do-while-closure . 0) (access-label . /) (substatement . +) (statement-case-intro . +) (statement . 0) (brace-entry-open . 0) (brace-list-entry . 0) (brace-list-close . 0) (block-close . 0) (block-open . 0) (inher-cont . c-lineup-multi-inher) (inher-intro . ++) (member-init-cont . c-lineup-multi-inher) (member-init-intro . ++) (annotation-var-cont . +) (annotation-top-cont . 0) (topmost-intro . 0) (knr-argdecl . 0) (func-decl-cont . ++) (inline-close . 0) (class-close . 0) (class-open . 0) (defun-block-intro . +) (defun-close . 0) (defun-open . 0) (c . c-lineup-C-comments) (string . c-lineup-dont-change) (topmost-intro-cont . c-lineup-topmost-intro-cont) (brace-list-intro . +) (brace-list-open . 0) (inline-open . 0) (arglist-close . c-lineup-arglist) (arglist-intro google-c-lineup-expression-plus-4) (statement-cont nil c-lineup-assignments ++) (statement-case-open . +) (label . /) (substatement-label . 2) (substatement-open . 0) (knr-argdecl-intro . +) (statement-block-intro . +) (case-label . +) ) c-buffer-is-cc-mode 'c++-mode c-tab-always-indent t c-syntactic-indentation t c-syntactic-indentation-in-macros t c-ignore-auto-fill '(string cpp code) c-auto-align-backslashes t c-backspace-function 'backward-delete-char-untabify c-delete-function 'delete-char c-electric-pound-behavior nil c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu")) c-enable-xemacs-performance-kludge-p t c-old-style-variable-behavior nil defun-prompt-regexp nil tab-width 4 comment-column 40 parse-sexp-ignore-comments t parse-sexp-lookup-properties t auto-fill-function nil comment-multi-line t comment-start-skip "\\(//+\\|/\\*+\\)\\s *" fill-prefix nil fill-column 80 paragraph-start "[ ]*\\(//+\\|\\**\\)[ ]*$\\|^\f" adaptive-fill-mode t adaptive-fill-regexp "[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]+\\|[ ]*\\([0-9]+\= \.\\|\\*+\\)[ ]*\\)" )= From unknown Fri Jun 13 11:28:25 2025 X-Loop: help-debbugs@gnu.org Subject: bug#38691: CC Mode 5.34 (C++//lhw); `Invalid search bound` when undo Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-cc-mode@gnu.org Resent-Date: Tue, 24 Dec 2019 11:17:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 38691 X-GNU-PR-Package: cc-mode X-GNU-PR-Keywords: To: "Sun, Wei" Cc: 38691@debbugs.gnu.org Received: via spool by 38691-submit@debbugs.gnu.org id=B38691.157718619930347 (code B ref 38691); Tue, 24 Dec 2019 11:17:02 +0000 Received: (at 38691) by debbugs.gnu.org; 24 Dec 2019 11:16:39 +0000 Received: from localhost ([127.0.0.1]:51986 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ijiB4-0007tP-TU for submit@debbugs.gnu.org; Tue, 24 Dec 2019 06:16:39 -0500 Received: from colin.muc.de ([193.149.48.1]:49129 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1ijiB3-0007tG-3F for 38691@debbugs.gnu.org; Tue, 24 Dec 2019 06:16:38 -0500 Received: (qmail 40428 invoked by uid 3782); 24 Dec 2019 11:16:35 -0000 Received: from acm.muc.de (p4FE15B64.dip0.t-ipconnect.de [79.225.91.100]) by colin.muc.de (tmda-ofmipd) with ESMTP; Tue, 24 Dec 2019 12:16:34 +0100 Received: (qmail 5533 invoked by uid 1000); 24 Dec 2019 11:16:33 -0000 Date: Tue, 24 Dec 2019 11:16:33 +0000 Message-ID: <20191224111633.GB3992@ACM> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Wei. Thanks for taking the trouble to report this bug, and thanks for including a CC Mode configuration dump. On Fri, Dec 20, 2019 at 10:13:32 +0000, Sun, Wei via CC-Mode-help wrote: > Package: cc-mode > $> cat test.cpp > // 2019-12-20 17:57 > emacs -Q test.cpp > M-x mark-page RET > C-u M-x shell-command-on-region RET > sort RET > M-x undo RET > Debugger entered--Lisp error: (error "Invalid search bound (wrong side of point)") > search-forward-regexp("R\"\\([^ ()\\\n\15\11]\\{0,16\\}\\)(" -20 bound) > c-after-change-unmark-raw-strings(1 1 21) > #f(compiled-function (fn) #)(c-after-change-unmark-raw-strings) > mapc(#f(compiled-function (fn) #) (c-depropertize-new-text c-after-change-escape-NL-in-string c-after-change-unmark-raw-strings c-parse-quotes-after-change c-after-change-mark-abnormal-strings c-extend-font-lock-region-for-macros c-neutralize-syntax-in-CPP c-restore-<>-properties c-change-expand-fl-region)) > c-after-change(1 1 21) > primitive-undo(1 ((1 . 22) (#("// 2019-12-20 17:57\n\n" 0 1 (face font-lock-comment-delimiter-face c-is-sws t c-in-sws t fontified t) 1 3 (face font-lock-comment-delimiter-face c-in-sws t fontified t) 3 20 (face font-lock-comment-face c-in-sws t fontified t) 20 21 (fontified t c-is-sws t)) . 1) (# . -21) (# . -21) (# . -21) (t 24060 40235 192206 220000) nil (#("-" 0 1 (fontified t)) . 1) nil (#("#include " 0 1 (face font-lock-preprocessor-face c-is-sws t c-in-sws t fontified t) 1 8 (face font-lock-preprocessor-face c-in-sws t fontified t) 8 9 (c-in-sws t fontified t) 9 10 (category c-<-as-paren-syntax face font-lock-string-face c-in-sws t fontified t) 10 18 (face font-lock-string-face c-in-sws t fontified t) 18 19 (category c->-as-paren-syntax face font-lock-string-face c-in-sws t fontified t)) . 22) (t 24060 40193 724383 390000))) > undo-more(1) > undo(nil) > funcall-interactively(undo nil) > call-interactively(undo nil nil) > command-execute(undo) The cause of the bug is in the C routine call_process in the Emacs core. This function calls the external process, and (in this case) writes its output to an Emacs buffer. When it does this, it calls the Emacs hook `before-change-functions' (as it should), but fails to call `after-change-functions'. (These two hooks are documented in the Elisp manual on page "Change Hooks".) This failure to call `after-change-functions' confuses CC Mode. CC Mode does have a workaround for this sort of thing, but it is not good enough to correct for the bug in call_process in this case. So.... I think the CC Mode workaround needs to be improved. I will be looking at this. Also, I am currently negotiating with Eli Zaretskii (the principle Emacs maintainer) to fix call_process. I am confident this will happen. I'm hoping that a fix will be in the Emacs-27 release branch (which was created yesterday) within the next week or so. > Package: cc-mode > Emacs : GNU Emacs 27.0.50 (build 6, x86_64-pc-linux-gnu, GTK+ Version 3.18.9) > of 2019-12-20 > Package: CC Mode 5.34 (C++//lhw) > Buffer Style: google > c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties 1-bit) [ .... ] -- Alan Mackenzie (Nuremberg, Germany). From unknown Fri Jun 13 11:28:25 2025 X-Loop: help-debbugs@gnu.org Subject: bug#38691: CC Mode 5.34 (C++//lhw); `Invalid search bound` when undo Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-cc-mode@gnu.org Resent-Date: Wed, 22 Jan 2020 20:29:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 38691 X-GNU-PR-Package: cc-mode X-GNU-PR-Keywords: To: "Sun, Wei" Cc: 38691@debbugs.gnu.org Received: via spool by 38691-submit@debbugs.gnu.org id=B38691.15797249082872 (code B ref 38691); Wed, 22 Jan 2020 20:29:01 +0000 Received: (at 38691) by debbugs.gnu.org; 22 Jan 2020 20:28:28 +0000 Received: from localhost ([127.0.0.1]:51404 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iuMc0-0000kG-5u for submit@debbugs.gnu.org; Wed, 22 Jan 2020 15:28:28 -0500 Received: from colin.muc.de ([193.149.48.1]:55975 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1iuMby-0000k7-9Y for 38691@debbugs.gnu.org; Wed, 22 Jan 2020 15:28:27 -0500 Received: (qmail 76689 invoked by uid 3782); 22 Jan 2020 20:28:24 -0000 Received: from acm.muc.de (p4FE15DC6.dip0.t-ipconnect.de [79.225.93.198]) by colin.muc.de (tmda-ofmipd) with ESMTP; Wed, 22 Jan 2020 21:28:23 +0100 Received: (qmail 31882 invoked by uid 1000); 22 Jan 2020 20:28:23 -0000 Date: Wed, 22 Jan 2020 20:28:23 +0000 Message-ID: <20200122202822.GB4319@ACM> References: <20191224111633.GB3992@ACM> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20191224111633.GB3992@ACM> User-Agent: Mutt/1.10.1 (2018-07-13) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello again, Wei. I have now committed the fix to call_process (see below) to the emacs-27 branch at savannah.gnu.org, so the bug should now be fixed in that branch. The fix should find its way into the master branch sometime soon. Could you possibly see your way to testing the bug fix on the emacs-27 branch with your real code, please, so that we can be sure the bug is actually fixed? Then I can close the bug as fixed. Again, thanks for taking the trouble to report this bug, and thanks also for cutting your test case down to a convenient, easy to work with, minimum. On Tue, Dec 24, 2019 at 11:16:33 +0000, Alan Mackenzie wrote: > Hello, Wei. > Thanks for taking the trouble to report this bug, and thanks for > including a CC Mode configuration dump. > On Fri, Dec 20, 2019 at 10:13:32 +0000, Sun, Wei via CC-Mode-help wrote: > > Package: cc-mode > > $> cat test.cpp > > // 2019-12-20 17:57 > > emacs -Q test.cpp > > M-x mark-page RET > > C-u M-x shell-command-on-region RET > > sort RET > > M-x undo RET > > Debugger entered--Lisp error: (error "Invalid search bound (wrong side of point)") > > search-forward-regexp("R\"\\([^ ()\\\n\15\11]\\{0,16\\}\\)(" -20 bound) > > c-after-change-unmark-raw-strings(1 1 21) > > #f(compiled-function (fn) #)(c-after-change-unmark-raw-strings) > > mapc(#f(compiled-function (fn) #) (c-depropertize-new-text c-after-change-escape-NL-in-string c-after-change-unmark-raw-strings c-parse-quotes-after-change c-after-change-mark-abnormal-strings c-extend-font-lock-region-for-macros c-neutralize-syntax-in-CPP c-restore-<>-properties c-change-expand-fl-region)) > > c-after-change(1 1 21) > > primitive-undo(1 ((1 . 22) (#("// 2019-12-20 17:57\n\n" 0 1 (face font-lock-comment-delimiter-face c-is-sws t c-in-sws t fontified t) 1 3 (face font-lock-comment-delimiter-face c-in-sws t fontified t) 3 20 (face font-lock-comment-face c-in-sws t fontified t) 20 21 (fontified t c-is-sws t)) . 1) (# . -21) (# . -21) (# . -21) (t 24060 40235 192206 220000) nil (#("-" 0 1 (fontified t)) . 1) nil (#("#include " 0 1 (face font-lock-preprocessor-face c-is-sws t c-in-sws t fontified t) 1 8 (face font-lock-preprocessor-face c-in-sws t fontified t) 8 9 (c-in-sws t fontified t) 9 10 (category c-<-as-paren-syntax face font-lock-string-face c-in-sws t fontified t) 10 18 (face font-lock-string-face c-in-sws t fontified t) 18 19 (category c->-as-paren-syntax face font-lock-string-face c-in-sws t fontified t)) . 22) (t 24060 40193 724383 390000))) > > undo-more(1) > > undo(nil) > > funcall-interactively(undo nil) > > call-interactively(undo nil nil) > > command-execute(undo) > The cause of the bug is in the C routine call_process in the Emacs core. > This function calls the external process, and (in this case) writes its > output to an Emacs buffer. When it does this, it calls the Emacs hook > `before-change-functions' (as it should), but fails to call > `after-change-functions'. (These two hooks are documented in the Elisp > manual on page "Change Hooks".) > This failure to call `after-change-functions' confuses CC Mode. CC Mode > does have a workaround for this sort of thing, but it is not good enough > to correct for the bug in call_process in this case. > So.... I think the CC Mode workaround needs to be improved. I will be > looking at this. Also, I am currently negotiating with Eli Zaretskii > (the principle Emacs maintainer) to fix call_process. I am confident > this will happen. > I'm hoping that a fix will be in the Emacs-27 release branch (which was > created yesterday) within the next week or so. > > Package: cc-mode > > Emacs : GNU Emacs 27.0.50 (build 6, x86_64-pc-linux-gnu, GTK+ Version 3.18.9) > > of 2019-12-20 > > Package: CC Mode 5.34 (C++//lhw) > > Buffer Style: google > > c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties 1-bit) > [ .... ] -- Alan Mackenzie (Nuremberg, Germany). From unknown Fri Jun 13 11:28:25 2025 X-Loop: help-debbugs@gnu.org Subject: bug#38691: =?UTF-8?Q?=E7=AD=94=E5=A4=8D:?= bug#38691: CC Mode 5.34 (C++//lhw); `Invalid search bound` when undo Resent-From: "Sun, Wei" Original-Sender: "Debbugs-submit" Resent-CC: bug-cc-mode@gnu.org Resent-Date: Thu, 23 Jan 2020 06:26:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 38691 X-GNU-PR-Package: cc-mode X-GNU-PR-Keywords: To: Alan Mackenzie Cc: "38691@debbugs.gnu.org" <38691@debbugs.gnu.org> Received: via spool by 38691-submit@debbugs.gnu.org id=B38691.15797607564366 (code B ref 38691); Thu, 23 Jan 2020 06:26:01 +0000 Received: (at 38691) by debbugs.gnu.org; 23 Jan 2020 06:25:56 +0000 Received: from localhost ([127.0.0.1]:51629 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iuVwB-00018L-FE for submit@debbugs.gnu.org; Thu, 23 Jan 2020 01:25:56 -0500 Received: from smtp-fw-6001.amazon.com ([52.95.48.154]:56511) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iuVIG-0008Ic-33 for 38691@debbugs.gnu.org; Thu, 23 Jan 2020 00:44:40 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1579758280; x=1611294280; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=V07d6m9uNrRp7mwSwMncB/4xuv37Fhqe1SNuiSRVK0E=; b=iH908lRM5QyPR6ceN6bEnsPJnAT1s+LtUWxeFDn4nXKtNbp/PUZHId4c mOAxnVnEDgqhsl9Tjl23NbbB7r9rz+/9uJ9joi9pNsLyZ0KwIuxycc50Q q/Kna+mPTBdd26Xc4Q8Mm0Y/rrHSi2BPscgSP3cK6A9QKDPUYTwakA7RT s=; IronPort-SDR: 3VAjbyXb1VrS4QjA+MYBqEtfUBGkZRWQNSfTmtXPhwsLcqlpg/bXdwxD8tu2D0XrKiFGUMW8G2 Fgwx02LRbluQ== X-IronPort-AV: E=Sophos;i="5.70,352,1574121600"; d="scan'208";a="14334849" Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-1d-9ec21598.us-east-1.amazon.com) ([10.43.8.6]) by smtp-border-fw-out-6001.iad6.amazon.com with ESMTP; 23 Jan 2020 05:44:39 +0000 Received: from EX13MTAUWA001.ant.amazon.com (iad55-ws-svc-p15-lb9-vlan3.iad.amazon.com [10.40.159.166]) by email-inbound-relay-1d-9ec21598.us-east-1.amazon.com (Postfix) with ESMTPS id 79967A2626; Thu, 23 Jan 2020 05:44:38 +0000 (UTC) Received: from EX13D01ANC002.ant.amazon.com (10.43.157.162) by EX13MTAUWA001.ant.amazon.com (10.43.160.118) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Thu, 23 Jan 2020 05:44:37 +0000 Received: from EX13D01ANC002.ant.amazon.com (10.43.157.162) by EX13D01ANC002.ant.amazon.com (10.43.157.162) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Thu, 23 Jan 2020 05:44:36 +0000 Received: from EX13D01ANC002.ant.amazon.com ([10.43.157.162]) by EX13D01ANC002.ant.amazon.com ([10.43.157.162]) with mapi id 15.00.1367.000; Thu, 23 Jan 2020 05:44:30 +0000 From: "Sun, Wei" Thread-Topic: bug#38691: CC Mode 5.34 (C++//lhw); `Invalid search bound` when undo Thread-Index: AQHV0WKGoY6+lCo14ESzdpLjNmFaxqf3vXR1 Date: Thu, 23 Jan 2020 05:44:30 +0000 Message-ID: <1579758270042.94869@amazon.com> References: <20191224111633.GB3992@ACM>,<20200122202822.GB4319@ACM> In-Reply-To: <20200122202822.GB4319@ACM> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.43.161.97] Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Spam-Score: -9.8 (---------) X-Mailman-Approved-At: Thu, 23 Jan 2020 01:25:54 -0500 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -10.8 (----------) SGkgQWxhbiwKCnRoZSBpc3N1ZSBpcyBmaXhlZCBvbiBlbWFjcy0yNywgdGhhbmsgeW91IHZlcnkg bXVjaC4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwq3orz+yMs6IEFs YW4gTWFja2VuemllIDxhY21AbXVjLmRlPgq3osvNyrG85DogMjAyMMTqMdTCMjPI1SA0OjI4CsrV vP7IyzogU3VuLCBXZWkKs63LzTogMzg2OTFAZGViYnVncy5nbnUub3JnCtb3zOI6IFJlOiBidWcj Mzg2OTE6IENDIE1vZGUgNS4zNCAoQysrLy9saHcpOyBgSW52YWxpZCBzZWFyY2ggYm91bmRgIHdo ZW4gdW5kbwoKSGVsbG8gYWdhaW4sIFdlaS4KCkkgaGF2ZSBub3cgY29tbWl0dGVkIHRoZSBmaXgg dG8gY2FsbF9wcm9jZXNzIChzZWUgYmVsb3cpIHRvIHRoZSBlbWFjcy0yNwpicmFuY2ggYXQgc2F2 YW5uYWguZ251Lm9yZywgc28gdGhlIGJ1ZyBzaG91bGQgbm93IGJlIGZpeGVkIGluIHRoYXQKYnJh bmNoLiAgVGhlIGZpeCBzaG91bGQgZmluZCBpdHMgd2F5IGludG8gdGhlIG1hc3RlciBicmFuY2gg c29tZXRpbWUKc29vbi4KCkNvdWxkIHlvdSBwb3NzaWJseSBzZWUgeW91ciB3YXkgdG8gdGVzdGlu ZyB0aGUgYnVnIGZpeCBvbiB0aGUgZW1hY3MtMjcKYnJhbmNoIHdpdGggeW91ciByZWFsIGNvZGUs IHBsZWFzZSwgc28gdGhhdCB3ZSBjYW4gYmUgc3VyZSB0aGUgYnVnIGlzCmFjdHVhbGx5IGZpeGVk PyAgVGhlbiBJIGNhbiBjbG9zZSB0aGUgYnVnIGFzIGZpeGVkLgoKQWdhaW4sIHRoYW5rcyBmb3Ig dGFraW5nIHRoZSB0cm91YmxlIHRvIHJlcG9ydCB0aGlzIGJ1ZywgYW5kIHRoYW5rcyBhbHNvCmZv ciBjdXR0aW5nIHlvdXIgdGVzdCBjYXNlIGRvd24gdG8gYSBjb252ZW5pZW50LCBlYXN5IHRvIHdv cmsgd2l0aCwKbWluaW11bS4KCgpPbiBUdWUsIERlYyAyNCwgMjAxOSBhdCAxMToxNjozMyArMDAw MCwgQWxhbiBNYWNrZW56aWUgd3JvdGU6Cj4gSGVsbG8sIFdlaS4KCj4gVGhhbmtzIGZvciB0YWtp bmcgdGhlIHRyb3VibGUgdG8gcmVwb3J0IHRoaXMgYnVnLCBhbmQgdGhhbmtzIGZvcgo+IGluY2x1 ZGluZyBhIENDIE1vZGUgY29uZmlndXJhdGlvbiBkdW1wLgoKCj4gT24gRnJpLCBEZWMgMjAsIDIw MTkgYXQgMTA6MTM6MzIgKzAwMDAsIFN1biwgV2VpIHZpYSBDQy1Nb2RlLWhlbHAgd3JvdGU6Cj4g PiBQYWNrYWdlOiBjYy1tb2RlCgo+ID4gJD4gY2F0IHRlc3QuY3BwCj4gPiAvLyAyMDE5LTEyLTIw IDE3OjU3Cgo+ID4gZW1hY3MgLVEgdGVzdC5jcHAKCj4gPiBNLXggbWFyay1wYWdlIFJFVAo+ID4g Qy11IE0teCBzaGVsbC1jb21tYW5kLW9uLXJlZ2lvbiBSRVQKPiA+IHNvcnQgUkVUCj4gPiBNLXgg dW5kbyBSRVQKCj4gPiBEZWJ1Z2dlciBlbnRlcmVkLS1MaXNwIGVycm9yOiAoZXJyb3IgIkludmFs aWQgc2VhcmNoIGJvdW5kICh3cm9uZyBzaWRlIG9mIHBvaW50KSIpCj4gPiAgIHNlYXJjaC1mb3J3 YXJkLXJlZ2V4cCgiUlwiXFwoW14gKClcXFxuXDE1XDExXVxcezAsMTZcXH1cXCkoIiAtMjAgYm91 bmQpCj4gPiAgIGMtYWZ0ZXItY2hhbmdlLXVubWFyay1yYXctc3RyaW5ncygxIDEgMjEpCj4gPiAg ICNmKGNvbXBpbGVkLWZ1bmN0aW9uIChmbikgIzxieXRlY29kZSAweDkxZTI3NT4pKGMtYWZ0ZXIt Y2hhbmdlLXVubWFyay1yYXctc3RyaW5ncykKPiA+ICAgbWFwYygjZihjb21waWxlZC1mdW5jdGlv biAoZm4pICM8Ynl0ZWNvZGUgMHg5MWUyNzU+KSAoYy1kZXByb3BlcnRpemUtbmV3LXRleHQgYy1h ZnRlci1jaGFuZ2UtZXNjYXBlLU5MLWluLXN0cmluZyBjLWFmdGVyLWNoYW5nZS11bm1hcmstcmF3 LXN0cmluZ3MgYy1wYXJzZS1xdW90ZXMtYWZ0ZXItY2hhbmdlIGMtYWZ0ZXItY2hhbmdlLW1hcmst YWJub3JtYWwtc3RyaW5ncyBjLWV4dGVuZC1mb250LWxvY2stcmVnaW9uLWZvci1tYWNyb3MgYy1u ZXV0cmFsaXplLXN5bnRheC1pbi1DUFAgYy1yZXN0b3JlLTw+LXByb3BlcnRpZXMgYy1jaGFuZ2Ut ZXhwYW5kLWZsLXJlZ2lvbikpCj4gPiAgIGMtYWZ0ZXItY2hhbmdlKDEgMSAyMSkKPiA+ICAgcHJp bWl0aXZlLXVuZG8oMSAoKDEgLiAyMikgKCMoIi8vIDIwMTktMTItMjAgMTc6NTdcblxuIiAwIDEg KGZhY2UgZm9udC1sb2NrLWNvbW1lbnQtZGVsaW1pdGVyLWZhY2UgYy1pcy1zd3MgdCBjLWluLXN3 cyB0IGZvbnRpZmllZCB0KSAxIDMgKGZhY2UgZm9udC1sb2NrLWNvbW1lbnQtZGVsaW1pdGVyLWZh Y2UgYy1pbi1zd3MgdCBmb250aWZpZWQgdCkgMyAyMCAoZmFjZSBmb250LWxvY2stY29tbWVudC1m YWNlIGMtaW4tc3dzIHQgZm9udGlmaWVkIHQpIDIwIDIxIChmb250aWZpZWQgdCBjLWlzLXN3cyB0 KSkgLiAxKSAoIzxtYXJrZXIgYXQgMSBpbiB0ZXN0LmNwcD4gLiAtMjEpICgjPG1hcmtlciBpbiBu byBidWZmZXI+IC4gLTIxKSAoIzxtYXJrZXIgYXQgMSBpbiB0ZXN0LmNwcD4gLiAtMjEpICh0IDI0 MDYwIDQwMjM1IDE5MjIwNiAyMjAwMDApIG5pbCAoIygiLSIgMCAxIChmb250aWZpZWQgdCkpIC4g MSkgbmlsICgjKCIjaW5jbHVkZSA8dGVzdC5ocHA+IiAwIDEgKGZhY2UgZm9udC1sb2NrLXByZXBy b2Nlc3Nvci1mYWNlIGMtaXMtc3dzIHQgYy1pbi1zd3MgdCBmb250aWZpZWQgdCkgMSA4IChmYWNl IGZvbnQtbG9jay1wcmVwcm9jZXNzb3ItZmFjZSBjLWluLXN3cyB0IGZvbnRpZmllZCB0KSA4IDkg KGMtaW4tc3dzIHQgZm9udGlmaWVkIHQpIDkgMTAgKGNhdGVnb3J5IGMtPC1hcy1wYXJlbi1zeW50 YXggZmFjZSBmb250LWxvY2stc3RyaW5nLWZhY2UgYy1pbi1zd3MgdCBmb250aWZpZWQgdCkgMTAg MTggKGZhY2UgZm9udC1sb2NrLXN0cmluZy1mYWNlIGMtaW4tc3dzIHQgZm9udGlmaWVkIHQpIDE4 IDE5IChjYXRlZ29yeSBjLT4tYXMtcGFyZW4tc3ludGF4IGZhY2UgZm9udC1sb2NrLXN0cmluZy1m YWNlIGMtaW4tc3dzIHQgZm9udGlmaWVkIHQpKSAuIDIyKSAodCAyNDA2MCA0MDE5MyA3MjQzODMg MzkwMDAwKSkpCj4gPiAgIHVuZG8tbW9yZSgxKQo+ID4gICB1bmRvKG5pbCkKPiA+ICAgZnVuY2Fs bC1pbnRlcmFjdGl2ZWx5KHVuZG8gbmlsKQo+ID4gICBjYWxsLWludGVyYWN0aXZlbHkodW5kbyBu aWwgbmlsKQo+ID4gICBjb21tYW5kLWV4ZWN1dGUodW5kbykKCj4gVGhlIGNhdXNlIG9mIHRoZSBi dWcgaXMgaW4gdGhlIEMgcm91dGluZSBjYWxsX3Byb2Nlc3MgaW4gdGhlIEVtYWNzIGNvcmUuCj4g VGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgZXh0ZXJuYWwgcHJvY2VzcywgYW5kIChpbiB0aGlzIGNh c2UpIHdyaXRlcyBpdHMKPiBvdXRwdXQgdG8gYW4gRW1hY3MgYnVmZmVyLiAgV2hlbiBpdCBkb2Vz IHRoaXMsIGl0IGNhbGxzIHRoZSBFbWFjcyBob29rCj4gYGJlZm9yZS1jaGFuZ2UtZnVuY3Rpb25z JyAoYXMgaXQgc2hvdWxkKSwgYnV0IGZhaWxzIHRvIGNhbGwKPiBgYWZ0ZXItY2hhbmdlLWZ1bmN0 aW9ucycuICAoVGhlc2UgdHdvIGhvb2tzIGFyZSBkb2N1bWVudGVkIGluIHRoZSBFbGlzcAo+IG1h bnVhbCBvbiBwYWdlICJDaGFuZ2UgSG9va3MiLikKCj4gVGhpcyBmYWlsdXJlIHRvIGNhbGwgYGFm dGVyLWNoYW5nZS1mdW5jdGlvbnMnIGNvbmZ1c2VzIENDIE1vZGUuICBDQyBNb2RlCj4gZG9lcyBo YXZlIGEgd29ya2Fyb3VuZCBmb3IgdGhpcyBzb3J0IG9mIHRoaW5nLCBidXQgaXQgaXMgbm90IGdv b2QgZW5vdWdoCj4gdG8gY29ycmVjdCBmb3IgdGhlIGJ1ZyBpbiBjYWxsX3Byb2Nlc3MgaW4gdGhp cyBjYXNlLgoKPiBTby4uLi4gIEkgdGhpbmsgdGhlIENDIE1vZGUgd29ya2Fyb3VuZCBuZWVkcyB0 byBiZSBpbXByb3ZlZC4gIEkgd2lsbCBiZQo+IGxvb2tpbmcgYXQgdGhpcy4gIEFsc28sIEkgYW0g Y3VycmVudGx5IG5lZ290aWF0aW5nIHdpdGggRWxpIFphcmV0c2tpaQo+ICh0aGUgcHJpbmNpcGxl IEVtYWNzIG1haW50YWluZXIpIHRvIGZpeCBjYWxsX3Byb2Nlc3MuICBJIGFtIGNvbmZpZGVudAo+ IHRoaXMgd2lsbCBoYXBwZW4uCgo+IEknbSBob3BpbmcgdGhhdCBhIGZpeCB3aWxsIGJlIGluIHRo ZSBFbWFjcy0yNyByZWxlYXNlIGJyYW5jaCAod2hpY2ggd2FzCj4gY3JlYXRlZCB5ZXN0ZXJkYXkp IHdpdGhpbiB0aGUgbmV4dCB3ZWVrIG9yIHNvLgoKPiA+IFBhY2thZ2U6IGNjLW1vZGUKCj4gPiBF bWFjcyAgOiBHTlUgRW1hY3MgMjcuMC41MCAoYnVpbGQgNiwgeDg2XzY0LXBjLWxpbnV4LWdudSwg R1RLKyBWZXJzaW9uIDMuMTguOSkKPiA+ICBvZiAyMDE5LTEyLTIwCj4gPiBQYWNrYWdlOiBDQyBN b2RlIDUuMzQgKEMrKy8vbGh3KQo+ID4gQnVmZmVyIFN0eWxlOiBnb29nbGUKPiA+IGMtZW1hY3Mt ZmVhdHVyZXM6IChwcHMtZXh0ZW5kZWQtc3RhdGUgY29sLTAtcGFyZW4gcG9zaXgtY2hhci1jbGFz c2VzIGdlbi1zdHJpbmctZGVsaW0gZ2VuLWNvbW1lbnQtZGVsaW0gc3ludGF4LXByb3BlcnRpZXMg MS1iaXQpCgo+IFsgLi4uLiBdCgotLQpBbGFuIE1hY2tlbnppZSAoTnVyZW1iZXJnLCBHZXJtYW55 KS4KCgo= From unknown Fri Jun 13 11:28:25 2025 X-Loop: help-debbugs@gnu.org Subject: bug#38691: =?UTF-8?Q?=E7=AD=94=E5=A4=8D:?= bug#38691: CC Mode 5.34 (C++//lhw); `Invalid search bound` when?undo Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-cc-mode@gnu.org Resent-Date: Thu, 23 Jan 2020 20:24:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 38691 X-GNU-PR-Package: cc-mode X-GNU-PR-Keywords: To: "Sun, Wei" Cc: "38691-done@debbugs.gnu.org" <38691@debbugs.gnu.org> Received: via spool by 38691-submit@debbugs.gnu.org id=B38691.15798110337374 (code B ref 38691); Thu, 23 Jan 2020 20:24:02 +0000 Received: (at 38691) by debbugs.gnu.org; 23 Jan 2020 20:23:53 +0000 Received: from localhost ([127.0.0.1]:53217 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iuj17-0001us-6W for submit@debbugs.gnu.org; Thu, 23 Jan 2020 15:23:53 -0500 Received: from colin.muc.de ([193.149.48.1]:15313 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1iuj15-0001uj-Id for 38691@debbugs.gnu.org; Thu, 23 Jan 2020 15:23:52 -0500 Received: (qmail 18568 invoked by uid 3782); 23 Jan 2020 20:23:49 -0000 Received: from acm.muc.de (p4FE15BF5.dip0.t-ipconnect.de [79.225.91.245]) by colin.muc.de (tmda-ofmipd) with ESMTP; Thu, 23 Jan 2020 21:23:47 +0100 Received: (qmail 480 invoked by uid 1000); 23 Jan 2020 20:23:47 -0000 Date: Thu, 23 Jan 2020 20:23:47 +0000 Message-ID: <20200123202347.GB30959@ACM> References: <20191224111633.GB3992@ACM> <20200122202822.GB4319@ACM> <1579758270042.94869@amazon.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1579758270042.94869@amazon.com> User-Agent: Mutt/1.10.1 (2018-07-13) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Wei. Thanks for the quick test and quick reply. I'm closing the bug with this post. On Thu, Jan 23, 2020 at 05:44:30 +0000, Sun, Wei wrote: > Hi Alan, > the issue is fixed on emacs-27, thank you very much. > ________________________________________ > 发件人: Alan Mackenzie > 发送时间: 2020年1月23日 4:28 > 收件人: Sun, Wei > 抄送: 38691@debbugs.gnu.org > 主题: Re: bug#38691: CC Mode 5.34 (C++//lhw); `Invalid search bound` when undo > Hello again, Wei. > I have now committed the fix to call_process (see below) to the emacs-27 > branch at savannah.gnu.org, so the bug should now be fixed in that > branch. The fix should find its way into the master branch sometime > soon. > Could you possibly see your way to testing the bug fix on the emacs-27 > branch with your real code, please, so that we can be sure the bug is > actually fixed? Then I can close the bug as fixed. > Again, thanks for taking the trouble to report this bug, and thanks also > for cutting your test case down to a convenient, easy to work with, > minimum. -- Alan Mackenzie (Nuremberg, Germany).