@@ -25,9 +25,6 @@ local timers = {
25
25
local last_focus = {}
26
26
local refresh_real_curwin
27
27
28
- -- The events on which lualine redraws itself
29
- local default_refresh_events =
30
- ' WinEnter,BufEnter,BufWritePost,SessionLoadPost,FileChangedShellPost,VimResized,Filetype,CursorMoved,CursorMovedI,ModeChanged'
31
28
-- Helper for apply_transitional_separators()
32
29
--- finds first applied highlight group after str_checked in status
33
30
--- @param status string : unprocessed statusline string
312
309
--- @class LualineRefreshOpts
313
310
--- @field scope LualineRefreshOptsKind
314
311
--- @field place LualineRefreshOptsPlace[]
315
- --- @field trigger ' autocmd ' | ' autocmd_redired ' | ' timer ' | ' unknown'
312
+ --- @field trigger ' timer ' | ' init ' | ' unknown'
316
313
--- Refresh contents of lualine
317
314
--- @param opts LualineRefreshOpts
318
315
local function refresh (opts )
@@ -325,36 +322,6 @@ local function refresh(opts)
325
322
trigger = ' unknown' ,
326
323
})
327
324
328
- -- updating statusline in autocommands context seems to trigger 100 different bugs
329
- -- lets just defer it to a timer context and update there
330
- -- Since updating stl in command mode doesn't take effect
331
- -- refresh ModeChanged command in autocmd context as exception.
332
- -- workaround for
333
- -- https://github.com/neovim/neovim/issues/15300
334
- -- https://github.com/neovim/neovim/issues/19464
335
- -- https://github.com/nvim-lualine/lualine.nvim/issues/753
336
- -- https://github.com/nvim-lualine/lualine.nvim/issues/751
337
- -- https://github.com/nvim-lualine/lualine.nvim/issues/755
338
- -- https://github.com/neovim/neovim/issues/19472
339
- -- https://github.com/nvim-lualine/lualine.nvim/issues/791
340
- if
341
- opts .trigger == ' autocmd'
342
- and vim .v .event .new_mode ~= ' c'
343
- -- scheduling in op-pending mode seems to call the callback forever.
344
- -- so this is restricted in op-pending mode.
345
- -- https://github.com/neovim/neovim/issues/22263
346
- -- https://github.com/nvim-lualine/lualine.nvim/issues/967
347
- -- note this breaks mode component while switching to op-pending mode
348
- and not vim .tbl_contains ({ ' no' , ' nov' , ' noV' }, vim .v .event .new_mode )
349
- and not vim .tbl_contains ({ ' no' , ' nov' , ' noV' }, vim .v .event .old_mode )
350
- then
351
- opts .trigger = ' autocmd_redired'
352
- vim .schedule (function ()
353
- M .refresh (opts )
354
- end )
355
- return
356
- end
357
-
358
325
local wins = {}
359
326
local old_actual_curwin = vim .g .actual_curwin
360
327
@@ -463,24 +430,22 @@ end
463
430
local function set_tabline (hide )
464
431
vim .loop .timer_stop (timers .tal_timer )
465
432
timers .halt_tal_refresh = true
466
- vim .cmd ([[ augroup lualine_tal_refresh | exe "autocmd!" | augroup END]] )
467
433
if not hide and next (config .tabline ) ~= nil then
468
434
vim .loop .timer_start (
469
435
timers .tal_timer ,
470
436
0 ,
471
437
config .options .refresh .tabline ,
472
438
modules .utils .timer_call (timers .tal_timer , ' lualine_tal_refresh' , function ()
473
- refresh { kind = ' tabpage' , place = { ' tabline' }, trigger = ' timer' }
439
+ refresh { scope = ' tabpage' , place = { ' tabline' }, trigger = ' timer' }
474
440
end , 3 , ' lualine: Failed to refresh tabline' )
475
441
)
476
- modules .utils .define_autocmd (
477
- default_refresh_events ,
478
- ' *' ,
479
- " call v:lua.require'lualine'.refresh({'kind': 'tabpage', 'place': ['tabline'], 'trigger': 'autocmd'})" ,
480
- ' lualine_tal_refresh'
481
- )
482
- modules .nvim_opts .set (' showtabline' , 2 , { global = true })
442
+ modules .nvim_opts .set (' showtabline' , config .options .always_show_tabline and 2 or 1 , { global = true })
483
443
timers .halt_tal_refresh = false
444
+ vim .schedule (function ()
445
+ -- imediately refresh upon load
446
+ -- schedule needed so stuff like filetype detect can run first
447
+ refresh { scope = ' tabpage' , place = { ' tabline' }, trigger = ' init' }
448
+ end )
484
449
else
485
450
modules .nvim_opts .restore (' tabline' , { global = true })
486
451
modules .nvim_opts .restore (' showtabline' , { global = true })
493
458
local function set_statusline (hide )
494
459
vim .loop .timer_stop (timers .stl_timer )
495
460
timers .halt_stl_refresh = true
496
- vim .cmd ([[ augroup lualine_stl_refresh | exe "autocmd!" | augroup END]] )
497
461
if not hide and (next (config .sections ) ~= nil or next (config .inactive_sections ) ~= nil ) then
498
462
if vim .go .statusline == ' ' then
499
463
modules .nvim_opts .set (' statusline' , ' %#Normal#' , { global = true })
@@ -505,33 +469,30 @@ local function set_statusline(hide)
505
469
0 ,
506
470
config .options .refresh .statusline ,
507
471
modules .utils .timer_call (timers .stl_timer , ' lualine_stl_refresh' , function ()
508
- refresh { kind = ' window' , place = { ' statusline' }, trigger = ' timer' }
472
+ refresh { scope = ' window' , place = { ' statusline' }, trigger = ' timer' }
509
473
end , 3 , ' lualine: Failed to refresh statusline' )
510
474
)
511
- modules .utils .define_autocmd (
512
- default_refresh_events ,
513
- ' *' ,
514
- " call v:lua.require'lualine'.refresh({'kind': 'window', 'place': ['statusline'], 'trigger': 'autocmd'})" ,
515
- ' lualine_stl_refresh'
516
- )
517
475
else
518
476
modules .nvim_opts .set (' laststatus' , 2 , { global = true })
519
477
vim .loop .timer_start (
520
478
timers .stl_timer ,
521
479
0 ,
522
480
config .options .refresh .statusline ,
523
481
modules .utils .timer_call (timers .stl_timer , ' lualine_stl_refresh' , function ()
524
- refresh { kind = ' tabpage' , place = { ' statusline' }, trigger = ' timer' }
482
+ refresh { scope = ' tabpage' , place = { ' statusline' }, trigger = ' timer' }
525
483
end , 3 , ' lualine: Failed to refresh statusline' )
526
484
)
527
- modules .utils .define_autocmd (
528
- default_refresh_events ,
529
- ' *' ,
530
- " call v:lua.require'lualine'.refresh({'kind': 'tabpage', 'place': ['statusline'], 'trigger': 'autocmd'})" ,
531
- ' lualine_stl_refresh'
532
- )
533
485
end
534
486
timers .halt_stl_refresh = false
487
+ vim .schedule (function ()
488
+ -- imediately refresh upon load
489
+ -- schedule needed so stuff like filetype detect can run first
490
+ if config .options .globalstatus then
491
+ refresh { scope = ' window' , place = { ' statusline' }, trigger = ' init' }
492
+ else
493
+ refresh { scope = ' tabpage' , place = { ' statusline' }, trigger = ' init' }
494
+ end
495
+ end )
535
496
else
536
497
modules .nvim_opts .restore (' statusline' , { global = true })
537
498
for _ , win in ipairs (vim .api .nvim_list_wins ()) do
@@ -546,23 +507,21 @@ end
546
507
local function set_winbar (hide )
547
508
vim .loop .timer_stop (timers .wb_timer )
548
509
timers .halt_wb_refresh = true
549
- vim .cmd ([[ augroup lualine_wb_refresh | exe "autocmd!" | augroup END]] )
550
510
if not hide and (next (config .winbar ) ~= nil or next (config .inactive_winbar ) ~= nil ) then
551
511
vim .loop .timer_start (
552
512
timers .wb_timer ,
553
513
0 ,
554
514
config .options .refresh .winbar ,
555
515
modules .utils .timer_call (timers .wb_timer , ' lualine_wb_refresh' , function ()
556
- refresh { kind = ' tabpage' , place = { ' winbar' }, trigger = ' timer' }
516
+ refresh { scope = ' tabpage' , place = { ' winbar' }, trigger = ' timer' }
557
517
end , 3 , ' lualine: Failed to refresh winbar' )
558
518
)
559
- modules .utils .define_autocmd (
560
- default_refresh_events ,
561
- ' *' ,
562
- " call v:lua.require'lualine'.refresh({'kind': 'tabpage', 'place': ['winbar'], 'trigger': 'autocmd'})" ,
563
- ' lualine_wb_refresh'
564
- )
565
519
timers .halt_wb_refresh = false
520
+ vim .schedule (function ()
521
+ -- imediately refresh upon load.
522
+ -- schedule needed so stuff like filetype detect can run first
523
+ refresh { scope = ' tabpage' , place = { ' winbar' }, trigger = ' init' }
524
+ end )
566
525
elseif vim .fn .has (' nvim-0.8' ) == 1 then
567
526
modules .nvim_opts .restore (' winbar' , { global = true })
568
527
for _ , win in ipairs (vim .api .nvim_list_wins ()) do
0 commit comments