Fix dirty buffer after doing anything in title bar, OnCommand in lua stops c code, FKeys
This commit is contained in:
@@ -281,14 +281,6 @@ function AddCo(f)
|
|||||||
return Coroutines[i]
|
return Coroutines[i]
|
||||||
end
|
end
|
||||||
|
|
||||||
OnCommandCallbacks = {}
|
|
||||||
table.insert(OnCommandCallbacks, function (e)
|
|
||||||
if e.key == SDLK_F and e.ctrl == 1 and e.shift == 1 then
|
|
||||||
C("git grep -n "..GetLoadWord().." :/") end
|
|
||||||
if e.key == SDLK_B and e.ctrl == 1 then
|
|
||||||
Cmd { working_dir = GetWorkDir(), kind = "console", cmd = "build.bat" } end
|
|
||||||
end)
|
|
||||||
|
|
||||||
function OnUpdate(e)
|
function OnUpdate(e)
|
||||||
local new_co_list = {}
|
local new_co_list = {}
|
||||||
for key, co in pairs(Coroutines) do
|
for key, co in pairs(Coroutines) do
|
||||||
@@ -301,11 +293,45 @@ function OnUpdate(e)
|
|||||||
Coroutines = new_co_list
|
Coroutines = new_co_list
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function KeybindsBasic(e)
|
||||||
|
if e.key == SDLK_F and e.ctrl == 1 and e.shift == 1 then
|
||||||
|
C("git grep -n "..GetLoadWord().." :/")
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
FKey = {"build.bat", "", "", "", "", "", "", "", "", "", "", ""}
|
||||||
|
FKeySDLK = {SDLK_F1, SDLK_F2, SDLK_F3, SDLK_F4, SDLK_F5, SDLK_F6, SDLK_F7, SDLK_F8, SDLK_F9, SDLK_F10, SDLK_F11, SDLK_F12}
|
||||||
|
|
||||||
|
function KeybindsFKeys(e)
|
||||||
|
for i = #FKey,1,-1 do
|
||||||
|
if FKey[i] ~= "" then
|
||||||
|
if e.key == FKeySDLK[i] then
|
||||||
|
Cmd { working_dir = GetWorkDir(), kind = "console", cmd = FKey[i] }
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
BuiltinOnCommandCallbacks = {
|
||||||
|
KeybindsBasic,
|
||||||
|
KeybindsFKeys,
|
||||||
|
}
|
||||||
|
OnCommandCallbacks = BuiltinOnCommandCallbacks
|
||||||
|
|
||||||
function OnCommand(e)
|
function OnCommand(e)
|
||||||
for i = #OnCommandCallbacks,1,-1 do
|
for i = #OnCommandCallbacks,1,-1 do
|
||||||
on_command = OnCommandCallbacks[i]
|
on_command = OnCommandCallbacks[i]
|
||||||
on_command(e)
|
local result = on_command(e)
|
||||||
|
if result then
|
||||||
|
return true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function OnInit()
|
function OnInit()
|
||||||
|
|||||||
@@ -340,8 +340,13 @@ void OnCommand(Event event) {
|
|||||||
BSet active = GetActiveSet();
|
BSet active = GetActiveSet();
|
||||||
Int buffer_change_id = active.buffer->change_id;
|
Int buffer_change_id = active.buffer->change_id;
|
||||||
|
|
||||||
void CallOnCommand(Event * event);
|
bool skip = CallOnCommand(&event);
|
||||||
CallOnCommand(&event);
|
if (skip) {
|
||||||
|
// :OnCommandEnding
|
||||||
|
MergeCarets(active.buffer, &active.view->carets);
|
||||||
|
IF_DEBUG(AssertRanges(active.view->carets));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -522,15 +527,13 @@ void OnCommand(Event event) {
|
|||||||
Command_SelectRangeOneCursor(main.view, caret);
|
Command_SelectRangeOneCursor(main.view, caret);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ShiftPress(SDLK_F4)) {
|
if (CtrlPress(SDLK_E)) {
|
||||||
Command_GotoNextInList(active.window, -1);
|
Command_GotoNextInList(active.window, -1);
|
||||||
} else if (Press(SDLK_F4)) {
|
} else if (AltPress(SDLK_E)) {
|
||||||
Command_GotoNextInList(active.window, 1);
|
Command_GotoNextInList(active.window, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CtrlShiftPress(SDLK_F)) {
|
if (CtrlPress(SDLK_F)) {
|
||||||
// because using lua thing
|
|
||||||
} else if (CtrlPress(SDLK_F)) {
|
|
||||||
if (!active.window->is_search_bar) {
|
if (!active.window->is_search_bar) {
|
||||||
BSet search = GetBSet(main.window->search_bar_window);
|
BSet search = GetBSet(main.window->search_bar_window);
|
||||||
String16 string = GetString(main.buffer, main.view->carets[0].range);
|
String16 string = GetString(main.buffer, main.view->carets[0].range);
|
||||||
@@ -659,6 +662,7 @@ void OnCommand(Event event) {
|
|||||||
Command_Find(main.view, GetSearchString(main.window), true);
|
Command_Find(main.view, GetSearchString(main.window), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// :OnCommandEnding
|
||||||
MergeCarets(active.buffer, &active.view->carets);
|
MergeCarets(active.buffer, &active.view->carets);
|
||||||
IF_DEBUG(AssertRanges(active.view->carets));
|
IF_DEBUG(AssertRanges(active.view->carets));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -351,14 +351,6 @@ function AddCo(f)
|
|||||||
return Coroutines[i]
|
return Coroutines[i]
|
||||||
end
|
end
|
||||||
|
|
||||||
OnCommandCallbacks = {}
|
|
||||||
table.insert(OnCommandCallbacks, function (e)
|
|
||||||
if e.key == SDLK_F and e.ctrl == 1 and e.shift == 1 then
|
|
||||||
C("git grep -n "..GetLoadWord().." :/") end
|
|
||||||
if e.key == SDLK_B and e.ctrl == 1 then
|
|
||||||
Cmd { working_dir = GetWorkDir(), kind = "console", cmd = "build.bat" } end
|
|
||||||
end)
|
|
||||||
|
|
||||||
function OnUpdate(e)
|
function OnUpdate(e)
|
||||||
local new_co_list = {}
|
local new_co_list = {}
|
||||||
for key, co in pairs(Coroutines) do
|
for key, co in pairs(Coroutines) do
|
||||||
@@ -371,11 +363,45 @@ function OnUpdate(e)
|
|||||||
Coroutines = new_co_list
|
Coroutines = new_co_list
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function KeybindsBasic(e)
|
||||||
|
if e.key == SDLK_F and e.ctrl == 1 and e.shift == 1 then
|
||||||
|
C("git grep -n "..GetLoadWord().." :/")
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
FKey = {"build.bat", "", "", "", "", "", "", "", "", "", "", ""}
|
||||||
|
FKeySDLK = {SDLK_F1, SDLK_F2, SDLK_F3, SDLK_F4, SDLK_F5, SDLK_F6, SDLK_F7, SDLK_F8, SDLK_F9, SDLK_F10, SDLK_F11, SDLK_F12}
|
||||||
|
|
||||||
|
function KeybindsFKeys(e)
|
||||||
|
for i = #FKey,1,-1 do
|
||||||
|
if FKey[i] ~= "" then
|
||||||
|
if e.key == FKeySDLK[i] then
|
||||||
|
Cmd { working_dir = GetWorkDir(), kind = "console", cmd = FKey[i] }
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
BuiltinOnCommandCallbacks = {
|
||||||
|
KeybindsBasic,
|
||||||
|
KeybindsFKeys,
|
||||||
|
}
|
||||||
|
OnCommandCallbacks = BuiltinOnCommandCallbacks
|
||||||
|
|
||||||
function OnCommand(e)
|
function OnCommand(e)
|
||||||
for i = #OnCommandCallbacks,1,-1 do
|
for i = #OnCommandCallbacks,1,-1 do
|
||||||
on_command = OnCommandCallbacks[i]
|
on_command = OnCommandCallbacks[i]
|
||||||
on_command(e)
|
local result = on_command(e)
|
||||||
|
if result then
|
||||||
|
return true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function OnInit()
|
function OnInit()
|
||||||
|
|||||||
@@ -337,10 +337,13 @@ void CallOnSave(BufferID buffer_id) {
|
|||||||
CallLuaFunc("OnSave", 1, 0);
|
CallLuaFunc("OnSave", 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CallOnCommand(Event *event) {
|
bool CallOnCommand(Event *event) {
|
||||||
lua_getglobal(LuaState, "OnCommand");
|
lua_getglobal(LuaState, "OnCommand");
|
||||||
PushEvent(LuaState, event);
|
PushEvent(LuaState, event);
|
||||||
CallLuaFunc("OnCommand", 1, 0);
|
CallLuaFunc("OnCommand", 1, 1);
|
||||||
|
bool result = lua_toboolean(LuaState, -1);
|
||||||
|
lua_pop(LuaState, 1);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CallLuaOnUpdate(Event *event) {
|
void CallLuaOnUpdate(Event *event) {
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ void ReplaceTitleBarData(Window *window) {
|
|||||||
column = 0;
|
column = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool name_changed = false;
|
||||||
String name = ToString(scratch, buffer_name);
|
String name = ToString(scratch, buffer_name);
|
||||||
if (name != main.buffer->name) {
|
if (name != main.buffer->name) {
|
||||||
name = GetAbsolutePath(scratch, name);
|
name = GetAbsolutePath(scratch, name);
|
||||||
@@ -54,21 +55,20 @@ void ReplaceTitleBarData(Window *window) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
main.buffer->name = Intern(&GlobalInternTable, name);
|
if (name != main.buffer->name) {
|
||||||
|
main.buffer->name = Intern(&GlobalInternTable, name);
|
||||||
|
title.window->title_bar_last_buffer_change_id = title.buffer->change_id;
|
||||||
|
main.buffer->file_mod_time = 0;
|
||||||
|
main.buffer->changed_on_disk = false;
|
||||||
|
main.buffer->dirty = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Int buffer_pos = XYToPos(main.buffer, {column, line});
|
Int buffer_pos = XYToPos(main.buffer, {column, line});
|
||||||
|
|
||||||
Caret &caret = main.view->carets[0];
|
Caret &caret = main.view->carets[0];
|
||||||
if (GetFront(caret) != buffer_pos) {
|
if (GetFront(caret) != buffer_pos) {
|
||||||
caret = MakeCaret(buffer_pos);
|
caret = MakeCaret(buffer_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
title.window->title_bar_last_buffer_change_id = title.buffer->change_id;
|
|
||||||
main.buffer->file_mod_time = 0;
|
|
||||||
main.buffer->changed_on_disk = false;
|
|
||||||
main.buffer->dirty = true;
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,7 @@
|
|||||||
- Check. Convert more commands to taking buffer instead of view
|
- Check. Convert more commands to taking buffer instead of view
|
||||||
- Check. Rewrite more commands to use already implemented commands?
|
- Check. Rewrite more commands to use already implemented commands?
|
||||||
- Lua OnCommand should be able to comunicate that we don't want C handling and do only the Lua handling
|
- Lua OnCommand should be able to comunicate that we don't want C handling and do only the Lua handling
|
||||||
- Easily programmable F1-F12 commands
|
|
||||||
- Lua namespaces for different kinds of commands (by ids, using main_set, using active_set)?
|
- Lua namespaces for different kinds of commands (by ids, using main_set, using active_set)?
|
||||||
- List all files in project, exclude by lua pattern
|
|
||||||
|
|
||||||
- Set window layout using project file
|
- Set window layout using project file
|
||||||
- Split command
|
- Split command
|
||||||
|
|||||||
Reference in New Issue
Block a user