view runtime/indent/dts.vim @ 34576:563b0a3bd697 v9.1.0186

patch 9.1.0186: cursor pos wrong on mouse click after eol with 'rl', 've' and conceal Commit: https://github.com/vim/vim/commit/deb2204bffa075ed5485415fc2dbd20e75d87ea4 Author: zeertzjq <zeertzjq@outlook.com> Date: Sun Mar 17 19:44:30 2024 +0100 patch 9.1.0186: cursor pos wrong on mouse click after eol with 'rl', 've' and conceal Problem: Wrong cursor position when clicking after end of line with 'rightleft', 'virtualedit' and conceal. Solution: Set values in ScreenCols[] also with SLF_RIGHTLEFT. Also fix off-by-one cursor position with 'colorcolumn' (zeertzjq). closes: #14218 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Sun, 17 Mar 2024 20:00:02 +0100
parents 695b50472e85
children
line wrap: on
line source

" Vim indent file
" Language:		Device Tree
" Maintainer:		Roland Hieber, Pengutronix <rhi@pengutronix.de>
"
if exists("b:did_indent")
    finish
endif
let b:did_indent = 1

setlocal autoindent
setlocal nosmartindent
setlocal indentkeys=o,O,0},0<>>,!<Ctrl-F>
setlocal indentexpr=GetDTSIndent()
setlocal nolisp

let b:undo_indent = 'setl autoindent< smartindent< indentkeys< indentexpr< lisp<'

function GetDTSIndent()
    let sw        = shiftwidth()
    let lnum      = v:lnum
    let line      = getline(lnum)
    let prevline  = getline(prevnonblank(lnum-1))
    let prevind   = indent(prevnonblank(lnum-1))

    if prevnonblank(lnum-1) < 1
        return 0
    endif

    " Don't indent header and preprocessor directives
    if line =~ '^\s*\(/dts-\|#\(include\|define\|undef\|warn\(ing\)\?\|error\|if\(n\?def\)\?\|else\|elif\|endif\)\)'
        return 0

    " Don't indent /node and &label blocks
    elseif line =~ '^\s*[/&].\+{\s*$'
        return 0

    " Indent to matching bracket or remove one shiftwidth if line begins with } or >
    elseif line =~ '^\s*[}>]'
        " set cursor to closing bracket on current line
        let col = matchend(line, '^\s*[>}]')
        call cursor(lnum, col)
        
        " determine bracket type, {} or <>
        let pair = strpart('{}<>', stridx('}>', line[col-1]) * 2, 2)

        " find matching bracket pair
        let pairline = searchpair(pair[0], '', pair[1], 'bW')

        if pairline > 0 
            return indent(pairline)
        else
            return prevind - sw
        endif

    " else, add one level of indent if line ends in { or < or = or ,
    elseif prevline =~ '[{<=,]$'
        return prevind + sw

    else
        return prevind
    endif

endfunction