local common = require('hardline.common') local fmt = string.format local enabled = false local cache = '' local options = { filetypes = { 'asciidoc', 'help', 'mail', 'markdown', 'nroff', 'org', 'pandoc', 'plaintex', 'rst', 'tex', 'text', }, max_lines = 5000, } local function in_visual() local mode = common.modes[vim.fn.mode()] or common.modes['?'] return mode.state == 'visual' end local function get_wordcount() local query = in_visual() and 'visual_words' or 'words' local wordcount = vim.fn.wordcount()[query] return fmt('%d words', wordcount) end local function get_item() if not enabled then common.set_cache_autocmds('hardline_wordcount') enabled = true end if not vim.tbl_contains(options.filetypes, vim.bo.filetype) then return '' end if vim.fn.line('$') > options.max_lines then return '' end if vim.b.hardline_wordcount and not in_visual() then return cache end vim.b.hardline_wordcount = true cache = get_wordcount() return cache end return { get_item = get_item, }