mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 02:10:05 +08:00
264 lines
6.9 KiB
Lua
264 lines
6.9 KiB
Lua
--=============================================================================
|
|
-- autocmds.lua --- core autocmds for SpaceVim
|
|
-- Copyright (c) 2019-2024 Wang Shidong & Contributors
|
|
-- Author: Wang Shidong < wsdjeg@outlook.com >
|
|
-- URL: https://spacevim.org
|
|
-- License: GPLv3
|
|
--=============================================================================
|
|
local M = {}
|
|
|
|
local log = require('spacevim.logger')
|
|
|
|
local create_autocmd = vim.api.nvim_create_autocmd
|
|
|
|
local touchpadoff
|
|
|
|
local function disable_touchpad(_)
|
|
touchpadoff = 1
|
|
vim.fn.system('synclient touchpadoff=1')
|
|
end
|
|
|
|
local function enable_touchpad(_)
|
|
touchpadoff = 0
|
|
vim.fn.system('synclient touchpadoff=0')
|
|
end
|
|
|
|
local function reload_touchpad_status(_)
|
|
if touchpadoff == 1 then
|
|
disable_touchpad()
|
|
end
|
|
end
|
|
|
|
function M.init()
|
|
log.debug('init spacevim_core autocmd group')
|
|
local spacevim_core = vim.api.nvim_create_augroup('spacevim_core', { clear = true })
|
|
if vim.g.spacevim_relativenumber == 1 then
|
|
create_autocmd({ 'BufEnter', 'WinEnter' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(ev)
|
|
if vim.o.number then
|
|
vim.o.relativenumber = true
|
|
end
|
|
end,
|
|
})
|
|
create_autocmd({ 'BufLeave', 'WinLeave' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(ev)
|
|
if vim.o.number then
|
|
vim.o.relativenumber = false
|
|
end
|
|
end,
|
|
})
|
|
end
|
|
|
|
if vim.g.spacevim_enable_cursorline == 1 then
|
|
local cursorline_flag = false
|
|
create_autocmd({ 'BufEnter', 'WinEnter', 'InsertLeave' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
if not cursorline_flag then
|
|
vim.o.cursorline = true
|
|
end
|
|
end,
|
|
})
|
|
end
|
|
if vim.g.spacevim_enable_cursorcolumn == 1 then
|
|
create_autocmd({ 'BufEnter', 'WinEnter', 'InsertLeave' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.api.nvim_set_option_value('cursorcolumn', true, {
|
|
scope = 'local',
|
|
})
|
|
end,
|
|
})
|
|
create_autocmd({ 'BufLeave', 'WinLeave', 'InsertEnter' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.api.nvim_set_option_value('cursorcolumn', false, {
|
|
scope = 'local',
|
|
})
|
|
end,
|
|
})
|
|
end
|
|
create_autocmd({ 'BufWritePre' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
require('spacevim.plugin.mkdir').create_current()
|
|
end,
|
|
})
|
|
create_autocmd({ 'ColorScheme' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
require('spacevim.api.vim.highlight').hide_in_normal('EndOfBuffer')
|
|
require('spacevim.api.vim.highlight').hide_in_normal('StartifyEndOfBuffer')
|
|
end,
|
|
})
|
|
-- NOTE: ctags find the tags file from the current path instead of the path of currect file
|
|
create_autocmd({ 'BufNewFile', 'BufEnter' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.cmd('set cpoptions+=d')
|
|
end,
|
|
})
|
|
create_autocmd({ 'FileType' }, {
|
|
pattern = { 'qf' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.api.nvim_set_option_value('buflisted', false, {
|
|
scope = 'local',
|
|
})
|
|
end,
|
|
})
|
|
-- ensure every file does syntax highlighting (full)
|
|
create_autocmd({ 'BufEnter' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.cmd('syntax sync fromstart')
|
|
vim.b._spacevim_project_name = vim.g._spacevim_project_name or ''
|
|
end,
|
|
})
|
|
create_autocmd({ 'BufEnter' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
if vim.fn.winnr('$') == 1 and vim.o.buftype == 'quickfix' then
|
|
vim.cmd('bd')
|
|
vim.cmd('q')
|
|
end
|
|
end,
|
|
})
|
|
create_autocmd({ 'BufEnter', 'FileType' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.fn['SpaceVim#mapping#space#refrashLSPC']()
|
|
end,
|
|
})
|
|
create_autocmd({ 'VimEnter' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.fn['SpaceVim#autocmds#VimEnter']()
|
|
end,
|
|
})
|
|
create_autocmd({ 'VimLeavePre' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.fn['SpaceVim#plugins#manager#terminal']()
|
|
end,
|
|
})
|
|
create_autocmd({ 'QuitPre' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.fn['SpaceVim#plugins#windowsmanager#UpdateRestoreWinInfo']()
|
|
end,
|
|
})
|
|
create_autocmd({ 'WinEnter' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.fn['SpaceVim#plugins#windowsmanager#MarkBaseWin']()
|
|
end,
|
|
})
|
|
create_autocmd({ 'BufLeave' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.fn['SpaceVim#plugins#history#savepos']()
|
|
end,
|
|
})
|
|
create_autocmd({ 'VimEnter', 'FocusGained' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.fn['SpaceVim#plugins#history#readcache']()
|
|
end,
|
|
})
|
|
create_autocmd({ 'FocusLost', 'VimLeave' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.fn['SpaceVim#plugins#history#writecache']()
|
|
end,
|
|
})
|
|
create_autocmd({ 'BufReadPost' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.fn['SpaceVim#plugins#history#jumppos']()
|
|
end,
|
|
})
|
|
|
|
create_autocmd({ 'BufWinLeave' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.b._winview = vim.fn.winsaveview()
|
|
end,
|
|
})
|
|
create_autocmd({ 'BufWinEnter' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
if vim.fn.exists('b:_winview') == 1 then
|
|
vim.fn.winrestview(vim.b._winview)
|
|
end
|
|
end,
|
|
})
|
|
create_autocmd({'StdinReadPost'}, {
|
|
pattern = {'*'},
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.api.nvim_create_augroup('SPwelcome', {clear = true})
|
|
end,
|
|
})
|
|
create_autocmd({'SessionLoadPost'}, {
|
|
pattern = {'*'},
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.g._spacevim_session_loaded = 1
|
|
end,
|
|
})
|
|
|
|
|
|
|
|
if vim.fn.executable('synclient') == 1 and vim.g.spacevim_auto_disable_touchpad == 1 then
|
|
touchpadoff = 0
|
|
create_autocmd({ 'InsertEnter' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = disable_touchpad,
|
|
})
|
|
create_autocmd({ 'InsertLeave' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = enable_touchpad,
|
|
})
|
|
create_autocmd({ 'FocusGained' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = reload_touchpad_status,
|
|
})
|
|
create_autocmd({ 'FocusLost' }, {
|
|
pattern = { '*' },
|
|
group = spacevim_core,
|
|
callback = function(_)
|
|
vim.fn.system('synclient touchpadoff=0')
|
|
end,
|
|
})
|
|
end
|
|
end
|
|
|
|
return M
|