Am Samstag, 5. Oktober 2019, 18:16:53 CEST schrieb Eli Zaretskii: > > Date: Sat, 05 Oct 2019 19:08:21 +0300 > > From: Eli Zaretskii > > Cc: 37633@debbugs.gnu.org, anton@mips.complang.tuwien.ac.at > > > > > Suggested solution: Use byte-to-position to calculate the position in > > > compilation-move-to-column. > > > > This only works in UTF-8 locales, and is not 100% even there, so it > > isn't the right solution. > > In general, byte-to-position is meant to be used only for converting > between byte and character positions of text in Emacs buffers. > > For byte offsets in external text we have bufferpos-to-filepos, but > that requires us to know the encoding of the external text. We need > to find a reasonable way of getting that. Suggestions and patches > welcome. Ok, first I tried bufferpos-to-filepos. (defun compilation-move-to-column (col screen) "Go to column COL on the current line. If SCREEN is non-nil, columns are screen columns, otherwise, they are just char-counts." (setq col (- col compilation-first-column)) (let ((realpos (filepos-to-bufferpos (+ (bufferpos-to-filepos (line- beginning-position) 'approximate) col) 'approximate))) (goto-char (min realpos (line-end-position))))) I left out the (if ) with (screen), because I just wanted to test this case. For the examples I've used, it works with the 'approximate setting. I leave out this screen part to the emacs maintainers, because you maybe want a three-case statement: nil for char-count, 't for screen columns, and 'bytepos for byte-accurate position. JavaScript (node) is ok with the char- count mode. Second test-case: iso8859-1 encoded file with void foo() { printf("test %i", b); printf("testäöü %i", c); } ... test-iso.c:3:23: error: ‘c’ undeclared (first use in this function) 3 | printf("test��� %i", c); | ^ ... works when you click there, too. -- Bernd Paysan "If you want it done right, you have to do it yourself" net2o id: kQusJzA;7*?t=uy@X}1GWr!+0qqp_Cn176t4(dQ* https://net2o.de/