unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#10258: compilation-error-regexp-alist just assumes columns not characters
@ 2011-12-09 20:18 jidanni
  2011-12-12 16:28 ` Stefan Monnier
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: jidanni @ 2011-12-09 20:18 UTC (permalink / raw)
  To: 10258

Gentlemen, why does *compilation* say

  basex -b y=3 TaiwanAMFMSW.xq
  Stopped at line 57, column 29 in /home/jidanni/millerliu/xquery/TaiwanAMFMSW.xq:
  [XPST0003] Expecting "return", found "r".

But the cursor upon next-error ends up at

        case "TaiwanAMFMSW_by_band" retrun let $K:= "AM/FM/SW" return ()
                            ^      ^
                            A, not B       if those blanks at front were a TAB.

Well that is because on
   (describe-variable (quote compilation-error-regexp-alist))
there is nary a mention of what to do when the compiler making the
message is counting characters (TAB=1) and emacs is thinking it is
counting columns (TAB=8, etc.).

All we see is
  COLUMN can also be of the form (COLUMN . END-COLUMN) meaning a range of
  columns starting on LINE and ending on END-LINE, if that matched.

There is no way to communicate to emacs that this certain compiler does
not know how many columns a TAB equals in emacs, and is just reporting a
character count from the last newline.

So one is forced to untabify ones source files!

So it seems that compilation-error-regexp-alist needs an extra parameter
to tell if we are just counting characters or actually counting columns.

P.S., guess what happens when there are wide characters involved,

        case "補補補TaiwanAMFMSW_by_band" retrun let $K:= "AM/FM/SW" return ()

you guessed it!

How can I tell emacs in
   (add-to-list 'compilation-error-regexp-alist-alist
   '(basex "^Stopped at line \\([0-9]+\\), column \\([0-9]+\\) in \\(.*?\\):$" 3 1 2))
     (add-to-list 'compilation-error-regexp-alist 'basex)
that "column" means "char"?





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#10258: compilation-error-regexp-alist just assumes columns not characters
  2011-12-09 20:18 bug#10258: compilation-error-regexp-alist just assumes columns not characters jidanni
@ 2011-12-12 16:28 ` Stefan Monnier
  2011-12-14 14:09 ` jidanni
  2011-12-21 23:59 ` jidanni
  2 siblings, 0 replies; 6+ messages in thread
From: Stefan Monnier @ 2011-12-12 16:28 UTC (permalink / raw)
  To: jidanni; +Cc: 10258

> there is nary a mention of what to do when the compiler making the
> message is counting characters (TAB=1) and emacs is thinking it is
> counting columns (TAB=8, etc.).

There's compilation-error-screen-columns, but it can't be set only for
a specific compilation-error-regexp-alist entry.  OTOH in Emacs-24, you
can set it buffer-locally in the target buffer (i.e. in your
TaiwanAMFMSW.xq file).


        Stefan





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#10258: compilation-error-regexp-alist just assumes columns not characters
  2011-12-09 20:18 bug#10258: compilation-error-regexp-alist just assumes columns not characters jidanni
  2011-12-12 16:28 ` Stefan Monnier
@ 2011-12-14 14:09 ` jidanni
  2011-12-16  0:06   ` Stefan Monnier
  2011-12-21 23:59 ` jidanni
  2 siblings, 1 reply; 6+ messages in thread
From: jidanni @ 2011-12-14 14:09 UTC (permalink / raw)
  To: monnier; +Cc: 10258

>>>>> "SM" == Stefan Monnier <monnier@iro.umontreal.ca> writes:
SM> There's compilation-error-screen-columns, but it can't be set only for
SM> a specific compilation-error-regexp-alist entry.
Well do consider that enhancement. In the meantime I discovered this works:

(setq compilation-error-screen-columns t);default, set once more for good luck.
(make-variable-buffer-local 'compilation-error-screen-columns)
(add-hook 'xquery-mode-hook
	  (function (lambda ()
		      (setq compilation-error-screen-columns nil))))





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#10258: compilation-error-regexp-alist just assumes columns not characters
  2011-12-14 14:09 ` jidanni
@ 2011-12-16  0:06   ` Stefan Monnier
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Monnier @ 2011-12-16  0:06 UTC (permalink / raw)
  To: jidanni; +Cc: 10258

> (setq compilation-error-screen-columns t);default, set once more for good luck.
> (make-variable-buffer-local 'compilation-error-screen-columns)
> (add-hook 'xquery-mode-hook
> 	  (function (lambda ()
> 		      (setq compilation-error-screen-columns nil))))

Better not call make-variable-buffer-local except on variables you have
defined yourself (e.g. in this case only do it in compile.el).
I.e. use

 (add-hook 'xquery-mode-hook
 	  (lambda ()
 	    (set (make-local-variable 'compilation-error-screen-columns) nil)))


-- Stefan





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#10258: compilation-error-regexp-alist just assumes columns not characters
  2011-12-09 20:18 bug#10258: compilation-error-regexp-alist just assumes columns not characters jidanni
  2011-12-12 16:28 ` Stefan Monnier
  2011-12-14 14:09 ` jidanni
@ 2011-12-21 23:59 ` jidanni
  2011-12-27 23:49   ` Stefan Monnier
  2 siblings, 1 reply; 6+ messages in thread
From: jidanni @ 2011-12-21 23:59 UTC (permalink / raw)
  To: monnier; +Cc: 10258

>>>>> "SM" == Stefan Monnier <monnier@iro.umontreal.ca> writes:
SM> Better not call make-variable-buffer-local except...
OK thanks. Maybe
(info "(emacs) Locals")
more precisely,
(Info-menu "Emacs (emacs-snapshot)" nil)
(Info-index "make-variable-buffer-local")
should warn/hint about that, just like
(describe-function (quote make-variable-buffer-local))
already does.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#10258: compilation-error-regexp-alist just assumes columns not characters
  2011-12-21 23:59 ` jidanni
@ 2011-12-27 23:49   ` Stefan Monnier
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Monnier @ 2011-12-27 23:49 UTC (permalink / raw)
  To: jidanni; +Cc: 10258-done

SM> Better not call make-variable-buffer-local except...
> OK thanks. Maybe
> (info "(emacs) Locals")
> more precisely,
> (Info-menu "Emacs (emacs-snapshot)" nil)
> (Info-index "make-variable-buffer-local")
> should warn/hint about that, just like
> (describe-function (quote make-variable-buffer-local))
> already does.

Indeed.  I've installed the patch below,


        Stefan


=== modified file 'doc/lispref/variables.texi'
--- doc/lispref/variables.texi	2011-12-23 13:14:12 +0000
+++ doc/lispref/variables.texi	2011-12-27 23:42:22 +0000
@@ -1352,6 +1352,8 @@
 This function marks @var{variable} (a symbol) automatically
 buffer-local, so that any subsequent attempt to set it will make it
 local to the current buffer at the time.
+Contrary to @code{make-local-variable} with which it is often confused, this
+cannot be undone, and affects the behavior of the variable in all buffers.
 
 A peculiar wrinkle of this feature is that binding the variable (with
 @code{let} or other binding constructs) does not create a buffer-local






^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-12-27 23:49 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-12-09 20:18 bug#10258: compilation-error-regexp-alist just assumes columns not characters jidanni
2011-12-12 16:28 ` Stefan Monnier
2011-12-14 14:09 ` jidanni
2011-12-16  0:06   ` Stefan Monnier
2011-12-21 23:59 ` jidanni
2011-12-27 23:49   ` Stefan Monnier

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).