return { -- lillypond integration "martineausimon/nvim-lilypond-suite", ft = "lilypond", dependencies = "uga-rosa/cmp-dictionary", opts = { lilypond = { mappings = { player = "", compile = "", open_pdf = "", switch_buffers = "", insert_version = "", hyphenation = "", hyphenation_change_lang = "", insert_hyphen = "", add_hyphen = "", del_next_hyphen = "", del_prev_hyphen = "", }, }, player = { options = { fluidsynth_flags = { "/usr/share/soundfonts/FluidR3_GM.sf2", }, }, }, }, config = function(_, opts) local nvls = require("nvls") nvls.setup(opts) local lily_dicts = { "~/.local/share/nvim/lazy/nvim-lilypond-suite/lilywords/keywords", "~/.local/share/nvim/lazy/nvim-lilypond-suite/lilywords/musicCommands", "~/.local/share/nvim/lazy/nvim-lilypond-suite/lilywords/musicFunctions", "~/.local/share/nvim/lazy/nvim-lilypond-suite/lilywords/articulations", "~/.local/share/nvim/lazy/nvim-lilypond-suite/lilywords/dynamics", } vim.api.nvim_create_autocmd("FileType", { pattern = "lilypond", callback = function(args) local bufnr = args.buf require("cmp_dictionary").setup({ paths = lily_dicts, }) local fluidsynth_job = nil vim.keymap.set("n", "pm", function() local midi = vim.fn.expand("%:r") .. ".midi" if fluidsynth_job then vim.fn.jobstop(fluidsynth_job) fluidsynth_job = nil print("fluidsynth stopped") return end fluidsynth_job = vim.fn.jobstart({ "fluidsynth", "-i", midi }) print("fluidsynth playing (Ctrl-C to stop)") end, { buffer = bufnr, desc = "Lilypond: output MIDI", }) vim.keymap.set("n", "pp", "Viewer", { buffer = bufnr, desc = "Lilypond: open PDF", }) vim.keymap.set("n", "", function() if fluidsynth_job then vim.fn.jobstop(fluidsynth_job) fluidsynth_job = nil print("fluidsynth stopped") else vim.cmd("normal! ") end end, { buffer = bufnr, desc = "Stop MIDI playback", }) if vim.b[bufnr].first_start_lilypond then return end vim.b[bufnr].first_start_lilypond = true vim.schedule(function() if vim.fn.exists(":Viewer") == 2 then vim.cmd.Viewer() end end) end, }) end, }