Mercurial > vim
view runtime/indent/context.vim @ 33017:7d0357f70cf8 v9.0.1800
patch 9.0.1800: Cursor position still wrong with 'showbreak' and virtual text
Commit: https://github.com/vim/vim/commit/6a3897232aecd3e8b9e8b23955e55c1993e5baec
Author: zeertzjq <zeertzjq@outlook.com>
Date: Sun Aug 27 19:04:14 2023 +0200
patch 9.0.1800: Cursor position still wrong with 'showbreak' and virtual text
Problem: Cursor position still wrong with 'showbreak' and virtual text
after last character or 'listchars' "eol".
Solution: Remove unnecessary w_wcol adjustment in curs_columns(). Also
fix first char of virtual text not shown at the start of a screen
line.
closes: #12478
closes: #12532
closes: #12904
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 27 Aug 2023 19:15:05 +0200 |
parents | f00c56ee8118 |
children | d81556766132 |
line wrap: on
line source
vim9script # Language: ConTeXt typesetting engine # Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com> # Former Maintainers: Nikolai Weibull <now@bitwi.se> # Latest Revision: 2022 Aug 12 if exists("b:did_indent") finish endif # Load MetaPost indentation script (this will also set b:did_indent) runtime! indent/mp.vim setlocal indentexpr=ConTeXtIndent() b:undo_indent = "setl indentexpr<" def PrevNotComment(l: number): number var prevlnum = prevnonblank(l) while prevlnum > 0 && getline(prevlnum) =~# '^\s*%' prevlnum = prevnonblank(prevlnum - 1) endwhile return prevlnum enddef def FindPair(pstart: string, pmid: string, pend: string): number cursor(v:lnum, 1) return indent(searchpair(pstart, pmid, pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')) enddef def ConTeXtIndent(): number # Use MetaPost rules inside MetaPost graphic environments if len(synstack(v:lnum, 1)) > 0 && synIDattr(synstack(v:lnum, 1)[0], "name") ==# 'contextMPGraphic' return g:MetaPostIndent() endif const prevlnum = PrevNotComment(v:lnum - 1) const prevind = indent(prevlnum) const prevline = getline(prevlnum) const currline = getline(v:lnum) # If the current line starts with ], match indentation. if currline =~# '^\s*\]' return FindPair('\[', '', '\]') endif # If the current line starts with }, match indentation. if currline =~# '^\s*}' return FindPair('{', '', '}') endif # If the previous line ends with [ or { (possibly followed by a comment) then indent. if prevline =~# '[{[]\s*\%(%.*\)\=$' return prevind + shiftwidth() endif return -1 enddef # vim: sw=2 fdm=marker