--- integrations for zenn.dev ---@param prefix? string A URL prefix for my zenn.dev posts local zenn_url = function(prefix) prefix = prefix or "https://zenn.dev/kyoh86/" local name = vim.api.nvim_buf_get_name(0) local relname = vim.fn.fnamemodify(name, ":.") local dirname = vim.fn.fnamemodify(relname, ":h") local extname = vim.fn.fnamemodify(relname, ":e") if dirname == "articles" and extname == "md" then return prefix .. "articles/" .. vim.fn.fnamemodify(relname, ":t:s?\\.md$??") else vim.notify(string.format("opening the %q is not supported", dirname), vim.log.levels.ERROR) end return nil end local state = { loaded = false, entered = false, } local tryEnable = function() if not state.loaded or not state.entered then return end vim.fn["zenn_dev#setup#commands"]({ ZennDevNewArticle = true }) vim.keymap.set("n", "zna", "ZennDevNewArticle", { remap = false, silent = true, desc = "zenn.dev用の記事を追加する" }) vim.keymap.set("n", "xzz", function() local url = zenn_url() if url ~= nil then require("kyoh86.lib.open").gui(url) end end, { remap = false, silent = true, desc = "現在のバッファの記事をZenn.devで開く" }) vim.keymap.set("n", "yzz", function() local url = zenn_url() if url ~= nil then vim.fn.setreg("+", url) end end, { remap = false, silent = true, desc = "現在のバッファの記事のZenn.devのURLをYankする" }) vim.keymap.set("n", "xzl", function() local url = zenn_url("http://localhost:8000/") if url ~= nil then require("kyoh86.lib.open").gui(url) end end, { remap = false, silent = true, desc = "現在のバッファの記事をローカルプレビューで開く" }) vim.keymap.set("n", "yzl", function() local url = zenn_url("http://localhost:8000/") if url ~= nil then vim.fn.setreg("+", url) end end, { remap = false, silent = true, desc = "現在のバッファの記事のローカルプレビューのURLをYankする" }) end local leave = function() state.entered = false pcall(vim.keymap.del, "n", "zna") pcall(vim.keymap.del, "n", "xzz") pcall(vim.keymap.del, "n", "yzz") pcall(vim.keymap.del, "n", "xzl") pcall(vim.keymap.del, "n", "yzl") pcall(vim.api.nvim_del_user_command, "ZennDevNewArticle") end ---@type LazySpec[] local spec = { { "kyoh86/vim-zenn-autocmd", lazy = false, config = function() vim.fn["zenn_autocmd#enable"]() local group = vim.api.nvim_create_augroup("kyoh86-plug-zenn-autocmd", { clear = true }) vim.api.nvim_create_autocmd("User", { pattern = "ZennEnter", group = group, callback = function() state.entered = true tryEnable() end, }) vim.api.nvim_create_autocmd("User", { pattern = "ZennLeave", group = group, callback = leave }) end, }, { "kyoh86/denops-zenn_dev.vim", config = function() vim.api.nvim_create_autocmd("User", { pattern = "DenopsPluginPost:zenn_dev", callback = function() state.loaded = true vim.fn["zenn_dev#setup#params"]({ newArticle = { emoji = "🐼" } }) tryEnable() end, }) end, dependencies = { "denops.vim" }, }, } return spec