flashcards.nvim

Flashcards neovim plugin
git clone git://git.laack.co/flashcards.nvim.git
Log | Files | Refs | README | LICENSE

commit 5979f57fc0650df0a280c5cbe1cdea968080bd64
parent 69205dfc53c911d48ce0fd2381dcaa8a5d38ef38
Author: Andrew Laack <andrew@laack.co>
Date:   Sat, 12 Sep 2026 10:58:10 -0500

Improved readme messaging and added better messaging for when no flashcards are found

Diffstat:
MREADME | 21+++++++++++----------
Mplugin/init.lua | 49++++++++++++++++++++++++++++---------------------
2 files changed, 39 insertions(+), 31 deletions(-)

diff --git a/README b/README @@ -10,18 +10,19 @@ With packer: commit = "fe13b8d8381607155a74d002513e13f469c87910" } -Commands -======== -Put in your config file: +Keybindings +=========== +Put the following in your config file: -- default: N/A - vim.api.nvim_set_keymap('n', '<leader>f', ':Flash<CR>', {}) - -- default: right arrow - -- vim.api.nvim_set_keymap('n', '<leader>fn', ':NextCard<CR>', {}) - -- default: left arrow - -- vim.api.nvim_set_keymap('n', '<leader>fp', ':PreviousCard<CR>', {}) - -- default: up / down arrow - -- vim.api.nvim_set_keymap('n', '<leader>ff', ':Flip<CR>', {}) + vim.api.nvim_set_keymap('n', '<leader>f', '<Cmd>Flash<CR>', {}) + -- default: right arrow, l + -- vim.api.nvim_set_keymap('n', '<leader>fn', '<Cmd>NextCard<CR>', {}) + -- default: left arrow, h + -- vim.api.nvim_set_keymap('n', '<leader>fp', '<Cmd>PreviousCard<CR>', {}) + -- default: up / down arrow, j / k + -- vim.api.nvim_set_keymap('n', '<leader>ff', '<Cmd>Flip<CR>', {}) + Usage ===== diff --git a/plugin/init.lua b/plugin/init.lua @@ -57,15 +57,23 @@ local function load_cards() files = shuffle(files) for index, _ in ipairs(files) do - local file = vim.fn.readfile(files[index]) - -- add card to state - table.insert(state.cards, { - formatH1(file[1]), formatCard(file) - }) + if files[index] ~= "" then + local file = vim.fn.readfile(files[index]) + -- add card to state + table.insert(state.cards, { + formatH1(file[1]), formatCard(file) + }) + end end end local function render() + + if state.cards[state.index] == nil then + print("Unable to find card.") + return + end + vim.bo[state.buf].modifiable = true vim.api.nvim_buf_set_lines(state.buf, 0, -1, false, {}) if state.showing_back then @@ -106,32 +114,31 @@ end local function flash() - -- this also clears the card state. load_cards() - -- if this was already opened close and reopen because that's easier than figuring out if the window - -- or buffer is rendered right now. - + if state.cards[1] == nil then + print("No cards found in the cwd.") + return + end if state.buf ~= nil then vim.api.nvim_buf_delete(state.buf, { force = true }) state.buf = nil - state.win = nil -- do windows have to be closed? presumably not, I think the window abstraction is simply a view into a buffer - -- which would then be closed by this point thus requiring no cleanup. + state.win = nil end state.win = vim.api.nvim_get_current_win() state.buf = vim.api.nvim_create_buf(false, true) - - vim.api.nvim_buf_set_keymap(state.buf, "n", "<Left>", ":PreviousCard<CR>", {}) - vim.api.nvim_buf_set_keymap(state.buf, "n", "<Right>", ":NextCard<CR>", {}) - vim.api.nvim_buf_set_keymap(state.buf, "n", "<Up>", ":Flip<CR>", {}) - vim.api.nvim_buf_set_keymap(state.buf, "n", "<Down>", ":Flip<CR>", {}) - - vim.api.nvim_buf_set_keymap(state.buf, "n", "h", ":PreviousCard<CR>", {}) - vim.api.nvim_buf_set_keymap(state.buf, "n", "l", ":NextCard<CR>", {}) - vim.api.nvim_buf_set_keymap(state.buf, "n", "k", ":Flip<CR>", {}) - vim.api.nvim_buf_set_keymap(state.buf, "n", "j", ":Flip<CR>", {}) + + vim.api.nvim_buf_set_keymap(state.buf, "n", "<Left>", "<Cmd>PreviousCard<CR>", {}) + vim.api.nvim_buf_set_keymap(state.buf, "n", "<Right>", "<Cmd>NextCard<CR>", {}) + vim.api.nvim_buf_set_keymap(state.buf, "n", "<Up>", "<Cmd>Flip<CR>", {}) + vim.api.nvim_buf_set_keymap(state.buf, "n", "<Down>", "<Cmd>Flip<CR>", {}) + + vim.api.nvim_buf_set_keymap(state.buf, "n", "h", "<Cmd>PreviousCard<CR>", {}) + vim.api.nvim_buf_set_keymap(state.buf, "n", "l", "<Cmd>NextCard<CR>", {}) + vim.api.nvim_buf_set_keymap(state.buf, "n", "k", "<Cmd>Flip<CR>", {}) + vim.api.nvim_buf_set_keymap(state.buf, "n", "j", "<Cmd>Flip<CR>", {}) local row = 0 local col = 0