-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #6 from Iron-E/feature/vim-libmodal-compatability
Feature/vim libmodal compatability
- Loading branch information
Showing
22 changed files
with
236 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
" Keep track of the user's input history manually. | ||
let s:inputHistory = [] | ||
|
||
" Clear the input history if it grows too long for our usage. | ||
function! s:clear(indexToCheck) abort | ||
if len(s:inputHistory) > a:indexToCheck | ||
for i in range(len(s:inputHistory)) | ||
let s:inputHistory[i] = v:null | ||
endfor | ||
endif | ||
endfunction | ||
|
||
" This is the function that will be called whenever the user presses a button. | ||
function! s:fooMode() abort | ||
" Append to the input history, the latest button press. | ||
let s:inputHistory = add(s:inputHistory, nr2char(g:fooModeInput)) " The input is a character number. | ||
|
||
" Custom logic to test for each character index to see if it matches the 'zfo' mapping. | ||
let l:index = 0 | ||
if s:inputHistory[0] == 'z' | ||
if get(s:inputHistory, 1, v:null) == 'f' | ||
if get(s:inputHistory, 2, v:null) == 'o' | ||
echom 'It works!' | ||
else | ||
let l:index = 2 | ||
endif | ||
else | ||
let l:index = 1 | ||
endif | ||
endif | ||
|
||
call s:clear(l:index) | ||
endfunction | ||
|
||
" Enter the mode to begin the demo. | ||
lua require('libmodal').mode.enter('FOO', 's:fooMode') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,18 @@ | ||
" Recurse counter. | ||
let s:barModeRecurse = 0 | ||
|
||
" Register 'z' as the map for recursing further (by calling the BarMode function again). | ||
let s:barModeCombos = { | ||
\ 'z': 'BarModeEnter', | ||
\} | ||
|
||
" define the BarMode() function which is called whenever the user presses 'z' | ||
function! s:BarMode() | ||
let s:barModeRecurse += 1 | ||
call libmodal#Enter('BAR' . s:barModeRecurse, s:barModeCombos) | ||
let s:barModeRecurse -= 1 | ||
endfunction | ||
|
||
" Call BarMode() initially to begin the demo. | ||
command! BarModeEnter call s:BarMode() | ||
execute 'BarModeEnter' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,11 @@ | ||
" Register key commands and what they do. | ||
let s:barModeCombos = { | ||
\ '': 'echom "You cant exit using escape."', | ||
\ 'q': 'let g:barModeExit = 1' | ||
\} | ||
|
||
" Tell the mode not to exit automatically. | ||
let g:barModeExit = 0 | ||
|
||
" Enter the mode using the key combos created before. | ||
call libmodal#Enter('BAR', s:barModeCombos, 1) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,9 @@ | ||
" Register key combos for splitting windows and then closing windows | ||
let s:barModeCombos = { | ||
\ 'zf': 'split', | ||
\ 'zfo': 'vsplit', | ||
\ 'zfc': 'q' | ||
\} | ||
|
||
" Enter the mode using the key combos. | ||
call libmodal#Enter('BAR', s:barModeCombos) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
" Create a new layer. | ||
let s:layer = { | ||
\ 'n': { | ||
\ 'gg': { | ||
\ 'rhs': 'G', | ||
\ 'noremap': v:true, | ||
\ }, | ||
\ 'G': { | ||
\ 'rhs': 'gg', | ||
\ 'noremap': v:true | ||
\ } | ||
\ } | ||
\} | ||
|
||
" Capture the exit function | ||
let s:exitFunc = luaeval("require('libmodal').layer.enter(_A)", s:layer) | ||
|
||
" Call the exit function in 5 seconds. | ||
call timer_start(5000, s:exitFunc) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,19 @@ | ||
-- Imports | ||
local libmodal = require('libmodal') | ||
|
||
-- Recurse counter. | ||
local fooModeRecurse = 0 | ||
-- Register 'z' as the map for recursing further (by calling the FooMode function again). | ||
local fooModeCombos = { | ||
['z'] = 'lua FooMode()' | ||
} | ||
|
||
-- define the FooMode() function which is called whenever the user presses 'z' | ||
function FooMode() | ||
fooModeRecurse = fooModeRecurse + 1 | ||
libmodal.mode.enter('FOO' .. fooModeRecurse, fooModeCombos) | ||
fooModeRecurse = fooModeRecurse - 1 | ||
end | ||
|
||
-- Call FooMode() initially to begin the demo. | ||
FooMode() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,14 @@ | ||
-- Imports | ||
local libmodal = require('libmodal') | ||
|
||
-- Register key commands and what they do. | ||
local fooModeCombos = { | ||
[''] = 'echom "You cant exit using escape."', | ||
['q'] = 'let g:fooModeExit = 1' | ||
} | ||
|
||
-- Tell the mode not to exit automatically. | ||
vim.api.nvim_set_var('fooModeExit', 0) | ||
|
||
-- Enter the mode using the key combos created before. | ||
libmodal.mode.enter('FOO', fooModeCombos, true) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,12 @@ | ||
-- Imports | ||
local libmodal = require('libmodal') | ||
|
||
-- Register key combos for splitting windows and then closing windows | ||
local fooModeCombos = { | ||
['zf'] = 'split', | ||
['zfo'] = 'vsplit', | ||
['zfc'] = 'q' | ||
} | ||
|
||
-- Enter the mode using the key combos. | ||
libmodal.mode.enter('FOO', fooModeCombos) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
-- Imports | ||
local libmodal = require('libmodal') | ||
|
||
-- create a new layer. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,12 @@ | ||
-- Import | ||
local libmodal = require('libmodal') | ||
|
||
-- Define commands through a dictionary. | ||
local commands = { | ||
['new'] = 'tabnew', | ||
['close'] = 'tabclose', | ||
['last'] = 'tablast' | ||
} | ||
|
||
-- Begin the prompt. | ||
libmodal.prompt.enter('FOO', commands) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,29 @@ | ||
-- Imports | ||
local libmodal = require('libmodal') | ||
|
||
-- Recurse counter | ||
local fooModeRecurse = 1 | ||
|
||
-- Function which is called whenever the user presses a button | ||
function FooMode() | ||
-- Append to the input history, the latest button press. | ||
local userInput = string.char(vim.api.nvim_get_var( | ||
-- The input is a character number. | ||
'foo' .. tostring(fooModeRecurse) .. 'ModeInput' | ||
)) | ||
|
||
-- If the user pressed 'z', then increase the counter and recurse. | ||
if userInput == 'z' then | ||
fooModeRecurse = fooModeRecurse + 1 | ||
Enter() | ||
fooModeRecurse = fooModeRecurse - 1 | ||
end | ||
end | ||
|
||
-- Function to wrap around entering the mode so it can be recursively called. | ||
function Enter() | ||
libmodal.mode.enter('FOO' .. fooModeRecurse, FooMode) | ||
end | ||
|
||
-- Initially call the function to begin the demo. | ||
Enter() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,25 @@ | ||
-- Imports | ||
local api = vim.api | ||
local libmodal = require('libmodal') | ||
|
||
-- Function which is called whenever the user presses a button | ||
local function fooMode() | ||
-- Append to the input history, the latest button press. | ||
local userInput = string.char( | ||
-- The input is a character number. | ||
api.nvim_get_var('fooModeInput') | ||
) | ||
|
||
if userInput == '' then | ||
api.nvim_command("echom 'You cant leave using <Esc>.'") | ||
elseif userInput == 'q' then | ||
-- If the user presses 'q', libmodal will exit the mode. | ||
api.nvim_set_var('fooModeExit', true) | ||
end | ||
end | ||
|
||
-- Tell libmodal not to exit the mode immediately. | ||
api.nvim_set_var('fooModeExit', 0) | ||
|
||
-- Enter the mode. | ||
libmodal.mode.enter('FOO', fooMode, true) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
" This is the list of commands— used for auto completion. | ||
let s:commandList = ['new', 'close', 'last'] | ||
|
||
" This function will be called whenever a command is entered. | ||
function! s:fooMode() abort | ||
let l:userInput = g:fooModeInput | ||
if userInput == 'new' | ||
tabnew | ||
elseif userInput == 'close' | ||
tabclose | ||
elseif userInput == 'last' | ||
tablast | ||
endif | ||
endfunction | ||
|
||
" You have to convert s:commandList from a Vimscript list to a lua table using luaeval(). | ||
call luaeval("require('libmodal').prompt.enter('FOO', 's:fooMode', _A)", s:commandList) |
Oops, something went wrong.