view runtime/autoload/context.vim @ 34538:c865c2f93a04 v9.1.0171

patch 9.1.0171: Small split-move related improvements Commit: https://github.com/vim/vim/commit/5cac1a9bee0798d70a7fd80363a1f697759638e8 Author: Sean Dewar <6256228+seandewar@users.noreply.github.com> Date: Tue Mar 12 21:11:39 2024 +0100 patch 9.1.0171: Small split-move related improvements Problem: small improvements can be made to split-move related functions. Solution: apply them (Sean Dewar): - Improve some doc comments (frame_flatten should still work for non-current tabpages, despite the topframe check, which looks benign, though I'm unsure if it's still needed; see #2467). - f_win_splitmove should check_split_disallowed on wp, not targetwin, as that's what win_splitmove checks (though it's probably unnecessary to check b_locked_split at all; see #14109, which I hope to get around to finishing at some point). - Make winframe_restore restore window positions for the altframe, which winframe_remove changes. This doesn't affect the prior behaviour, as we called win_comp_pos after, but as win_comp_pos only works for curtab, and winframe_remove supports non-current tabpages, we should undo it. Regardless, this should mean we don't need win_comp_pos anymore; adjust tests to check that window positions remain unchanged. I'm not sure win_comp_pos is needed after last_status anyway if it doesn't steal rows from another frame to make room for a new statusline, which shouldn't be the case after winframe_remove? To be safe, I'll leave it as is. closes: #14185 Signed-off-by: Sean Dewar <6256228+seandewar@users.noreply.github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Tue, 12 Mar 2024 21:15:03 +0100
parents d81556766132
children
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:    2023 Dec 26

# Typesetting {{{
import autoload './typeset.vim'

export def ConTeXtCmd(path: string): list<string>
  var cmd = ['mtxrun', '--script', 'context', '--nonstopmode', '--autogenerate']
  if !empty(get(g:, 'context_extra_options', ''))
    cmd += g:context_extra_options
  endif
  cmd->add(path)
  return cmd
enddef

export def Typeset(bufname: string, env = {}, Cmd = ConTeXtCmd): bool
  return typeset.TypesetBuffer(bufname, Cmd, env, 'ConTeXt')
enddef

export def JobStatus()
  typeset.JobStatus('ConTeXt')
enddef

export def StopJobs()
  typeset.StopJobs('ConTeXt')
enddef

export def Log(bufname: string)
  execute 'edit' typeset.LogPath(bufname)
enddef
# }}}

# Completion {{{
def BinarySearch(base: string, keywords: list<string>): list<string>
  const pat = '^' .. base
  const len = len(keywords)
  var res = []
  var lft = 0
  var rgt = len

  # Find the leftmost index matching base
  while lft < rgt
    var i = (lft + rgt) / 2
    if keywords[i] < base
      lft = i + 1
    else
      rgt = i
    endif
  endwhile

  while lft < len && keywords[lft] =~ pat
    add(res, keywords[lft])
    lft += 1
  endwhile

  return res
enddef

var isMetaPostBlock = false

var MP_KEYWORDS:  list<string> = []
var CTX_KEYWORDS: list<string> = []

# Complete only MetaPost keywords in MetaPost blocks, and complete only
# ConTeXt keywords otherwise.
export def Complete(findstart: number, base: string): any
  if findstart == 1
    if len(synstack(line("."), 1)) > 0 && synIDattr(synstack(line("."), 1)[0], "name") ==# 'contextMPGraphic'
      isMetaPostBlock = true
      return match(getline('.'), '\S\+\%' .. col('.') .. 'c')
    endif

    # Complete only \commands starting with a backslash
    isMetaPostBlock = false
    var pos = match(getline('.'), '\\\zs\S\+\%' .. col('.') .. 'c')
    return (pos == -1) ? -3 : pos
  endif

  if isMetaPostBlock
    if empty(MP_KEYWORDS)
      MP_KEYWORDS = sort(syntaxcomplete#OmniSyntaxList(['mf\w\+', 'mp\w\+']))
    endif
    return BinarySearch(base, MP_KEYWORDS)
  endif

  if empty(CTX_KEYWORDS)
    CTX_KEYWORDS = sort(syntaxcomplete#OmniSyntaxList([
      'context\w\+', 'texAleph', 'texEtex', 'texLuatex', 'texOmega',
      'texPdftex', 'texTex', 'texXeTeX'
    ]))
  endif
  return BinarySearch(base, CTX_KEYWORDS)
enddef
# }}}

# vim: sw=2 fdm=marker