Murga Lua FLTK Editor
Forum: Apps
Topic: Murga Lua FLTK Editor
started by: Jason W
Posted by Jason W on Mar. 26 2008,00:53
Has anyone else experienced the Murga Lua FLTK Editor crashing upon usage in DSL 4.2.5 and DSL 4.3RC1? It crashes with me when i run in either regular live cd mode or in toram mode. Trying to use any of it's menus (like open file) makes it crash, and gives this error:
/bin/lua: attempt to call a number value stack traceback: [C]: in function 'run' /usr/local/bin/editor.lua:332: in main chunk [C]: ?
I have no knowledge of FLTK/Lua or I would try to fix it instead of just complain. I would like to use the editor, and any help would be appreciated.
Posted by roberts on Mar. 26 2008,03:43
Likely the menu construct changed with muragLua v0.6+
Try changing the menu items to this:
Code Sample | mb:add("&File/&New File", 0, new_cb) mb:add("&File/&Open File", 0, open_cb) mb:add("&File/&Insert File", 0, insert_cb) mb:add("&File/&Save File", 0, save_cb) mb:add("&File/Save File &As", 0, saveas_cb) mb:add("&File/E&xit", 0, exit_cb)
mb:add("&Edit/&Undo", 0, undo_cb) mb:add("&Edit/Cu&t", 0, cut_cb)
mb:add("&Edit/&Copy", 0, copy_cb) mb:add("&Edit/&Paste", 0, paste_cb) mb:add("&Edit/&Delete", 0, delete_cb)
mb:add("&Search/&Find...", 0, find_cb) mb:add("&Search/Find &Again", 0, findagain_cb) mb:add("&Search/&Replace...", 0, replace_cb)
mb:add("&Tools/&Insert Date", 0, insertdate_cb)
mb:add("&Help/&About", 0, about_cb)
|
Then of course you could delete the duplicate menu callback if-elseif stuff.
There might be more needed - not sure. But this will be a start.
Posted by Jason W on Mar. 26 2008,14:05
I simply changed the menu items you mentioned and it works like a charm. All menu functions work. I tried to delete the elseif stuff you mentioned and one menu item made it crash, I believe the Save As option. No doubt I deleted something that was supposed to stay, or vice versa. I will look at it more this afternoon when I have more time, and hopefully learn some MurgaLua in the process. Thanks Robert for your help.
Posted by jaapz on Mar. 26 2008,16:01
yep with me it just crashes on startup, i'll try the code
Posted by Jason W on Mar. 26 2008,22:47
This below seems to work for me. I replaced the menu items with what Robert posted and simply deleted the duplicate callback stuff. Thanks again.
Code Sample |
#!/bin/lua
version = "0.02" version = "0.03" -- added resizable, get argument for DND, default 800x600 - by RS
ww = 800 wh = 600
title = "MURGA LUA FLTK EDITOR - "
-- Main window w = fltk:Fl_Double_Window(ww,wh,title) w:resizable(w)
-- Text Buffer to hold file to edit tb = fltk:Fl_Text_Buffer();
changed = false filename = "" saved = true newfile = false lastsearch = "" startPos = 1
-- This will be used to hold copied / cutted text clipboard = ""
-- Editor widget will work for standard keyboard shortcuts ed = fltk:Fl_Text_Editor(10,30,ww-20,wh-60) ed:buffer(tb)
function ask_save(object) if (not saved) then if fltk.fl_choice("There are unsevd Buffers. Do you want to save ?","No",nil,"Yes") >= 1 then save_cb() end end end
-- check if we need to save to close function check_save(object) if (not saved) then if fltk.fl_choice("There are unsaved Buffers. Do you Really want to exit ?","No",nil,"Yes") >= 1 then w:hide() end else w:hide() end end -- FILE MENU CALLBACKS
function new_cb() ask_save() newfile = true filename = "untitled" saved = false tb:remove(0,tb:length()) w:label(title .. filename) end
function open_cb() ask_save() filename = fltk.fl_file_chooser("Select File to open", nil, nil, 0) if (filename ~= nil) then tb:loadfile(filename) w:label(title .. filename) saved = false end end
function insert_cb() local fname = fltk.fl_file_chooser("Select File to insert", nil, nil, 0) if (fname ~= nil) then local pos = ed:insert_position() tb:insertfile(fname,pos) end end
function save_cb() if (newfile) then saveas_cb() elseif (not saved) then if (tb:savefile(filename)) then saved = true fltk.fl_message("File " .. filename .. " Saved.") else fltk.fl_alert("Error writing file " .. filename) end end
end
function saveas_cb() local fname = fltk.fl_file_chooser("FILENAME TO SAVE", nil, nil, 0) if (fname ~= nil) then if (tb:savefile(fname)) then filename = fname w:label(title .. filename) saved = true fltk.fl_message("File " .. filename .. " Saved.") else fltk.fl_alert("Error writing file " .. filename) end end end
function close_cb() ask_saved() end
function exit_cb() check_save() end
-- EDIT MENU CALLBACKS function undo_cb() end
function cut_cb() if ( tb:selected() ~= 0) then clipboard = tb:selection_text() tb:remove_selection() end end
function copy_cb() if (tb:selected() ~= 0) then clipboard = tb:selection_text() end end
function paste_cb() local pos = ed:insert_position() tb:insert(pos,clipboard) end
function delete_cb() if (tb:selected() ~= 0) then tb:remove_selection() end end
function delete_cb() if (tb:selected() ~= 0) then tb:remove_selection() end end
-- SEARCH MENU CALLBACKS function find_cb() local str, fnd, fndEnd startPos=1 str = fltk.fl_input("Insert a string to search", lastsearch) if (str ~= nil) then --fnd = tb:search_forward(0,str,fnd,0) fnd,fndEnd = string.find(tb:text(),str,startPos) if (fnd ~= nil) then tb:select(fnd-1, fndEnd) lastsearch = str startPos = fndEnd else fltk.fl_message("String '" .. str .. "' Not found!") end end
end
function findagain_cb()
if (lastsearch == "") then find_cb() else fnd,fndEnd= string.find(tb:text(),lastsearch,startPos) if (fnd ~= nil) then tb:select(fnd-1, fndEnd) startPos = fndEnd else fltk.fl_message("String '" .. lastsearch .. "' Not found!") startPos=1 end end end
function replace_cb() replace_dlg:show() end
-- TOOLS CALLBACKS function insertdate_cb() local pos = ed:insert_position() local date = os.date() tb:insert(pos,date) end
-- HELP CALLBACKS function about_cb() fltk.fl_message("MURGA LUA FLTK EDITOR\n\nMurga Lua Version of FLTK editor example\nBy Mauro Viarizzo (mav_it)\n\nVersion " .. version) end
--- Build Up dynamically the menu: mb = fltk:Fl_Menu_Bar(0,0,ww,30) mb:callback(menuItem)
mb:add("&File/&New File", 0, new_cb) mb:add("&File/&Open File", 0, open_cb) mb:add("&File/&Insert File", 0, insert_cb) mb:add("&File/&Save File", 0, save_cb) mb:add("&File/Save File &As", 0, saveas_cb) mb:add("&File/E&xit", 0, exit_cb)
mb:add("&Edit/&Undo", 0, undo_cb) mb:add("&Edit/Cu&t", 0, cut_cb)
mb:add("&Edit/&Copy", 0, copy_cb) mb:add("&Edit/&Paste", 0, paste_cb) mb:add("&Edit/&Delete", 0, delete_cb)
mb:add("&Search/&Find...", 0, find_cb) mb:add("&Search/Find &Again", 0, findagain_cb) mb:add("&Search/&Replace...", 0, replace_cb)
mb:add("&Tools/&Insert Date", 0, insertdate_cb)
mb:add("&Help/&About", 0, about_cb)
--This does not seem to be implemented in MurgaLua FLTK --tb:add_modify_callback(changed_cb, w) --tb:call_modify_callbacks()
-- REPLACE DIALOG replace_dlg = fltk:Fl_Window (420, 105, "Replace") replace_find = fltk:Fl_Input ( 70, 10, 330, 25, "Find:") replace_with = fltk:Fl_Input ( 70, 40, 330, 25, "Replace:") replace_all = fltk:Fl_Button ( 10, 70, 90, 25, "Replace All") replace_next = fltk:Fl_Return_Button (105, 70, 120, 25, "Replace Next") replace_skip = fltk:Fl_Button (230, 70, 120, 25, "Skip to Next") replace_cancel = fltk:Fl_Button (355, 70, 60, 25, "Cancel")
replPos=1
-- CALLBACKS FOR REPLACE DIALOG function replace_next_cb(mesg,doRepl) local findTxt = replace_find:value() local replTxt = replace_with:value() local fnd, fndEnd
fnd,fndEnd = string.find(tb:text(),findTxt,replPos) if (fnd ~= nil) then if (doRepl) then tb:replace(fnd-1, fndEnd, replTxt) end replPos = tb:word_end(fnd)+1 return true else if (mesg) then fltk.fl_message("String '" .. findTxt .. "' Not found!") end replPos = 1 return false end end
function replace_all_cb() local replaces = 0 while (replace_next_cb(false, true)) do replaces = replaces + 1 end fltk.fl_message("Replaced " .. replaces .. " occurrences") end
function replace_skip_cb() replace_next_cb(true,false) end
replace_cancel:callback(function () replace_dlg:hide() end ) replace_next:callback(function () replace_next_cb(true, true) end) replace_skip:callback(function () replace_skip_cb() end) replace_all:callback(function () replace_all_cb() end)
-- MAIN PROGRAM if #arg == 1 then filename = arg[1] tb:loadfile(filename) w:label(title .. filename) saved=false end w:show() Fl:run()
|
|