1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-24 02:10:05 +08:00
SpaceVim/lua/spacevim/autocmds.lua
2024-06-04 23:36:20 +08:00

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