From neoneye at rubyforge.org Wed Jan 19 14:45:48 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Wed Jan 19 14:53:02 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO Message-ID: <200501191945.j0JJjmdS000897@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv888 Modified Files: TODO Log Message: made ncursesw colors my top priority.. Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** TODO 18 Jan 2005 21:56:20 -0000 1.19 --- TODO 19 Jan 2005 19:45:46 -0000 1.20 *************** *** 1,2 **** --- 1,6 ---- + ncursesw: + A: color support. + + more edit-operations: A: pageup/pagedown. From neoneye at rubyforge.org Thu Jan 20 17:23:35 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Thu Jan 20 17:23:35 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source ncursesw.rb Message-ID: <200501202223.j0KMNZdS025920@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv25914 Modified Files: ncursesw.rb Log Message: Early attempts to enable colors in ncurses. Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** ncursesw.rb 4 Jan 2005 22:00:43 -0000 1.7 --- ncursesw.rb 20 Jan 2005 22:23:32 -0000 1.8 *************** *** 84,88 **** extern 'int nodelay(void *, bool)' extern 'int keyok(int, bool)' ! # teardown extern 'int endwin()' --- 84,103 ---- extern 'int nodelay(void *, bool)' extern 'int keyok(int, bool)' ! ! extern 'int start_color()' ! extern 'int init_pair(short, short, short)' ! extern 'int wattrset(void *, int)' ! ! # access global variables ! Int = struct ["int value"] ! COLORS_PTR = symbol 'COLORS' ! ESCDELAY_PTR = symbol 'ESCDELAY' ! def self.COLORS ! Int.new(COLORS_PTR).value ! end ! def self.ESCDELAY ! Int.new(ESCDELAY_PTR).value ! end ! # teardown extern 'int endwin()' *************** *** 119,122 **** --- 134,138 ---- @ptr.free = nil @window = Curses::WINDOW.new(@ptr) + Curses.start_color Curses.keypad(@ptr, 1) # TODO: what does this do? Curses.cbreak # TODO: what does this do? *************** *** 126,129 **** --- 142,148 ---- #Curses.raw # TODO: what does this do? #Curses.nodelay(@ptr, 1) # TODO: what does this do? + + Curses.init_pair(2, 3, 3) + Curses.wattrset(@ptr, 2) end def close *************** *** 221,230 **** puts "lets measure the width of unicode chars: halfwidth, fullwidth" LibC.setlocale(6, '') # LC_ALL == 6 ! p LibC.measure_width(65) ! p LibC.measure_width(0x2500) ! p LibC.measure_width(0x3000) ! puts "press enter to goto the curses test" gets CursesCanvas.open do |c| c.printxy(0, 0, " File | Edit | Buffers | View |") --- 240,251 ---- puts "lets measure the width of unicode chars: halfwidth, fullwidth" LibC.setlocale(6, '') # LC_ALL == 6 ! #p LibC.measure_width(65) ! #p LibC.measure_width(0x2500) ! #p LibC.measure_width(0x3000) ! puts "press enter to goto the curses test" gets + res = [] + CursesCanvas.open do |c| c.printxy(0, 0, " File | Edit | Buffers | View |") *************** *** 240,243 **** --- 261,268 ---- c.printxy(11, 8, "By Simon Strandgaard .") #c.printxy(11, 9, Curses.curses_version) + + c.printxy(11, 9, + "colors=#{Curses.COLORS} " + + "escdelay=#{Curses.ESCDELAY}") c.move(11, 10) 5.times do |i| From neoneye at rubyforge.org Fri Jan 21 13:58:55 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 21 13:58:57 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source ncursesw.rb Message-ID: <200501211858.j0LIwtdS030416@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv30405 Modified Files: ncursesw.rb Log Message: now ncurses spawns in color mode Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** ncursesw.rb 20 Jan 2005 22:23:32 -0000 1.8 --- ncursesw.rb 21 Jan 2005 18:58:53 -0000 1.9 *************** *** 84,92 **** extern 'int nodelay(void *, bool)' extern 'int keyok(int, bool)' ! extern 'int start_color()' extern 'int init_pair(short, short, short)' extern 'int wattrset(void *, int)' # access global variables Int = struct ["int value"] --- 84,97 ---- extern 'int nodelay(void *, bool)' extern 'int keyok(int, bool)' ! ! extern 'bool has_colors()' extern 'int start_color()' extern 'int init_pair(short, short, short)' extern 'int wattrset(void *, int)' + def self.has_colors? + (has_colors != 0) + end + # access global variables Int = struct ["int value"] *************** *** 134,137 **** --- 139,146 ---- @ptr.free = nil @window = Curses::WINDOW.new(@ptr) + unless Curses.has_colors? + raise "you term doesn't have colors. " + + "try 'setenv TERM xterm-color'." + end Curses.start_color Curses.keypad(@ptr, 1) # TODO: what does this do? *************** *** 151,157 **** def self.open(&block) i = self.new ! block.call(i) ! ensure ! i.close end def width --- 160,168 ---- def self.open(&block) i = self.new ! begin ! block.call(i) ! ensure ! i.close ! end end def width From neoneye at rubyforge.org Fri Jan 21 14:10:40 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 21 14:10:42 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source ncursesw.rb Message-ID: <200501211910.j0LJAedS032732@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv32725 Modified Files: ncursesw.rb Log Message: now colors works Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** ncursesw.rb 21 Jan 2005 18:58:53 -0000 1.9 --- ncursesw.rb 21 Jan 2005 19:10:38 -0000 1.10 *************** *** 88,93 **** extern 'int start_color()' extern 'int init_pair(short, short, short)' ! extern 'int wattrset(void *, int)' ! def self.has_colors? (has_colors != 0) --- 88,92 ---- extern 'int start_color()' extern 'int init_pair(short, short, short)' ! extern 'int wcolor_set(void*, short, void*)' def self.has_colors? (has_colors != 0) *************** *** 152,157 **** #Curses.nodelay(@ptr, 1) # TODO: what does this do? ! Curses.init_pair(2, 3, 3) ! Curses.wattrset(@ptr, 2) end def close --- 151,156 ---- #Curses.nodelay(@ptr, 1) # TODO: what does this do? ! Curses.init_pair(1, 3, 1) ! Curses.wcolor_set(@ptr, 1, nil) end def close From neoneye at rubyforge.org Fri Jan 21 15:33:45 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 21 15:33:46 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source ncursesw.rb Message-ID: <200501212033.j0LKXjdS006797@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv6782 Modified Files: ncursesw.rb Log Message: I now allocate 5 nice colors Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** ncursesw.rb 21 Jan 2005 19:10:38 -0000 1.10 --- ncursesw.rb 21 Jan 2005 20:33:43 -0000 1.11 *************** *** 150,157 **** #Curses.raw # TODO: what does this do? #Curses.nodelay(@ptr, 1) # TODO: what does this do? ! ! Curses.init_pair(1, 3, 1) Curses.wcolor_set(@ptr, 1, nil) end def close Curses.endwin --- 150,165 ---- #Curses.raw # TODO: what does this do? #Curses.nodelay(@ptr, 1) # TODO: what does this do? ! ! alloc_colors Curses.wcolor_set(@ptr, 1, nil) end + def alloc_colors + Curses.init_pair(1, 3, 4) # yellow on dark-blue ....... text + Curses.init_pair(2, 7, 4) # white on dark-blue ........ keyword + Curses.init_pair(3, 0, 6) # black on bright-blue ...... selection + Curses.init_pair(4, 2, 4) # green on dark-blue ........ strings + Curses.init_pair(5, 6, 4) # bright-blue on dark-blue .. - + end + private :alloc_colors def close Curses.endwin From neoneye at rubyforge.org Fri Jan 21 16:37:49 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 21 16:37:51 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb Message-ID: <200501212137.j0LLbndS011789@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv11744 Modified Files: main_tui.rb Log Message: Pad with space so that background color is visible for the whole line. Render tab as /\./ followed by /\020*/ (spaces). Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** main_tui.rb 18 Jan 2005 21:52:06 -0000 1.40 --- main_tui.rb 21 Jan 2005 21:37:47 -0000 1.41 *************** *** 152,156 **** if glyph == 10 or glyph == 13 w = 0 # ignore newlines ! elsif x >= sx and glyph != 9 render << glyph else --- 152,159 ---- if glyph == 10 or glyph == 13 w = 0 # ignore newlines ! elsif glyph == 9 ! render << "."[0] ! (w-1).times { render << 32 } ! elsif x >= sx render << glyph else *************** *** 159,162 **** --- 162,166 ---- x += w end + padding = (sx + @canvas.width) - x render.slice!(0, @scroll_x) if (options & 1) != 0 *************** *** 164,170 **** end if (options & 2) != 0 ! 1.times { render << 32 } render.map!{|i| (i==32) ? '_'[0] : i } end @canvas.render_row(y, render.pack('U*')) end --- 168,175 ---- end if (options & 2) != 0 ! 1.times { render << 32; x += 1 } render.map!{|i| (i==32) ? '_'[0] : i } end + padding.times { render << 32 } @canvas.render_row(y, render.pack('U*')) end From neoneye at rubyforge.org Fri Jan 21 16:40:56 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 21 16:40:57 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES Message-ID: <200501212140.j0LLeudS011936@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv11917 Modified Files: CHANGES Log Message: status for tonight Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** CHANGES 18 Jan 2005 22:19:12 -0000 1.14 --- CHANGES 21 Jan 2005 21:40:54 -0000 1.15 *************** *** 1,2 **** --- 1,10 ---- + 21-01-2005 Neoneye + * got control of libncursesw.so's colors, it took + some time because the global variable COLORS was + difficult to reach via ruby-dl. + * padding to the width of the term, so that background + is rendered nicer. + * nicer rendering of tabs. + 18-01-2005 Neoneye * released version 2.1 (megacorp release). From neoneye at rubyforge.org Fri Jan 21 16:55:57 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 21 16:55:59 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO Message-ID: <200501212155.j0LLtvdS012798@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv12695 Modified Files: TODO Log Message: we can now make colors with ncurses.. lets now begin outputting actual colors. Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** TODO 19 Jan 2005 19:45:46 -0000 1.20 --- TODO 21 Jan 2005 21:55:55 -0000 1.21 *************** *** 1,4 **** ! ncursesw: ! A: color support. --- 1,3 ---- ! render with colors. *************** *** 7,14 **** B: multibuffer. C: search, replace. ! ! ! ncursesw: ! A: color support. --- 6,10 ---- B: multibuffer. C: search, replace. ! D: selections. From neoneye at rubyforge.org Fri Jan 21 17:14:47 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 21 17:14:47 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb ncursesw.rb Message-ID: <200501212214.j0LMEldS015409@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv15379 Modified Files: main_tui.rb ncursesw.rb Log Message: colors for folds and bookmarks Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -d -r1.41 -r1.42 *** main_tui.rb 21 Jan 2005 21:37:47 -0000 1.41 --- main_tui.rb 21 Jan 2005 22:14:45 -0000 1.42 *************** *** 164,173 **** --- 164,176 ---- padding = (sx + @canvas.width) - x render.slice!(0, @scroll_x) + @canvas.set_color(1) if (options & 1) != 0 render[0] = '-'[0] + @canvas.set_color(2) end if (options & 2) != 0 1.times { render << 32; x += 1 } render.map!{|i| (i==32) ? '_'[0] : i } + @canvas.set_color(5) end padding.times { render << 32 } Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** ncursesw.rb 21 Jan 2005 20:33:43 -0000 1.11 --- ncursesw.rb 21 Jan 2005 22:14:45 -0000 1.12 *************** *** 89,92 **** --- 89,94 ---- extern 'int init_pair(short, short, short)' extern 'int wcolor_set(void*, short, void*)' + extern 'void wbkgdset(void *, chtype)' + extern 'int wattrset(void *, int)' def self.has_colors? (has_colors != 0) *************** *** 115,118 **** --- 117,121 ---- extern 'int addnstr(const char *, int)' extern 'int move(int, int)' + extern 'int refresh()' end *************** *** 153,156 **** --- 156,161 ---- alloc_colors Curses.wcolor_set(@ptr, 1, nil) + #Curses.wbkgdset(@ptr, 2) + #Curses.wattrset(@ptr, (5 << 10)) end def alloc_colors *************** *** 159,165 **** Curses.init_pair(3, 0, 6) # black on bright-blue ...... selection Curses.init_pair(4, 2, 4) # green on dark-blue ........ strings ! Curses.init_pair(5, 6, 4) # bright-blue on dark-blue .. - end private :alloc_colors def close Curses.endwin --- 164,174 ---- Curses.init_pair(3, 0, 6) # black on bright-blue ...... selection Curses.init_pair(4, 2, 4) # green on dark-blue ........ strings ! Curses.init_pair(5, 3, 0) # yellow on black ........... fold ! Curses.init_pair(6, 6, 4) # bright-blue on dark-blue .. - end private :alloc_colors + def set_color(color) + Curses.wcolor_set(@ptr, color, nil) + end def close Curses.endwin *************** *** 223,226 **** --- 232,238 ---- Curses.clrtoeol end + def refresh + Curses.refresh + end def printxy(x, y, str) move(x, y) *************** *** 284,287 **** --- 296,300 ---- "escdelay=#{Curses.ESCDELAY}") c.move(11, 10) + c.refresh 5.times do |i| key = c.getch *************** *** 289,292 **** --- 302,306 ---- c.printxy(11, 10+i, "key = #{key}") c.move(11, 11+i) + c.refresh end c.getch From neoneye at rubyforge.org Fri Jan 21 17:48:53 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 21 17:48:54 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb ncursesw.rb Message-ID: <200501212248.j0LMmrdS016939@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv16928 Modified Files: main_tui.rb ncursesw.rb Log Message: set title and restore title Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** main_tui.rb 21 Jan 2005 22:14:45 -0000 1.42 --- main_tui.rb 21 Jan 2005 22:48:51 -0000 1.43 *************** *** 38,44 **** --- 38,58 ---- end def self.run(filename) + name = File.basename(filename || '') + title = "#{name} - AEditor" + oldtitle = "AEditor has exited" + wid = ENV['WINDOWID'] + if wid + output = ''; + IO.popen("xprop -id #{wid}") do |io| + while s=io.gets; output << s; end + end + m = output.match(/^WM_NAME\(STRING\) = "(.*)"/) + oldtitle = m[1] if m + end require 'ncursesw' CursesCanvas.open do |c| + c.set_title(title) self.new(c, filename).event_loop + c.set_title(oldtitle) end end Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** ncursesw.rb 21 Jan 2005 22:14:45 -0000 1.12 --- ncursesw.rb 21 Jan 2005 22:48:51 -0000 1.13 *************** *** 265,268 **** --- 265,271 ---- printxy(x+w-1, y+h-1, str_br) end + def set_title(title) + $stdout.puts "\033]0;#{title}\007" + end end From neoneye at rubyforge.org Fri Jan 21 17:55:27 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 21 17:55:28 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb ncursesw.rb Message-ID: <200501212255.j0LMtRdS017389@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv17371 Modified Files: main_tui.rb ncursesw.rb Log Message: moved #set_title stuff from 'main_tui.rb' to 'ncursesw.rb'. Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -d -r1.43 -r1.44 *** main_tui.rb 21 Jan 2005 22:48:51 -0000 1.43 --- main_tui.rb 21 Jan 2005 22:55:25 -0000 1.44 *************** *** 38,58 **** end def self.run(filename) - name = File.basename(filename || '') - title = "#{name} - AEditor" - oldtitle = "AEditor has exited" - wid = ENV['WINDOWID'] - if wid - output = ''; - IO.popen("xprop -id #{wid}") do |io| - while s=io.gets; output << s; end - end - m = output.match(/^WM_NAME\(STRING\) = "(.*)"/) - oldtitle = m[1] if m - end require 'ncursesw' CursesCanvas.open do |c| ! c.set_title(title) ! self.new(c, filename).event_loop ! c.set_title(oldtitle) end end --- 38,51 ---- end def self.run(filename) require 'ncursesw' CursesCanvas.open do |c| ! oldtitle = c.get_title || "AEditor has exited" ! name = File.basename(filename || '') ! c.set_title("#{name} - AEditor") ! begin ! self.new(c, filename).event_loop ! ensure ! c.set_title(oldtitle) ! end end end Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** ncursesw.rb 21 Jan 2005 22:48:51 -0000 1.13 --- ncursesw.rb 21 Jan 2005 22:55:25 -0000 1.14 *************** *** 268,271 **** --- 268,282 ---- $stdout.puts "\033]0;#{title}\007" end + # returns either nil or text + def get_title + wid = ENV['WINDOWID'] + return nil unless wid + output = ''; + IO.popen("xprop -id #{wid}") do |io| + while s=io.gets; output << s; end + end + m = output.match(/^WM_NAME\(STRING\) = "(.*)"/) + return m ? m[1] : nil + end end From neoneye at rubyforge.org Fri Jan 21 17:59:38 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 21 17:59:40 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES Message-ID: <200501212259.j0LMxcdS017550@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv17543 Modified Files: CHANGES Log Message: we can now set and restore the terminals title Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** CHANGES 21 Jan 2005 21:40:54 -0000 1.15 --- CHANGES 21 Jan 2005 22:59:36 -0000 1.16 *************** *** 6,9 **** --- 6,10 ---- is rendered nicer. * nicer rendering of tabs. + * set and restore title of terminal. 18-01-2005 Neoneye From neoneye at rubyforge.org Sat Jan 22 05:57:23 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 05:57:25 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO Message-ID: <200501221057.j0MAvNdS009336@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv9331 Modified Files: TODO Log Message: Idea for optimization Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** TODO 21 Jan 2005 21:55:55 -0000 1.21 --- TODO 22 Jan 2005 10:57:21 -0000 1.22 *************** *** 9,12 **** --- 9,19 ---- + Obtaining View#visible for every operation takes time. + Its probably better to have a Line#is_visible flag, + so every time a bunch of lines is collapsed/expanded, + or the structure is manipulated then the #is_visible + flags should be updated. + + the View operations should raise their own errors. right now the Model raises the errors which should From neoneye at rubyforge.org Sat Jan 22 06:20:55 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 06:20:56 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb main_tui.rb test_core.rb Message-ID: <200501221120.j0MBKtdS011388@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv11381 Modified Files: core.rb main_tui.rb test_core.rb Log Message: The trivial case for pagedown is working Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.44 retrieving revision 1.45 diff -C2 -d -r1.44 -r1.45 *** main_tui.rb 21 Jan 2005 22:55:25 -0000 1.44 --- main_tui.rb 22 Jan 2005 11:20:53 -0000 1.45 *************** *** 136,139 **** --- 136,143 ---- when 266 dump_statistics + when 338 + @view.move_pagedown + when 339 + @view.move_pageup when 410 @view.resize(@canvas.w, @canvas.h) Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** test_core.rb 18 Jan 2005 22:02:28 -0000 1.29 --- test_core.rb 22 Jan 2005 11:20:53 -0000 1.30 *************** *** 1147,1148 **** --- 1147,1192 ---- end end + + class TestViewMovePagedown < Test::Unit::TestCase + def setup + super + @model = AEditor::Model::Caretaker.new + @model.load((1..15).to_a.join("\n")) + @view = AEditor::View::Caretaker.new(@model) + @model.attach(@view) + @view.cursor_x, @view.cursor_y = 0, 0 + @view.scroll_x, @view.scroll_y = 0, 0 + @view.resize(10, 3) + end + def teardown + super + @model.check_integrity + @view.check_integrity + end + def exercise1(expected_cy, expected_sy, cy=nil, sy=nil) + @view.cursor_y = cy if cy + @view.scroll_y = sy if sy + @view.move_pagedown + assert_equal(expected_cy, @view.cursor_y) + assert_equal(expected_sy, @view.scroll_y) + end + def test_typical1 + exercise1(2, 2, 0, 0) + exercise1(4, 4) + end + def test_typical2 + exercise1(3, 2, 1, 0) + exercise1(5, 4) + end + def test_typical3 + exercise1(4, 2, 2, 0) + exercise1(6, 4) + end + end + + + + + + + Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** core.rb 18 Jan 2005 22:02:28 -0000 1.33 --- core.rb 22 Jan 2005 11:20:53 -0000 1.34 *************** *** 497,500 **** --- 497,510 ---- @cursor_x = 0 end + def move_pageup + $logger.info "view operation pageup" + end + def move_pagedown + $logger.info "view operation pagedown" + scroll_vy = ay2vy(@scroll_y) + cursor_vy = ay2vy(@cursor_y) + @scroll_y = vy2ay(scroll_vy + @height - 1) + @cursor_y = vy2ay(cursor_vy + @height - 1) + end def toggle_bookmark $logger.info "view operation toggle bookmark" From neoneye at rubyforge.org Sat Jan 22 06:36:01 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 06:36:02 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb Message-ID: <200501221136.j0MBa1dS011687@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv11679 Modified Files: test_core.rb Log Message: exercised the pagedown code with folds Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** test_core.rb 22 Jan 2005 11:20:53 -0000 1.30 --- test_core.rb 22 Jan 2005 11:35:59 -0000 1.31 *************** *** 1183,1186 **** --- 1183,1205 ---- exercise1(6, 4) end + def test_folded1 + @view.collapse(1, 4) + exercise1(5, 5, 0, 0) + end + def test_folded2 + @view.collapse(0, 3) + @view.collapse(4, 7) + exercise1(8, 8, 0, 0) + end + def test_folded3 + @view.collapse(0, 3) + @view.collapse(4, 7) + exercise1(9, 8, 4, 0) + end + def test_folded4 + @view.collapse(0, 3) + @view.collapse(4, 7) + exercise1(10, 8, 8, 0) + end end From neoneye at rubyforge.org Sat Jan 22 10:47:48 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 10:47:49 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb test_core.rb Message-ID: <200501221547.j0MFlmdS022417@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv22405 Modified Files: core.rb test_core.rb Log Message: I have been playing with Paper Rock Scissors against chris2. Now im back on aeditor again.. we can now deal better with the bottom of file special case.. for pagedown. Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** test_core.rb 22 Jan 2005 11:35:59 -0000 1.31 --- test_core.rb 22 Jan 2005 15:47:46 -0000 1.32 *************** *** 1202,1205 **** --- 1202,1211 ---- exercise1(10, 8, 8, 0) end + def test_end1 + exercise1(14, 13, 12, 11) + end + def test_end2 + exercise1(14, 12, 13, 11) + end end Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** core.rb 22 Jan 2005 11:20:53 -0000 1.34 --- core.rb 22 Jan 2005 15:47:46 -0000 1.35 *************** *** 504,509 **** scroll_vy = ay2vy(@scroll_y) cursor_vy = ay2vy(@cursor_y) ! @scroll_y = vy2ay(scroll_vy + @height - 1) ! @cursor_y = vy2ay(cursor_vy + @height - 1) end def toggle_bookmark --- 504,516 ---- scroll_vy = ay2vy(@scroll_y) cursor_vy = ay2vy(@cursor_y) ! last_vy = ay2vy(@lines.size-1) ! h1 = @height - 1 ! if cursor_vy + h1 <= last_vy ! @scroll_y = vy2ay(scroll_vy + h1) ! @cursor_y = vy2ay(cursor_vy + h1) ! else ! @cursor_y = vy2ay(last_vy - h1 + cursor_vy - scroll_vy) ! @scroll_y = vy2ay(last_vy - h1) ! end end def toggle_bookmark From neoneye at rubyforge.org Sat Jan 22 10:55:33 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 10:55:34 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES core.rb test_core.rb Message-ID: <200501221555.j0MFtXdS022565@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv22552 Modified Files: CHANGES core.rb test_core.rb Log Message: now View#move_pagedown are working in "hopefully" all special cases. Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** CHANGES 21 Jan 2005 22:59:36 -0000 1.16 --- CHANGES 22 Jan 2005 15:55:31 -0000 1.17 *************** *** 1,2 **** --- 1,5 ---- + 22-01-2005 Neoneye + * View#move_pagedown are now working. + 21-01-2005 Neoneye * got control of libncursesw.so's colors, it took Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** test_core.rb 22 Jan 2005 15:47:46 -0000 1.32 --- test_core.rb 22 Jan 2005 15:55:31 -0000 1.33 *************** *** 1208,1211 **** --- 1208,1216 ---- exercise1(14, 12, 13, 11) end + def test_end3 + @view.resize(10, 4) + exercise1(13, 12, 10, 9) + exercise1(14, 12) + end end Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** core.rb 22 Jan 2005 15:47:46 -0000 1.35 --- core.rb 22 Jan 2005 15:55:31 -0000 1.36 *************** *** 506,510 **** last_vy = ay2vy(@lines.size-1) h1 = @height - 1 ! if cursor_vy + h1 <= last_vy @scroll_y = vy2ay(scroll_vy + h1) @cursor_y = vy2ay(cursor_vy + h1) --- 506,512 ---- last_vy = ay2vy(@lines.size-1) h1 = @height - 1 ! if scroll_vy + h1 >= last_vy ! @cursor_y = vy2ay(last_vy) ! elsif cursor_vy + h1 <= last_vy @scroll_y = vy2ay(scroll_vy + h1) @cursor_y = vy2ay(cursor_vy + h1) From neoneye at rubyforge.org Sat Jan 22 11:20:50 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 11:20:50 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb test_core.rb Message-ID: <200501221620.j0MGKodS024646@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv24639 Modified Files: core.rb test_core.rb Log Message: early code for pageup Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** test_core.rb 22 Jan 2005 15:55:31 -0000 1.33 --- test_core.rb 22 Jan 2005 16:20:47 -0000 1.34 *************** *** 1215,1218 **** --- 1215,1247 ---- end + class TestViewMovePageup < Test::Unit::TestCase + def setup + super + @model = AEditor::Model::Caretaker.new + @model.load((1..15).to_a.join("\n")) + @view = AEditor::View::Caretaker.new(@model) + @model.attach(@view) + @view.cursor_x, @view.cursor_y = 0, 14 + @view.scroll_x, @view.scroll_y = 0, 14 + @view.resize(10, 4) + end + def teardown + super + @model.check_integrity + @view.check_integrity + end + def exercise1(expected_cy, expected_sy, cy=nil, sy=nil) + @view.cursor_y = cy if cy + @view.scroll_y = sy if sy + @view.move_pageup + assert_equal(expected_cy, @view.cursor_y) + assert_equal(expected_sy, @view.scroll_y) + end + def test_typical1 + exercise1(10, 9, 13, 12) + exercise1(7, 6) + exercise1(4, 3) + end + end Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** core.rb 22 Jan 2005 15:55:31 -0000 1.36 --- core.rb 22 Jan 2005 16:20:47 -0000 1.37 *************** *** 499,502 **** --- 499,508 ---- def move_pageup $logger.info "view operation pageup" + scroll_vy = ay2vy(@scroll_y) + cursor_vy = ay2vy(@cursor_y) + last_vy = ay2vy(@lines.size-1) + h1 = @height - 1 + @scroll_y = vy2ay(scroll_vy - h1) + @cursor_y = vy2ay(cursor_vy - h1) end def move_pagedown From neoneye at rubyforge.org Sat Jan 22 11:28:00 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 11:28:02 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO core.rb test_core.rb Message-ID: <200501221628.j0MGS0dS024853@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv24841 Modified Files: CHANGES TODO core.rb test_core.rb Log Message: pageup are now working Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** TODO 22 Jan 2005 10:57:21 -0000 1.22 --- TODO 22 Jan 2005 16:27:58 -0000 1.23 *************** *** 3,7 **** more edit-operations: - A: pageup/pagedown. B: multibuffer. C: search, replace. --- 3,6 ---- Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** CHANGES 22 Jan 2005 15:55:31 -0000 1.17 --- CHANGES 22 Jan 2005 16:27:58 -0000 1.18 *************** *** 1,4 **** 22-01-2005 Neoneye ! * View#move_pagedown are now working. 21-01-2005 Neoneye --- 1,4 ---- 22-01-2005 Neoneye ! * View#move_pagedown/pagedown are now working. 21-01-2005 Neoneye Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** test_core.rb 22 Jan 2005 16:20:47 -0000 1.34 --- test_core.rb 22 Jan 2005 16:27:58 -0000 1.35 *************** *** 1243,1246 **** --- 1243,1250 ---- exercise1(4, 3) end + def test_begin1 + exercise1(1, 0, 3, 2) + exercise1(0, 0) + end end Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** core.rb 22 Jan 2005 16:20:47 -0000 1.37 --- core.rb 22 Jan 2005 16:27:58 -0000 1.38 *************** *** 501,508 **** scroll_vy = ay2vy(@scroll_y) cursor_vy = ay2vy(@cursor_y) - last_vy = ay2vy(@lines.size-1) h1 = @height - 1 ! @scroll_y = vy2ay(scroll_vy - h1) ! @cursor_y = vy2ay(cursor_vy - h1) end def move_pagedown --- 501,514 ---- scroll_vy = ay2vy(@scroll_y) cursor_vy = ay2vy(@cursor_y) h1 = @height - 1 ! if scroll_vy == 0 ! @cursor_y = 0 ! elsif scroll_vy - h1 >= 0 ! @scroll_y = vy2ay(scroll_vy - h1) ! @cursor_y = vy2ay(cursor_vy - h1) ! else ! @scroll_y = 0 ! @cursor_y = vy2ay(cursor_vy - scroll_vy) ! end end def move_pagedown From neoneye at rubyforge.org Sat Jan 22 12:16:22 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 12:16:23 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO Message-ID: <200501221716.j0MHGMdS027360@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv27354 Modified Files: TODO Log Message: realized that line numbering comes before selections.. shuffled the todo list.. Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** TODO 22 Jan 2005 16:27:58 -0000 1.23 --- TODO 22 Jan 2005 17:16:20 -0000 1.24 *************** *** 3,9 **** more edit-operations: ! B: multibuffer. C: search, replace. ! D: selections. --- 3,10 ---- more edit-operations: ! A: line numbering. ! B: selections. C: search, replace. ! D: multibuffer. From neoneye at rubyforge.org Sat Jan 22 13:02:10 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 13:02:11 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO core.rb main_tui.rb test_core.rb Message-ID: <200501221802.j0MI2AdS029626@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv29617 Modified Files: CHANGES TODO core.rb main_tui.rb test_core.rb Log Message: line numbering are now working Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** TODO 22 Jan 2005 17:16:20 -0000 1.24 --- TODO 22 Jan 2005 18:02:07 -0000 1.25 *************** *** 3,7 **** more edit-operations: - A: line numbering. B: selections. C: search, replace. --- 3,6 ---- Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -d -r1.45 -r1.46 *** main_tui.rb 22 Jan 2005 11:20:53 -0000 1.45 --- main_tui.rb 22 Jan 2005 18:02:07 -0000 1.46 *************** *** 152,156 **** @canvas.height end ! def render_row(y, text, options) #$logger.debug "render_row y=#{y.inspect} text=#{text.inspect}" glyphs = (text || '').unpack('U*') --- 152,156 ---- @canvas.height end ! def render_row(vy, text, ay, options) #$logger.debug "render_row y=#{y.inspect} text=#{text.inspect}" glyphs = (text || '').unpack('U*') *************** *** 186,193 **** end padding.times { render << 32 } ! @canvas.render_row(y, render.pack('U*')) end def cursor_show(x, y) ! @canvas.move(x - @scroll_x, y) end def measure_width(x, glyph) --- 186,197 ---- end padding.times { render << 32 } ! line_number = " " ! if ay ! line_number = ay.to_s.rjust(5) + " " ! end ! @canvas.render_row(vy, line_number + render.pack('U*')) end def cursor_show(x, y) ! @canvas.move(6 + x - @scroll_x, y) end def measure_width(x, glyph) Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** CHANGES 22 Jan 2005 16:27:58 -0000 1.18 --- CHANGES 22 Jan 2005 18:02:07 -0000 1.19 *************** *** 1,3 **** --- 1,4 ---- 22-01-2005 Neoneye + * Line numbering are now working. * View#move_pagedown/pagedown are now working. Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** test_core.rb 22 Jan 2005 16:27:58 -0000 1.35 --- test_core.rb 22 Jan 2005 18:02:07 -0000 1.36 *************** *** 280,284 **** @sx << x end ! def render_row(y, utf8_string, options) @data << utf8_string end --- 280,284 ---- @sx << x end ! def render_row(y, utf8_string, ay, options) @data << utf8_string end Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** core.rb 22 Jan 2005 16:27:58 -0000 1.38 --- core.rb 22 Jan 2005 18:02:07 -0000 1.39 *************** *** 331,350 **** 0.upto(@height-1) do |y| fragment = nil ! vy = nil options = 0 if found_i and (found_i + y).between?(0, vis.size-1) ! vy = vis[found_i + y] end ! if @cursor_y == vy cy = y end ! if vy and vy.between?(0, @model.bytes.size-1) ! b = @model.p2b(0, vy) ! w = @model.bytes[vy] fragment = @model.text[b, w] ! options |= 1 if @lines[vy].bookmark ! options |= 2 if @lines[vy].folded_lines > 0 end ! @canvas.render_row(y, fragment, options) end @canvas.cursor_show(@cursor_x, cy) if cy --- 331,352 ---- 0.upto(@height-1) do |y| fragment = nil ! ay = nil options = 0 + render_ay = nil if found_i and (found_i + y).between?(0, vis.size-1) ! ay = vis[found_i + y] end ! if @cursor_y == ay cy = y end ! if ay and ay.between?(0, @model.bytes.size-1) ! b = @model.p2b(0, ay) ! w = @model.bytes[ay] fragment = @model.text[b, w] ! options |= 1 if @lines[ay].bookmark ! options |= 2 if @lines[ay].folded_lines > 0 ! render_ay = ay + 1 end ! @canvas.render_row(y, fragment, render_ay, options) end @canvas.cursor_show(@cursor_x, cy) if cy From neoneye at rubyforge.org Sat Jan 22 13:07:03 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 13:07:04 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb Message-ID: <200501221807.j0MI73dS029757@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv29750 Modified Files: main_tui.rb Log Message: forgot to adjust width. Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -d -r1.46 -r1.47 *** main_tui.rb 22 Jan 2005 18:02:07 -0000 1.46 --- main_tui.rb 22 Jan 2005 18:07:01 -0000 1.47 *************** *** 51,55 **** end def event_loop ! @view.resize(@canvas.w, @canvas.h) @view.update dump_statistics --- 51,55 ---- end def event_loop ! @view.resize(width, height) @view.update dump_statistics *************** *** 141,145 **** @view.move_pageup when 410 ! @view.resize(@canvas.w, @canvas.h) else $logger.debug "dispatch unknown key, event=#{event}" --- 141,145 ---- @view.move_pageup when 410 ! @view.resize(width, height) else $logger.debug "dispatch unknown key, event=#{event}" *************** *** 147,151 **** end def width ! @canvas.width end def height --- 147,151 ---- end def width ! @canvas.width - 6 # because of line numbers end def height *************** *** 173,177 **** x += w end ! padding = (sx + @canvas.width) - x render.slice!(0, @scroll_x) @canvas.set_color(1) --- 173,177 ---- x += w end ! padding = (sx + width) - x render.slice!(0, @scroll_x) @canvas.set_color(1) From neoneye at rubyforge.org Sat Jan 22 13:18:03 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 13:18:05 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source README Message-ID: <200501221818.j0MII3dS030006@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv29991 Modified Files: README Log Message: since last time pageup/down has been added. Index: README =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** README 18 Jan 2005 22:13:06 -0000 1.3 --- README 22 Jan 2005 18:18:01 -0000 1.4 *************** *** 5,9 **** still very rough. No syntax coloring, no multibuffer, no advanced edit strategies (it has a new datastructure that rocks). ! No delete key, no pageup/pagedown, no undo/redo. If we don't consider the code for wrapping libncursesw, then the core of the editor only takes up 860 lines of ruby code. --- 5,9 ---- still very rough. No syntax coloring, no multibuffer, no advanced edit strategies (it has a new datastructure that rocks). ! No delete key, no undo/redo. If we don't consider the code for wrapping libncursesw, then the core of the editor only takes up 860 lines of ruby code. *************** *** 41,44 **** --- 41,46 ---- home ........... move cursor to linebegin end ............ move cursor to lineend + pageup ......... move a page up + pagedown ....... move a page down F1 ............. insert a fullwidth glyph (〜) F2 ............. dump statistics to log From neoneye at rubyforge.org Sat Jan 22 13:47:24 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 13:47:25 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb main_tui.rb Message-ID: <200501221847.j0MIlOdS030609@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv30596 Modified Files: core.rb main_tui.rb Log Message: I can now copy selected text. Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -d -r1.47 -r1.48 *** main_tui.rb 22 Jan 2005 18:07:01 -0000 1.47 --- main_tui.rb 22 Jan 2005 18:47:22 -0000 1.48 *************** *** 35,39 **** #@lexer = MockLexer.new #@view.lexer = @lexer ! @tabsize = 8 end def self.run(filename) --- 35,40 ---- #@lexer = MockLexer.new #@view.lexer = @lexer ! @tabsize = 4 ! @selection_mode = 0 end def self.run(filename) *************** *** 118,121 **** --- 119,130 ---- when 13 @view.insert("\n") + when 22 # ctrl-v cycle through selection modes + @selection_mode = (@selection_mode + 1) % 2 + case @selection_mode + when 1: + @view.selection_enable + when 0: + @view.selection_disable + end when 263 @view.backspace Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** core.rb 22 Jan 2005 18:02:07 -0000 1.39 --- core.rb 22 Jan 2005 18:47:22 -0000 1.40 *************** *** 253,256 **** --- 253,258 ---- @cursor_x, @cursor_y = 0, 0 @width, @height = 5, 5 + @sel_x, @sel_y = 0, 0 + @sel_mode = false sync_lines end *************** *** 530,533 **** --- 532,549 ---- end end + def selection_enable + $logger.info "view operation selection enable" + @sel_x, @sel_y = @cursor_x, @cursor_y + @sel_mode = true + end + def selection_disable + $logger.info "view operation selection disable" + @sel_mode = false + sb = @model.p2b(xy2p(@sel_x, @sel_y), @sel_y) + cb = @model.p2b(xy2p(@cursor_x, @cursor_y), @cursor_y) + min, max = [sb, cb].sort + txt = @model.text[min, max-min] + $logger.info "text: #{txt.inspect}" + end def toggle_bookmark $logger.info "view operation toggle bookmark" From neoneye at rubyforge.org Sat Jan 22 14:15:38 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 14:15:40 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb main_tui.rb test_core.rb Message-ID: <200501221915.j0MJFcdS000487@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv404 Modified Files: core.rb main_tui.rb test_core.rb Log Message: copy paste are now working Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.48 retrieving revision 1.49 diff -C2 -d -r1.48 -r1.49 *** main_tui.rb 22 Jan 2005 18:47:22 -0000 1.48 --- main_tui.rb 22 Jan 2005 19:15:36 -0000 1.49 *************** *** 37,40 **** --- 37,41 ---- @tabsize = 4 @selection_mode = 0 + @selection_text = '' end def self.run(filename) *************** *** 119,129 **** when 13 @view.insert("\n") when 22 # ctrl-v cycle through selection modes @selection_mode = (@selection_mode + 1) % 2 case @selection_mode when 1: ! @view.selection_enable when 0: ! @view.selection_disable end when 263 --- 120,133 ---- when 13 @view.insert("\n") + when 16 # ctrl-p paste selected data + @view.insert(@selection_text) when 22 # ctrl-v cycle through selection modes @selection_mode = (@selection_mode + 1) % 2 case @selection_mode when 1: ! @view.selection_begin when 0: ! @selection_text = @view.selection ! @view.selection_end end when 263 Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** test_core.rb 22 Jan 2005 18:02:07 -0000 1.36 --- test_core.rb 22 Jan 2005 19:15:36 -0000 1.37 *************** *** 718,728 **** assert_equal("abc\txdef", @model.text) end ! def test_bad_insert1 ! e = assert_raise(ArgumentError) { @view.insert("42") } ! assert_match(/one letter/, e.message) end ! def test_bad_insert1 ! e = assert_raise(ArgumentError) { @view.insert("") } ! assert_match(/one letter/, e.message) end end --- 718,730 ---- assert_equal("abc\txdef", @model.text) end ! def test_multiple1 ! @view.insert("xyz") ! assert_equal("abcxyzdef", @model.text) ! assert_equal(6, @view.cursor_x) end ! def test_none1 ! @view.insert("") ! assert_equal("abcdef", @model.text) ! assert_equal(3, @view.cursor_x) end end *************** *** 1249,1253 **** end ! --- 1251,1290 ---- end ! class TestViewSelectionGet < Test::Unit::TestCase ! def setup ! super ! @model = AEditor::Model::Caretaker.new ! @model.load("Alexander Kellett\nAllan Odgaard\nBram Moolenar") ! @view = AEditor::View::Caretaker.new(@model) ! @model.attach(@view) ! @view.cursor_x, @view.cursor_y = 0, 0 ! @view.scroll_x, @view.scroll_y = 0, 0 ! @view.resize(10, 4) ! end ! def teardown ! super ! @model.check_integrity ! @view.check_integrity ! end ! def test_typical1 ! @view.cursor_x, @view.cursor_y = 3, 0 ! @view.selection_begin ! @view.cursor_x, @view.cursor_y = 8, 0 ! assert_equal("xande", @view.selection) ! end ! def test_typical2 ! @view.cursor_x, @view.cursor_y = 2, 1 ! @view.selection_begin ! @view.cursor_x, @view.cursor_y = 12, 0 ! assert_equal("llett\nAl", @view.selection) ! end ! def test_typical3 ! @view.collapse(1, 2) ! @view.cursor_x, @view.cursor_y = 16, 0 ! @view.selection_begin ! @view.cursor_x, @view.cursor_y = 1, 2 ! assert_equal("t\nAllan Odgaard\nB", @view.selection) ! end ! end Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** core.rb 22 Jan 2005 18:47:22 -0000 1.40 --- core.rb 22 Jan 2005 19:15:36 -0000 1.41 *************** *** 471,475 **** def insert(utf8_string) ary = utf8_string.unpack("U*") ! raise ArgumentError, 'supply only one letter' if ary.size != 1 cx, cy = cursor $logger.info "view operation insert " + --- 471,475 ---- def insert(utf8_string) ary = utf8_string.unpack("U*") ! #raise ArgumentError, 'supply only one letter' if ary.size != 1 cx, cy = cursor $logger.info "view operation insert " + *************** *** 532,548 **** end end ! def selection_enable ! $logger.info "view operation selection enable" @sel_x, @sel_y = @cursor_x, @cursor_y @sel_mode = true end ! def selection_disable ! $logger.info "view operation selection disable" @sel_mode = false sb = @model.p2b(xy2p(@sel_x, @sel_y), @sel_y) cb = @model.p2b(xy2p(@cursor_x, @cursor_y), @cursor_y) min, max = [sb, cb].sort txt = @model.text[min, max-min] ! $logger.info "text: #{txt.inspect}" end def toggle_bookmark --- 532,552 ---- end end ! def selection_begin ! $logger.info "view operation selection begin" @sel_x, @sel_y = @cursor_x, @cursor_y @sel_mode = true end ! def selection_end ! $logger.info "view operation selection end" @sel_mode = false + end + def selection + return '' unless @sel_mode sb = @model.p2b(xy2p(@sel_x, @sel_y), @sel_y) cb = @model.p2b(xy2p(@cursor_x, @cursor_y), @cursor_y) min, max = [sb, cb].sort txt = @model.text[min, max-min] ! #$logger.info "text: #{txt.inspect}" ! txt end def toggle_bookmark From neoneye at rubyforge.org Sat Jan 22 14:36:39 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 14:36:40 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb main_tui.rb Message-ID: <200501221936.j0MJaddS000841@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv834 Modified Files: core.rb main_tui.rb Log Message: selection erase are now working Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.49 retrieving revision 1.50 diff -C2 -d -r1.49 -r1.50 *** main_tui.rb 22 Jan 2005 19:15:36 -0000 1.49 --- main_tui.rb 22 Jan 2005 19:36:37 -0000 1.50 *************** *** 132,136 **** end when 263 ! @view.backspace when 259 @view.move_to_prev_visible_line --- 132,142 ---- end when 263 ! case @selection_mode ! when 1: ! @view.selection_erase ! @selection_mode = 0 ! when 0: ! @view.backspace ! end when 259 @view.move_to_prev_visible_line Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -d -r1.41 -r1.42 *** core.rb 22 Jan 2005 19:15:36 -0000 1.41 --- core.rb 22 Jan 2005 19:36:37 -0000 1.42 *************** *** 550,553 **** --- 550,566 ---- txt end + def selection_erase + $logger.info "view operation selection erase" + return unless @sel_mode + @sel_mode = false + + sb = @model.p2b(xy2p(@sel_x, @sel_y), @sel_y) + cb = @model.p2b(xy2p(@cursor_x, @cursor_y), @cursor_y) + min, max = [sb, cb].sort + + ax, ay = @model.b2p(min) + bx, by = @model.b2p(max) + @model.replace(ax, ay, bx, by, '') + end def toggle_bookmark $logger.info "view operation toggle bookmark" From neoneye at rubyforge.org Sat Jan 22 14:42:09 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 14:42:10 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source README Message-ID: <200501221942.j0MJg9dS000962@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv950 Modified Files: README Log Message: added more keybindings (im very productive tonight). Index: README =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** README 22 Jan 2005 18:18:01 -0000 1.4 --- README 22 Jan 2005 19:42:06 -0000 1.5 *************** *** 27,30 **** --- 27,31 ---- folding bookmarks + selections unicode glyphs *************** *** 38,42 **** arrow keys ..... move cursor letters ........ insert text ! backspace ...... erase char left of cursor home ........... move cursor to linebegin end ............ move cursor to lineend --- 39,43 ---- arrow keys ..... move cursor letters ........ insert text ! backspace ...... erase char left of cursor (or selection) home ........... move cursor to linebegin end ............ move cursor to lineend *************** *** 50,53 **** --- 51,56 ---- ctrl f f ....... expand fold ctrl f 5 ....... collapse 5 lines + ctrl v ......... toggle selection mode + ctrl p ......... paste from clipboard From neoneye at rubyforge.org Sat Jan 22 14:45:26 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 14:45:27 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO Message-ID: <200501221945.j0MJjQdS001023@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv1014 Modified Files: CHANGES TODO Log Message: removed solved TODO. added more TODO's. Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** CHANGES 22 Jan 2005 18:02:07 -0000 1.19 --- CHANGES 22 Jan 2005 19:45:24 -0000 1.20 *************** *** 1,3 **** --- 1,4 ---- 22-01-2005 Neoneye + * Copy/Paste/Cut is now working. * Line numbering are now working. * View#move_pagedown/pagedown are now working. Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** TODO 22 Jan 2005 18:02:07 -0000 1.25 --- TODO 22 Jan 2005 19:45:24 -0000 1.26 *************** *** 1,9 **** render with colors. more edit-operations: - B: selections. C: search, replace. D: multibuffer. --- 1,14 ---- render with colors. + A: render the selected area. more edit-operations: C: search, replace. D: multibuffer. + E: delete key. + F: rectangular selections. + + + paste should interact with X11's clipboard From neoneye at rubyforge.org Sat Jan 22 15:43:16 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 15:43:18 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb main_tui.rb ncursesw.rb Message-ID: <200501222043.j0MKhGdS003652@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv3629 Modified Files: core.rb main_tui.rb ncursesw.rb Log Message: added color rendering (huge slowdown). Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** main_tui.rb 22 Jan 2005 19:36:37 -0000 1.50 --- main_tui.rb 22 Jan 2005 20:43:14 -0000 1.51 *************** *** 192,213 **** x += w end padding = (sx + width) - x render.slice!(0, @scroll_x) @canvas.set_color(1) if (options & 1) != 0 render[0] = '-'[0] @canvas.set_color(2) end if (options & 2) != 0 ! 1.times { render << 32; x += 1 } render.map!{|i| (i==32) ? '_'[0] : i } @canvas.set_color(5) end ! padding.times { render << 32 } ! line_number = " " if ay ! line_number = ay.to_s.rjust(5) + " " end ! @canvas.render_row(vy, line_number + render.pack('U*')) end def cursor_show(x, y) --- 192,222 ---- x += w end + pens = [1] * render.size padding = (sx + width) - x render.slice!(0, @scroll_x) + pens.slice!(0, @scroll_x) @canvas.set_color(1) if (options & 1) != 0 render[0] = '-'[0] @canvas.set_color(2) + pens.map!{2} end if (options & 2) != 0 ! 1.times { render << 32; pens << 1; x += 1 } render.map!{|i| (i==32) ? '_'[0] : i } + pens.map!{5} @canvas.set_color(5) end ! padding.times { render << 32; pens << 1 } ! line_number_pens = [6] * 6 ! line_number = [32] * 6 if ay ! line_number = ay.to_s.rjust(5).unpack('U*') + [0x2502] end ! @canvas.render_row2( ! vy, ! line_number + render, ! line_number_pens + pens ! ) end def cursor_show(x, y) Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** core.rb 22 Jan 2005 19:36:37 -0000 1.42 --- core.rb 22 Jan 2005 20:43:14 -0000 1.43 *************** *** 259,262 **** --- 259,263 ---- attr_reader :model, :canvas, :lexer, :lines, :dirty attr_reader :scroll_x, :scroll_y, :cursor_x, :cursor_y + attr_reader :sel_x, :sel_y, :sel_mode attr_reader :width, :height Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** ncursesw.rb 21 Jan 2005 22:55:25 -0000 1.14 --- ncursesw.rb 22 Jan 2005 20:43:14 -0000 1.15 *************** *** 165,169 **** Curses.init_pair(4, 2, 4) # green on dark-blue ........ strings Curses.init_pair(5, 3, 0) # yellow on black ........... fold ! Curses.init_pair(6, 6, 4) # bright-blue on dark-blue .. - end private :alloc_colors --- 165,170 ---- Curses.init_pair(4, 2, 4) # green on dark-blue ........ strings Curses.init_pair(5, 3, 0) # yellow on black ........... fold ! Curses.init_pair(6, 0, 4) # black on dark-blue ........ linenumbers ! Curses.init_pair(7, 6, 4) # bright-blue on dark-blue .. - end private :alloc_colors *************** *** 245,248 **** --- 246,262 ---- #clear_to_eol end + def render_row2(y, glyphs, pens) + raise 'error' if glyphs.size != pens.size + move(0, y) + clear_to_eol + i=0 + while i Update of /var/cvs/aeditor/projects/documents/homepage/aeditor_shots In directory rubyforge.org:/tmp/cvs-serv3906 Added Files: 050.png 051.png 052.png Log Message: lots of shots today --- NEW FILE: 052.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 051.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 050.png --- (This appears to be a binary file; contents omitted.) From neoneye at rubyforge.org Sat Jan 22 16:55:32 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 16:55:33 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb ncursesw.rb Message-ID: <200501222155.j0MLtWdS006339@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv6329 Modified Files: main_tui.rb ncursesw.rb Log Message: caching of the rended glyphs, to prevent slow conversion. Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.51 retrieving revision 1.52 diff -C2 -d -r1.51 -r1.52 *** main_tui.rb 22 Jan 2005 20:43:14 -0000 1.51 --- main_tui.rb 22 Jan 2005 21:55:30 -0000 1.52 *************** *** 209,222 **** end padding.times { render << 32; pens << 1 } ! line_number_pens = [6] * 6 line_number = [32] * 6 if ay line_number = ay.to_s.rjust(5).unpack('U*') + [0x2502] end ! @canvas.render_row2( ! vy, ! line_number + render, ! line_number_pens + pens ! ) end def cursor_show(x, y) --- 209,222 ---- end padding.times { render << 32; pens << 1 } ! line_number_pens = [4, 4, 4, 4, 4, 6] line_number = [32] * 6 if ay line_number = ay.to_s.rjust(5).unpack('U*') + [0x2502] end ! ! glyphs = line_number + render ! pens = line_number_pens + pens ! n = glyphs.size ! @canvas.render_row2(vy, glyphs, pens, n) end def cursor_show(x, y) Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** ncursesw.rb 22 Jan 2005 20:43:14 -0000 1.15 --- ncursesw.rb 22 Jan 2005 21:55:30 -0000 1.16 *************** *** 112,115 **** --- 112,116 ---- extern 'int clear()' extern 'int addstr(const char *)' + #extern 'int add_wch(const cchar_t *)' extern 'int getch()' extern 'int refresh()' *************** *** 158,161 **** --- 159,164 ---- #Curses.wbkgdset(@ptr, 2) #Curses.wattrset(@ptr, (5 << 10)) + + @glyph2str = {} end def alloc_colors *************** *** 165,169 **** Curses.init_pair(4, 2, 4) # green on dark-blue ........ strings Curses.init_pair(5, 3, 0) # yellow on black ........... fold ! Curses.init_pair(6, 0, 4) # black on dark-blue ........ linenumbers Curses.init_pair(7, 6, 4) # bright-blue on dark-blue .. - end --- 168,172 ---- Curses.init_pair(4, 2, 4) # green on dark-blue ........ strings Curses.init_pair(5, 3, 0) # yellow on black ........... fold ! Curses.init_pair(6, 0, 4) # black on dark-blue ........ borders Curses.init_pair(7, 6, 4) # bright-blue on dark-blue .. - end *************** *** 246,260 **** #clear_to_eol end ! def render_row2(y, glyphs, pens) raise 'error' if glyphs.size != pens.size move(0, y) clear_to_eol i=0 ! while i Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv10822 Modified Files: main_tui.rb ncursesw.rb Log Message: we can now render with nicer colors (still terrible slow). Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.52 retrieving revision 1.53 diff -C2 -d -r1.52 -r1.53 *** main_tui.rb 22 Jan 2005 21:55:30 -0000 1.52 --- main_tui.rb 22 Jan 2005 23:09:56 -0000 1.53 *************** *** 38,41 **** --- 38,45 ---- @selection_mode = 0 @selection_text = '' + + @render_width = 1000 + @render_glyphs = [32] * @render_width + @render_pens = [32] * @render_width end def self.run(filename) *************** *** 173,181 **** def render_row(vy, text, ay, options) #$logger.debug "render_row y=#{y.inspect} text=#{text.inspect}" glyphs = (text || '').unpack('U*') - render = [] x = 0 sx = @scroll_x - sx += 1 if (options & 1) != 0 glyphs.each do |glyph| w = measure_width(x, glyph) --- 177,186 ---- def render_row(vy, text, ay, options) #$logger.debug "render_row y=#{y.inspect} text=#{text.inspect}" + + n = @scroll_x # reserve some space for line-numbers + glyphs = (text || '').unpack('U*') x = 0 sx = @scroll_x glyphs.each do |glyph| w = measure_width(x, glyph) *************** *** 183,203 **** w = 0 # ignore newlines elsif glyph == 9 ! render << "."[0] ! (w-1).times { render << 32 } elsif x >= sx ! render << glyph else ! w.times { render << 32 } end x += w end - pens = [1] * render.size padding = (sx + width) - x ! render.slice!(0, @scroll_x) ! pens.slice!(0, @scroll_x) ! @canvas.set_color(1) if (options & 1) != 0 render[0] = '-'[0] - @canvas.set_color(2) pens.map!{2} end --- 188,217 ---- w = 0 # ignore newlines elsif glyph == 9 ! @render_glyphs[n] = 32 # 0x2192 # 0x2500 # 46 ! @render_pens[n] = 8 ! n += 1 ! (w-1).times do ! @render_glyphs[n] = 32 ! @render_pens[n] = 8 ! n += 1 ! end elsif x >= sx ! @render_glyphs[n] = glyph ! @render_pens[n] = 1 ! n += 1 else ! w.times { ! @render_glyphs[n] = 32 ! @render_pens[n] = 1 ! n += 1 ! } end x += w end padding = (sx + width) - x ! ! =begin if (options & 1) != 0 render[0] = '-'[0] pens.map!{2} end *************** *** 206,222 **** render.map!{|i| (i==32) ? '_'[0] : i } pens.map!{5} - @canvas.set_color(5) end ! padding.times { render << 32; pens << 1 } ! line_number_pens = [4, 4, 4, 4, 4, 6] ! line_number = [32] * 6 if ay ! line_number = ay.to_s.rjust(5).unpack('U*') + [0x2502] end ! glyphs = line_number + render ! pens = line_number_pens + pens ! n = glyphs.size ! @canvas.render_row2(vy, glyphs, pens, n) end def cursor_show(x, y) --- 220,270 ---- render.map!{|i| (i==32) ? '_'[0] : i } pens.map!{5} end ! =end ! padding.times do ! @render_glyphs[n] = 32 ! @render_pens[n] = 1 ! n += 1 ! end ! ! # format linenumbers ! x = @scroll_x - 6 ! 5.times do |i| ! @render_pens[x + i] = 4 ! end if ay ! number = ay.to_s.rjust(5) ! 0.upto(4) do |i| ! @render_glyphs[x + i] = number[i] ! end ! else ! 0.upto(4) do |i| ! @render_glyphs[x + i] = 32 ! end ! end ! @render_pens[x + 5] = 6 ! @render_glyphs[x + 5] = 0x2502 ! ! # show fold ! if (options & 2) != 0 ! @render_glyphs[x + 5] = 32 # 0x256f # 0x2570 ! @render_pens.map!{5} end ! # show bookmark ! if (options & 1) != 0 ! #@render_glyphs[x + 5] = 0x2570 # 45 ! 5.times do |i| ! @render_pens[x + i] = 3 ! end ! end ! ! @canvas.render_row2( ! vy, ! @render_glyphs, ! @render_pens, ! x, ! width+6 ! ) end def cursor_show(x, y) Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** ncursesw.rb 22 Jan 2005 21:55:30 -0000 1.16 --- ncursesw.rb 22 Jan 2005 23:09:56 -0000 1.17 *************** *** 170,173 **** --- 170,174 ---- Curses.init_pair(6, 0, 4) # black on dark-blue ........ borders Curses.init_pair(7, 6, 4) # bright-blue on dark-blue .. - + Curses.init_pair(8, 4, 4) # blue on blue .............. tabs end private :alloc_colors *************** *** 257,266 **** print(str) end ! def render_row2(y, glyphs, pens, n) raise 'error' if glyphs.size != pens.size move(0, y) clear_to_eol ! i=0 ! while i < n set_color(pens[i]) print_glyph(glyphs[i]) --- 258,266 ---- print(str) end ! def render_row2(y, glyphs, pens, i, n) raise 'error' if glyphs.size != pens.size move(0, y) clear_to_eol ! n.times do set_color(pens[i]) print_glyph(glyphs[i]) From neoneye at rubyforge.org Sat Jan 22 18:16:01 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 18:16:03 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb Message-ID: <200501222316.j0MNG1dS010941@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv10933 Modified Files: main_tui.rb Log Message: cleaned up the rendering code Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.53 retrieving revision 1.54 diff -C2 -d -r1.53 -r1.54 *** main_tui.rb 22 Jan 2005 23:09:56 -0000 1.53 --- main_tui.rb 22 Jan 2005 23:15:59 -0000 1.54 *************** *** 176,187 **** end def render_row(vy, text, ay, options) - #$logger.debug "render_row y=#{y.inspect} text=#{text.inspect}" - n = @scroll_x # reserve some space for line-numbers - - glyphs = (text || '').unpack('U*') x = 0 ! sx = @scroll_x ! glyphs.each do |glyph| w = measure_width(x, glyph) if glyph == 10 or glyph == 13 --- 176,182 ---- end def render_row(vy, text, ay, options) n = @scroll_x # reserve some space for line-numbers x = 0 ! (text || '').unpack('U*').each do |glyph| w = measure_width(x, glyph) if glyph == 10 or glyph == 13 *************** *** 196,226 **** n += 1 end ! elsif x >= sx @render_glyphs[n] = glyph @render_pens[n] = 1 n += 1 else ! w.times { @render_glyphs[n] = 32 @render_pens[n] = 1 n += 1 ! } end x += w end ! padding = (sx + width) - x ! ! =begin ! if (options & 1) != 0 ! render[0] = '-'[0] ! pens.map!{2} ! end ! if (options & 2) != 0 ! 1.times { render << 32; pens << 1; x += 1 } ! render.map!{|i| (i==32) ? '_'[0] : i } ! pens.map!{5} ! end ! =end ! padding.times do @render_glyphs[n] = 32 @render_pens[n] = 1 --- 191,208 ---- n += 1 end ! elsif x >= @scroll_x @render_glyphs[n] = glyph @render_pens[n] = 1 n += 1 else ! w.times do @render_glyphs[n] = 32 @render_pens[n] = 1 n += 1 ! end end x += w end ! (@scroll_x + width - x).times do @render_glyphs[n] = 32 @render_pens[n] = 1 *************** *** 229,252 **** # format linenumbers ! x = @scroll_x - 6 5.times do |i| ! @render_pens[x + i] = 4 end if ay number = ay.to_s.rjust(5) 0.upto(4) do |i| ! @render_glyphs[x + i] = number[i] end else 0.upto(4) do |i| ! @render_glyphs[x + i] = 32 end end ! @render_pens[x + 5] = 6 ! @render_glyphs[x + 5] = 0x2502 # show fold if (options & 2) != 0 ! @render_glyphs[x + 5] = 32 # 0x256f # 0x2570 @render_pens.map!{5} end --- 211,234 ---- # format linenumbers ! ofs = @scroll_x - 6 5.times do |i| ! @render_pens[ofs + i] = 4 end if ay number = ay.to_s.rjust(5) 0.upto(4) do |i| ! @render_glyphs[ofs + i] = number[i] end else 0.upto(4) do |i| ! @render_glyphs[ofs + i] = 32 end end ! @render_pens[ofs + 5] = 6 ! @render_glyphs[ofs + 5] = 0x2502 # show fold if (options & 2) != 0 ! @render_glyphs[ofs + 5] = 32 # 0x256f # 0x2570 @render_pens.map!{5} end *************** *** 256,260 **** #@render_glyphs[x + 5] = 0x2570 # 45 5.times do |i| ! @render_pens[x + i] = 3 end end --- 238,242 ---- #@render_glyphs[x + 5] = 0x2570 # 45 5.times do |i| ! @render_pens[ofs + i] = 3 end end *************** *** 264,268 **** @render_glyphs, @render_pens, ! x, width+6 ) --- 246,250 ---- @render_glyphs, @render_pens, ! ofs, width+6 ) From neoneye at rubyforge.org Sat Jan 22 18:49:25 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 18:49:26 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb main_tui.rb Message-ID: <200501222349.j0MNnPdS011826@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv11815 Modified Files: core.rb main_tui.rb Log Message: we can now render selections (speed is now even more slow). Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.54 retrieving revision 1.55 diff -C2 -d -r1.54 -r1.55 *** main_tui.rb 22 Jan 2005 23:15:59 -0000 1.54 --- main_tui.rb 22 Jan 2005 23:49:23 -0000 1.55 *************** *** 176,202 **** end def render_row(vy, text, ay, options) n = @scroll_x # reserve some space for line-numbers x = 0 (text || '').unpack('U*').each do |glyph| w = measure_width(x, glyph) if glyph == 10 or glyph == 13 w = 0 # ignore newlines elsif glyph == 9 @render_glyphs[n] = 32 # 0x2192 # 0x2500 # 46 ! @render_pens[n] = 8 n += 1 (w-1).times do @render_glyphs[n] = 32 ! @render_pens[n] = 8 n += 1 end elsif x >= @scroll_x @render_glyphs[n] = glyph ! @render_pens[n] = 1 n += 1 else w.times do @render_glyphs[n] = 32 ! @render_pens[n] = 1 n += 1 end --- 176,229 ---- end def render_row(vy, text, ay, options) + + + sel1 = 0 + sel2 = -1 + if @view.sel_mode and ay + if (@view.sel_y == ay and @view.cursor_y == ay) + sel1, sel2 = [@view.sel_x, @view.cursor_x].sort + elsif @view.sel_y == ay + if @view.sel_y < @view.cursor_y + sel1, sel2 = @view.sel_x, width + else + sel1, sel2 = 0, @view.sel_x + end + elsif @view.cursor_y == ay + if @view.cursor_y < @view.sel_y + sel1, sel2 = @view.cursor_x, width + else + sel1, sel2 = 0, @view.cursor_x + end + end + end + + n = @scroll_x # reserve some space for line-numbers x = 0 (text || '').unpack('U*').each do |glyph| w = measure_width(x, glyph) + pen = nil + if sel1 <= x and x < sel2 + pen = 3 + end if glyph == 10 or glyph == 13 w = 0 # ignore newlines elsif glyph == 9 @render_glyphs[n] = 32 # 0x2192 # 0x2500 # 46 ! @render_pens[n] = pen || 8 n += 1 (w-1).times do @render_glyphs[n] = 32 ! @render_pens[n] = pen || 8 n += 1 end elsif x >= @scroll_x @render_glyphs[n] = glyph ! @render_pens[n] = pen || 1 n += 1 else w.times do @render_glyphs[n] = 32 ! @render_pens[n] = pen || 1 n += 1 end *************** *** 205,211 **** end (@scroll_x + width - x).times do @render_glyphs[n] = 32 ! @render_pens[n] = 1 n += 1 end --- 232,244 ---- end (@scroll_x + width - x).times do + pen = nil + if sel1 <= x and x < sel2 + pen = 3 + end + @render_glyphs[n] = 32 ! @render_pens[n] = pen || 1 n += 1 + x += 1 end *************** *** 216,220 **** end if ay ! number = ay.to_s.rjust(5) 0.upto(4) do |i| @render_glyphs[ofs + i] = number[i] --- 249,253 ---- end if ay ! number = (ay+1).to_s.rjust(5) 0.upto(4) do |i| @render_glyphs[ofs + i] = number[i] *************** *** 242,245 **** --- 275,288 ---- end + # show selection + if @view.sel_mode and ay + if (@view.sel_y < ay and ay < @view.cursor_y) or + (@view.cursor_y < ay and ay < @view.sel_y) + width.times do |i| + @render_pens[ofs + 6 + i] = 3 + end + end + end + @canvas.render_row2( vy, Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -d -r1.43 -r1.44 *** core.rb 22 Jan 2005 20:43:14 -0000 1.43 --- core.rb 22 Jan 2005 23:49:23 -0000 1.44 *************** *** 349,353 **** options |= 1 if @lines[ay].bookmark options |= 2 if @lines[ay].folded_lines > 0 ! render_ay = ay + 1 end @canvas.render_row(y, fragment, render_ay, options) --- 349,353 ---- options |= 1 if @lines[ay].bookmark options |= 2 if @lines[ay].folded_lines > 0 ! render_ay = ay end @canvas.render_row(y, fragment, render_ay, options) From neoneye at rubyforge.org Sat Jan 22 18:55:36 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 18:55:38 2005 Subject: [Aeditor-commit] projects/documents/homepage/aeditor_shots 053.png Message-ID: <200501222355.j0MNtadS012006@rubyforge.org> Update of /var/cvs/aeditor/projects/documents/homepage/aeditor_shots In directory rubyforge.org:/tmp/cvs-serv12001 Added Files: 053.png Log Message: I can now render selections --- NEW FILE: 053.png --- (This appears to be a binary file; contents omitted.) From neoneye at rubyforge.org Sat Jan 22 19:03:55 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 19:03:57 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO Message-ID: <200501230003.j0N03tdS013673@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv13665 Modified Files: CHANGES TODO Log Message: selections are now working Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** CHANGES 22 Jan 2005 19:45:24 -0000 1.20 --- CHANGES 23 Jan 2005 00:03:53 -0000 1.21 *************** *** 1,3 **** --- 1,4 ---- 22-01-2005 Neoneye + * Rendering with colors (also nice selections). * Copy/Paste/Cut is now working. * Line numbering are now working. Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** TODO 22 Jan 2005 19:45:24 -0000 1.26 --- TODO 23 Jan 2005 00:03:53 -0000 1.27 *************** *** 1,4 **** render with colors. ! A: render the selected area. --- 1,4 ---- render with colors. ! B: faster via caching. From neoneye at rubyforge.org Sat Jan 22 19:37:03 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 19:37:04 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb Message-ID: <200501230037.j0N0b3dS014487@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv14462 Modified Files: main_tui.rb Log Message: somehow in my desire to rework the rendering code.. I managed to trash the sideways scrolling. Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** main_tui.rb 22 Jan 2005 23:49:23 -0000 1.55 --- main_tui.rb 23 Jan 2005 00:37:01 -0000 1.56 *************** *** 199,203 **** ! n = @scroll_x # reserve some space for line-numbers x = 0 (text || '').unpack('U*').each do |glyph| --- 199,203 ---- ! n = 6 - @scroll_x # reserve some space for line-numbers x = 0 (text || '').unpack('U*').each do |glyph| *************** *** 244,248 **** # format linenumbers ! ofs = @scroll_x - 6 5.times do |i| @render_pens[ofs + i] = 4 --- 244,248 ---- # format linenumbers ! ofs = 0 5.times do |i| @render_pens[ofs + i] = 4 From neoneye at rubyforge.org Sat Jan 22 20:18:28 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 20:18:30 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb main_tui.rb Message-ID: <200501230118.j0N1ISdS016498@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv16490 Modified Files: core.rb main_tui.rb Log Message: early code for delete key Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** main_tui.rb 23 Jan 2005 00:37:01 -0000 1.56 --- main_tui.rb 23 Jan 2005 01:18:26 -0000 1.57 *************** *** 159,162 **** --- 159,164 ---- when 266 dump_statistics + when 330 + @view.delete_right when 338 @view.move_pagedown Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.44 retrieving revision 1.45 diff -C2 -d -r1.44 -r1.45 *** core.rb 22 Jan 2005 23:49:23 -0000 1.44 --- core.rb 23 Jan 2005 01:18:26 -0000 1.45 *************** *** 491,494 **** --- 491,507 ---- @model.replace(p-1, cy, p, cy, '') end + def delete_right + cx, cy = cursor + $logger.info "view operation backspace x=#{cx} y=#{cy}" + pos = xy2p(cx, cy) + x = @model.glyphs(cy).size + if cy < @model.bytes.size and pos >= x-1 + @model.replace(x-1, cy, 0, cy+1, '') + return + elsif cy == @model.bytes.size and pos >= x + return + end + @model.replace(pos, cy, pos+1, cy, '') + end def move_to_lineend x = 0 From neoneye at rubyforge.org Sat Jan 22 20:20:18 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 22 20:20:19 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES Message-ID: <200501230120.j0N1KIdS016560@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv16534 Modified Files: CHANGES Log Message: This is it for today.. I cannot any longer. I have added many features this evening. Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** CHANGES 23 Jan 2005 00:03:53 -0000 1.21 --- CHANGES 23 Jan 2005 01:20:16 -0000 1.22 *************** *** 1,3 **** --- 1,4 ---- 22-01-2005 Neoneye + * Early code for delete key. * Rendering with colors (also nice selections). * Copy/Paste/Cut is now working. From neoneye at rubyforge.org Sun Jan 23 04:16:21 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 04:16:22 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb Message-ID: <200501230916.j0N9GLdS020015@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv19964 Modified Files: core.rb Log Message: Improved the model's core functions: #p2b and #replace so they now more explicitly reports the reason why something had failed. Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -d -r1.45 -r1.46 *** core.rb 23 Jan 2005 01:18:26 -0000 1.45 --- core.rb 23 Jan 2005 09:16:19 -0000 1.46 *************** *** 80,85 **** check_integer(x) check_integer(y) ! raise ArgumentError unless y.between?(0, @bytes.size-1) ! raise ArgumentError if x < 0 n = 0 0.upto(y-1) do |iy| --- 80,91 ---- check_integer(x) check_integer(y) ! unless y.between?(0, @bytes.size-1) ! raise ArgumentError, "y must between 0..#{@bytes.size-1}, " ! "but was #{y}." ! end ! if x < 0 ! raise ArgumentError, "x must be greater than 0, " ! "but was #{x}." ! end n = 0 0.upto(y-1) do |iy| *************** *** 127,135 **** raise ArgumentError, "negative range" if y1 == y2 and x1 > x2 check_valid_utf8(utf8_str) ! ! text_begin_line = p2b(0, y1) ! text_begin_insert = p2b(x1, y1) ! text_end_line = p2b(0, y2) + @bytes[y2] ! text_end_insert = p2b(x2, y2) b1 = text_begin_line --- 133,153 ---- raise ArgumentError, "negative range" if y1 == y2 and x1 > x2 check_valid_utf8(utf8_str) ! ! begin ! text_begin_line = p2b(0, y1) ! text_begin_insert = p2b(x1, y1) ! rescue ArgumentError => e ! raise ArgumentError, ! "first position (#{x1},#{y1}) is invalid, " + ! "reason=#{e.message}" ! end ! begin ! text_end_line = p2b(0, y2) + @bytes[y2] ! text_end_insert = p2b(x2, y2) ! rescue ArgumentError => e ! raise ArgumentError, ! "second position (#{x1},#{y1}) is invalid, " + ! "reason=#{e.message}" ! end b1 = text_begin_line From neoneye at rubyforge.org Sun Jan 23 04:23:37 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 04:23:39 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb Message-ID: <200501230923.j0N9NbdS030624@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv30610 Modified Files: core.rb Log Message: Forgot to concat the error-message in Model#p2b Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -d -r1.46 -r1.47 *** core.rb 23 Jan 2005 09:16:19 -0000 1.46 --- core.rb 23 Jan 2005 09:23:35 -0000 1.47 *************** *** 81,90 **** check_integer(y) unless y.between?(0, @bytes.size-1) ! raise ArgumentError, "y must between 0..#{@bytes.size-1}, " ! "but was #{y}." end if x < 0 ! raise ArgumentError, "x must be greater than 0, " ! "but was #{x}." end n = 0 --- 81,90 ---- check_integer(y) unless y.between?(0, @bytes.size-1) ! raise ArgumentError, ! "y must between 0..#{@bytes.size-1}, but was #{y}." end if x < 0 ! raise ArgumentError, ! "x must be greater than 0, but was #{x}." end n = 0 From neoneye at rubyforge.org Sun Jan 23 04:37:43 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 04:37:45 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES README TODO core.rb test_core.rb Message-ID: <200501230937.j0N9bhdS030838@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv30834 Modified Files: CHANGES README TODO core.rb test_core.rb Log Message: delete key are now working Index: README =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** README 22 Jan 2005 19:42:06 -0000 1.5 --- README 23 Jan 2005 09:37:41 -0000 1.6 *************** *** 5,9 **** still very rough. No syntax coloring, no multibuffer, no advanced edit strategies (it has a new datastructure that rocks). ! No delete key, no undo/redo. If we don't consider the code for wrapping libncursesw, then the core of the editor only takes up 860 lines of ruby code. --- 5,9 ---- still very rough. No syntax coloring, no multibuffer, no advanced edit strategies (it has a new datastructure that rocks). ! No undo/redo. If we don't consider the code for wrapping libncursesw, then the core of the editor only takes up 860 lines of ruby code. *************** *** 40,43 **** --- 40,44 ---- letters ........ insert text backspace ...... erase char left of cursor (or selection) + delete ......... erase char right of cursor home ........... move cursor to linebegin end ............ move cursor to lineend Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** TODO 23 Jan 2005 00:03:53 -0000 1.27 --- TODO 23 Jan 2005 09:37:41 -0000 1.28 *************** *** 6,10 **** C: search, replace. D: multibuffer. - E: delete key. F: rectangular selections. --- 6,9 ---- Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** CHANGES 23 Jan 2005 01:20:16 -0000 1.22 --- CHANGES 23 Jan 2005 09:37:41 -0000 1.23 *************** *** 1,2 **** --- 1,5 ---- + 23-01-2005 Neoneye + * Delete key is now working. + 22-01-2005 Neoneye * Early code for delete key. Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** test_core.rb 22 Jan 2005 19:15:36 -0000 1.37 --- test_core.rb 23 Jan 2005 09:37:41 -0000 1.38 *************** *** 805,808 **** --- 805,859 ---- end + + class TestViewDeleteRight < Test::Unit::TestCase + def setup + super + @model = AEditor::Model::Caretaker.new + @model.load("abcdef") + @view = AEditor::View::Caretaker.new(@model) + @model.attach(@view) + @view.cursor_x = 3 + @canvas = MockCanvas.new(80, 25) + @view.canvas = @canvas + end + def teardown + super + @model.check_integrity + @view.check_integrity + end + def test_init1 + assert_equal([3, 0], @view.cursor) + end + def test_halfwidth1 + @view.delete_right + assert_equal("abcef", @model.text) + assert_equal(3, @view.cursor_x) + @view.delete_right + assert_equal("abcf", @model.text) + assert_equal(3, @view.cursor_x) + end + def test_newline1 + @model.load("abc\ndef") + @view.cursor_x, @view.cursor_y = 3, 0 + @view.delete_right + assert_equal("abcdef", @model.text) + assert_equal(3, @view.cursor_x) + end + def test_endofbuffer1 + @model.load("abc\ndef") + @view.cursor_x, @view.cursor_y = 2, 1 + @view.delete_right + assert_equal("abc\nde", @model.text) + assert_equal(2, @view.cursor_x) + end + def test_endofbuffer2 + @view.cursor_x = 6 + @view.delete_right + assert_equal("abcdef", @model.text, 'should be harmless') + assert_equal(6, @view.cursor_x) + end + end + + class TestViewConvertVisibley2Absolutey < Test::Unit::TestCase def setup Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -d -r1.47 -r1.48 *** core.rb 23 Jan 2005 09:23:35 -0000 1.47 --- core.rb 23 Jan 2005 09:37:41 -0000 1.48 *************** *** 514,522 **** pos = xy2p(cx, cy) x = @model.glyphs(cy).size ! if cy < @model.bytes.size and pos >= x-1 @model.replace(x-1, cy, 0, cy+1, '') return ! elsif cy == @model.bytes.size and pos >= x ! return end @model.replace(pos, cy, pos+1, cy, '') --- 514,523 ---- pos = xy2p(cx, cy) x = @model.glyphs(cy).size ! if cy+1 < @model.bytes.size and pos >= x-1 @model.replace(x-1, cy, 0, cy+1, '') return ! end ! if cy+1 >= @model.bytes.size and pos >= x ! return # reached end of buffer.. nothing to do end @model.replace(pos, cy, pos+1, cy, '') From neoneye at rubyforge.org Sun Jan 23 04:40:29 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 04:40:31 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb main_tui.rb test_core.rb Message-ID: <200501230940.j0N9eTdS030882@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv30876 Modified Files: core.rb main_tui.rb test_core.rb Log Message: renamed #backspace to #delete_left Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.57 retrieving revision 1.58 diff -C2 -d -r1.57 -r1.58 *** main_tui.rb 23 Jan 2005 01:18:26 -0000 1.57 --- main_tui.rb 23 Jan 2005 09:40:27 -0000 1.58 *************** *** 141,145 **** @selection_mode = 0 when 0: ! @view.backspace end when 259 --- 141,145 ---- @selection_mode = 0 when 0: ! @view.delete_left end when 259 *************** *** 160,164 **** dump_statistics when 330 ! @view.delete_right when 338 @view.move_pagedown --- 160,170 ---- dump_statistics when 330 ! case @selection_mode ! when 1: ! @view.selection_erase ! @selection_mode = 0 ! when 0: ! @view.delete_right ! end when 338 @view.move_pagedown Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** test_core.rb 23 Jan 2005 09:37:41 -0000 1.38 --- test_core.rb 23 Jan 2005 09:40:27 -0000 1.39 *************** *** 731,735 **** ! class TestViewBackspace < Test::Unit::TestCase def setup super --- 731,735 ---- ! class TestViewDeleteLeft < Test::Unit::TestCase def setup super *************** *** 751,758 **** end def test_halfwidth1 ! @view.backspace assert_equal("abdef", @model.text) assert_equal(2, @view.cursor_x) ! @view.backspace assert_equal("adef", @model.text) assert_equal(1, @view.cursor_x) --- 751,758 ---- end def test_halfwidth1 ! @view.delete_left assert_equal("abdef", @model.text) assert_equal(2, @view.cursor_x) ! @view.delete_left assert_equal("adef", @model.text) assert_equal(1, @view.cursor_x) *************** *** 761,768 **** @model.load("aXYZb") @view.cursor_x = 5 ! @view.backspace assert_equal("aXZb", @model.text) assert_equal(3, @view.cursor_x) ! @view.backspace assert_equal("aZb", @model.text) assert_equal(1, @view.cursor_x) --- 761,768 ---- @model.load("aXYZb") @view.cursor_x = 5 ! @view.delete_left assert_equal("aXZb", @model.text) assert_equal(3, @view.cursor_x) ! @view.delete_left assert_equal("aZb", @model.text) assert_equal(1, @view.cursor_x) *************** *** 771,775 **** @model.load("ab\ncd") @view.cursor_x, @view.cursor_y = 0, 1 ! @view.backspace assert_equal("abcd", @model.text) assert_equal([2, 0], @view.cursor) --- 771,775 ---- @model.load("ab\ncd") @view.cursor_x, @view.cursor_y = 0, 1 ! @view.delete_left assert_equal("abcd", @model.text) assert_equal([2, 0], @view.cursor) *************** *** 778,782 **** @model.load("ab\tcd") @view.cursor_x = 8 ! @view.backspace assert_equal("abcd", @model.text) assert_equal(2, @view.cursor_x) --- 778,782 ---- @model.load("ab\tcd") @view.cursor_x = 8 ! @view.delete_left assert_equal("abcd", @model.text) assert_equal(2, @view.cursor_x) *************** *** 785,789 **** @model.load("abcde\txyz") @view.cursor_x = 7 ! @view.backspace assert_equal("abcdexyz", @model.text) assert_equal(5, @view.cursor_x) --- 785,789 ---- @model.load("abcde\txyz") @view.cursor_x = 7 ! @view.delete_left assert_equal("abcdexyz", @model.text) assert_equal(5, @view.cursor_x) *************** *** 792,796 **** @model.load("abXcd") @view.cursor_x = 3 ! @view.backspace assert_equal("abcd", @model.text) assert_equal(2, @view.cursor_x) --- 792,796 ---- @model.load("abXcd") @view.cursor_x = 3 ! @view.delete_left assert_equal("abcd", @model.text) assert_equal(2, @view.cursor_x) *************** *** 799,803 **** @model.load("abc\ndef") @view.cursor_x, @view.cursor_y = 5, 0 ! @view.backspace assert_equal("ab\ndef", @model.text) assert_equal(2, @view.cursor_x) --- 799,803 ---- @model.load("abc\ndef") @view.cursor_x, @view.cursor_y = 5, 0 ! @view.delete_left assert_equal("ab\ndef", @model.text) assert_equal(2, @view.cursor_x) Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.48 retrieving revision 1.49 diff -C2 -d -r1.48 -r1.49 *** core.rb 23 Jan 2005 09:37:41 -0000 1.48 --- core.rb 23 Jan 2005 09:40:27 -0000 1.49 *************** *** 497,501 **** @model.replace(p, cy, p, cy, utf8_string) end ! def backspace cx, cy = cursor $logger.info "view operation backspace x=#{cx} y=#{cy}" --- 497,501 ---- @model.replace(p, cy, p, cy, utf8_string) end ! def delete_left cx, cy = cursor $logger.info "view operation backspace x=#{cx} y=#{cy}" From neoneye at rubyforge.org Sun Jan 23 07:57:19 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 07:57:20 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES core.rb test_core.rb Message-ID: <200501231257.j0NCvJdS007037@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv7033 Modified Files: CHANGES core.rb test_core.rb Log Message: early code for search Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** CHANGES 23 Jan 2005 09:37:41 -0000 1.23 --- CHANGES 23 Jan 2005 12:57:17 -0000 1.24 *************** *** 1,3 **** --- 1,4 ---- 23-01-2005 Neoneye + * Early code for search. * Delete key is now working. Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** test_core.rb 23 Jan 2005 09:40:27 -0000 1.39 --- test_core.rb 23 Jan 2005 12:57:17 -0000 1.40 *************** *** 1340,1343 **** ! --- 1340,1384 ---- ! class TestViewSearch < Test::Unit::TestCase ! TEXT = <<-EOTEXT.gsub(/^\s*/, '') ! I began programming on an Amiga500 with AMOS. ! AMOS had it's own IDE where multiple lines could be ! collapsed into a single line. Later I switched to ! Turbo Pascal, which also were a nice environment. ! I learned OOP and assembler, got addicted to introes. ! EOTEXT ! def setup ! super ! @model = AEditor::Model::Caretaker.new ! @model.load(TEXT) ! @view = AEditor::View::Caretaker.new(@model) ! @model.attach(@view) ! @view.cursor_x, @view.cursor_y = 0, 0 ! @view.scroll_x, @view.scroll_y = 0, 0 ! @view.resize(10, 4) ! end ! def teardown ! super ! @model.check_integrity ! @view.check_integrity ! end ! def exercise1(expected_x, expected_y, expected_res=true) ! res = @view.search_down ! assert_equal(expected_y, @view.cursor_y) ! assert_equal(expected_x, @view.cursor_x) ! assert_equal(expected_res, res) ! end ! def test_typical1 ! assert_equal(2, @view.search_init("a ")) ! exercise1(15, 2) ! exercise1(30, 3) ! exercise1(30, 3, false) ! end ! def test_typical2 ! assert_equal(2, @view.search_init("AMOS")) ! exercise1(40, 0) ! exercise1(0, 1) ! exercise1(0, 1, false) ! end ! end Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.49 retrieving revision 1.50 diff -C2 -d -r1.49 -r1.50 *** core.rb 23 Jan 2005 09:40:27 -0000 1.49 --- core.rb 23 Jan 2005 12:57:17 -0000 1.50 *************** *** 633,636 **** --- 633,657 ---- @cursor_y = res[0] if res.size > 0 end + def search_init(text) + @search_pattern = text + + @search_results = [] + @model.text.scan(@search_pattern) do + @search_results << [$~.begin(0), $~.end(0)] + end + @search_results.size + end + def search_down + cb = @model.p2b(xy2p(@cursor_x, @cursor_y), @cursor_y) + @search_results.each do |b1, b2| + if b1 > cb + px, y = @model.b2p(b1) + x = py2x(px, y) + @cursor_x, @cursor_y = x, y + return true + end + end + false + end def collapse(y1, y2) check_integer(y1) From neoneye at rubyforge.org Sun Jan 23 08:20:58 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 08:20:59 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb test_core.rb Message-ID: <200501231320.j0NDKwdS008812@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv8807 Modified Files: core.rb test_core.rb Log Message: multiline searches are now possible Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** test_core.rb 23 Jan 2005 12:57:17 -0000 1.40 --- test_core.rb 23 Jan 2005 13:20:56 -0000 1.41 *************** *** 1363,1383 **** @view.check_integrity end ! def exercise1(expected_x, expected_y, expected_res=true) ! res = @view.search_down ! assert_equal(expected_y, @view.cursor_y) ! assert_equal(expected_x, @view.cursor_x) ! assert_equal(expected_res, res) end def test_typical1 assert_equal(2, @view.search_init("a ")) ! exercise1(15, 2) ! exercise1(30, 3) ! exercise1(30, 3, false) end def test_typical2 assert_equal(2, @view.search_init("AMOS")) ! exercise1(40, 0) ! exercise1(0, 1) ! exercise1(0, 1, false) end end --- 1363,1398 ---- @view.check_integrity end ! def exercise1(exp_cx, exp_cy, exp_sx, exp_sy) ! assert_equal(true, @view.search_down) ! assert_equal(exp_cy, @view.cursor_y) ! assert_equal(exp_cx, @view.cursor_x) ! assert_equal(exp_sy, @view.sel_y) ! assert_equal(exp_sx, @view.sel_x) ! end ! def exercise2(exp_cx, exp_cy) ! assert_equal(false, @view.search_down) ! assert_equal(exp_cy, @view.cursor_y) ! assert_equal(exp_cx, @view.cursor_x) end def test_typical1 assert_equal(2, @view.search_init("a ")) ! exercise1(17, 2, 15, 2) ! exercise1(32, 3, 30, 3) ! exercise2(32, 3) end def test_typical2 assert_equal(2, @view.search_init("AMOS")) ! exercise1(44, 0, 40, 0) ! exercise1(4, 1, 0, 1) ! exercise2(4, 1) ! end ! def test_typical3 ! assert_equal(1, @view.search_init(/IDE.*OOP/um)) ! exercise1(13, 4, 18, 1) ! exercise2(13, 4) ! end ! def test_typeerror1 ! e = assert_raise(TypeError) { @view.search_init(nil) } ! assert_match("String or Regexp", e.message) end end Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** core.rb 23 Jan 2005 12:57:17 -0000 1.50 --- core.rb 23 Jan 2005 13:20:56 -0000 1.51 *************** *** 273,276 **** --- 273,278 ---- @sel_x, @sel_y = 0, 0 @sel_mode = false + @search_pattern = '' + @search_results = [] sync_lines end *************** *** 633,639 **** @cursor_y = res[0] if res.size > 0 end ! def search_init(text) ! @search_pattern = text ! @search_results = [] @model.text.scan(@search_pattern) do --- 635,643 ---- @cursor_y = res[0] if res.size > 0 end ! def search_init(pattern) ! unless pattern.kind_of?(String) or pattern.kind_of?(Regexp) ! raise TypeError, "must be either String or Regexp" ! end ! @search_pattern = pattern @search_results = [] @model.text.scan(@search_pattern) do *************** *** 646,652 **** @search_results.each do |b1, b2| if b1 > cb ! px, y = @model.b2p(b1) ! x = py2x(px, y) ! @cursor_x, @cursor_y = x, y return true end --- 650,660 ---- @search_results.each do |b1, b2| if b1 > cb ! px1, y1 = @model.b2p(b1) ! x1 = py2x(px1, y1) ! @sel_x, @sel_y = x1, y1 ! px2, y2 = @model.b2p(b2) ! x2 = py2x(px2, y2) ! @cursor_x, @cursor_y = x2, y2 ! @sel_mode = true return true end From neoneye at rubyforge.org Sun Jan 23 08:57:53 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 08:57:54 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb core.rb Message-ID: <200501231357.j0NDvrdS009179@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv9163 Modified Files: main_tui.rb core.rb Log Message: We can now interactively search for something.. but using the text on the clipboard.. This is only an intermediate solution.. until I get a better user-interface. Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -d -r1.58 -r1.59 *** main_tui.rb 23 Jan 2005 09:40:27 -0000 1.58 --- main_tui.rb 23 Jan 2005 13:57:51 -0000 1.59 *************** *** 157,160 **** --- 157,164 ---- when 271 @view.move_to_linebegin + when 21 # ctrl-u use clipboard as find pattern + @view.search_init(@view.selection) + when 267 # F3 + @view.search_down when 266 dump_statistics Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.51 retrieving revision 1.52 diff -C2 -d -r1.51 -r1.52 *** core.rb 23 Jan 2005 13:20:56 -0000 1.51 --- core.rb 23 Jan 2005 13:57:51 -0000 1.52 *************** *** 647,650 **** --- 647,651 ---- end def search_down + # TODO: in case the model has been changed then sync find cb = @model.p2b(xy2p(@cursor_x, @cursor_y), @cursor_y) @search_results.each do |b1, b2| From neoneye at rubyforge.org Sun Jan 23 10:05:20 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 10:05:21 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb main_tui.rb test_core.rb Message-ID: <200501231505.j0NF5KdS013161@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv13137 Modified Files: core.rb main_tui.rb test_core.rb Log Message: Now we can search backwards with Shift+F3. cleaned up code slightly. Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -d -r1.59 -r1.60 *** main_tui.rb 23 Jan 2005 13:57:51 -0000 1.59 --- main_tui.rb 23 Jan 2005 15:05:18 -0000 1.60 *************** *** 158,164 **** @view.move_to_linebegin when 21 # ctrl-u use clipboard as find pattern ! @view.search_init(@view.selection) when 267 # F3 @view.search_down when 266 dump_statistics --- 158,166 ---- @view.move_to_linebegin when 21 # ctrl-u use clipboard as find pattern ! @view.search_init(@selection_text) when 267 # F3 @view.search_down + when 277 # Shift-F3 + @view.search_up when 266 dump_statistics Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -d -r1.41 -r1.42 *** test_core.rb 23 Jan 2005 13:20:56 -0000 1.41 --- test_core.rb 23 Jan 2005 15:05:18 -0000 1.42 *************** *** 1363,1367 **** @view.check_integrity end ! def exercise1(exp_cx, exp_cy, exp_sx, exp_sy) assert_equal(true, @view.search_down) assert_equal(exp_cy, @view.cursor_y) --- 1363,1367 ---- @view.check_integrity end ! def exercise_down(exp_cx, exp_cy, exp_sx, exp_sy) assert_equal(true, @view.search_down) assert_equal(exp_cy, @view.cursor_y) *************** *** 1370,1394 **** assert_equal(exp_sx, @view.sel_x) end ! def exercise2(exp_cx, exp_cy) assert_equal(false, @view.search_down) assert_equal(exp_cy, @view.cursor_y) assert_equal(exp_cx, @view.cursor_x) end ! def test_typical1 assert_equal(2, @view.search_init("a ")) ! exercise1(17, 2, 15, 2) ! exercise1(32, 3, 30, 3) ! exercise2(32, 3) end ! def test_typical2 assert_equal(2, @view.search_init("AMOS")) ! exercise1(44, 0, 40, 0) ! exercise1(4, 1, 0, 1) ! exercise2(4, 1) end ! def test_typical3 assert_equal(1, @view.search_init(/IDE.*OOP/um)) ! exercise1(13, 4, 18, 1) ! exercise2(13, 4) end def test_typeerror1 --- 1370,1394 ---- assert_equal(exp_sx, @view.sel_x) end ! def exercise_down_bottom(exp_cx, exp_cy) assert_equal(false, @view.search_down) assert_equal(exp_cy, @view.cursor_y) assert_equal(exp_cx, @view.cursor_x) end ! def test_typical_down1 assert_equal(2, @view.search_init("a ")) ! exercise_down(17, 2, 15, 2) ! exercise_down(32, 3, 30, 3) ! exercise_down_bottom(32, 3) end ! def test_typical_down2 assert_equal(2, @view.search_init("AMOS")) ! exercise_down(44, 0, 40, 0) ! exercise_down(4, 1, 0, 1) ! exercise_down_bottom(4, 1) end ! def test_typical_down3 assert_equal(1, @view.search_init(/IDE.*OOP/um)) ! exercise_down(13, 4, 18, 1) ! exercise_down_bottom(13, 4) end def test_typeerror1 *************** *** 1396,1399 **** --- 1396,1449 ---- assert_match("String or Regexp", e.message) end + def exercise_up(exp_cx, exp_cy, exp_sx, exp_sy) + assert_equal(true, @view.search_up) + assert_equal(exp_cy, @view.cursor_y) + assert_equal(exp_cx, @view.cursor_x) + assert_equal(exp_sy, @view.sel_y) + assert_equal(exp_sx, @view.sel_x) + end + def exercise_up_top(exp_cx, exp_cy) + assert_equal(false, @view.search_up) + assert_equal(exp_cy, @view.cursor_y) + assert_equal(exp_cx, @view.cursor_x) + end + def test_typical_up1 + @view.cursor_x, @view.cursor_y = 53, 4 + assert_equal(5, @view.search_init("o ")) + exercise_up(43, 4, 45, 4) + exercise_up(23, 3, 25, 3) + exercise_up(4, 3, 6, 3) + exercise_up(48, 2, 50, 2) + exercise_up(13, 2, 15, 2) + exercise_up_top(13, 2) + end end + + class TestViewReplace < Test::Unit::TestCase + TEXT = <<-EOTEXT.gsub(/^\s*/, '') + I began programming on an Amiga500 with AMOS. + AMOS had it's own IDE where multiple lines could be + collapsed into a single line. Later I switched to + Turbo Pascal, which also were a nice environment. + I learned OOP and assembler, got addicted to introes. + EOTEXT + def setup + super + @model = AEditor::Model::Caretaker.new + @model.load(TEXT) + @view = AEditor::View::Caretaker.new(@model) + @model.attach(@view) + @view.cursor_x, @view.cursor_y = 0, 0 + @view.scroll_x, @view.scroll_y = 0, 0 + @view.resize(10, 4) + end + def teardown + super + @model.check_integrity + @view.check_integrity + end + def test_1 + # TODO: implement me + end + end \ No newline at end of file Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.52 retrieving revision 1.53 diff -C2 -d -r1.52 -r1.53 *** core.rb 23 Jan 2005 13:57:51 -0000 1.52 --- core.rb 23 Jan 2005 15:05:18 -0000 1.53 *************** *** 490,493 **** --- 490,503 ---- sx end + # convert from visual-x, abs-y to byte + def vxay2b(x, y) + @model.p2b(xy2p(x, y), y) + end + # convert from byte to visual-x, abs-y + def b2vxay(b) + px, y = @model.b2p(b) + x = py2x(px, y) + [x, y] + end def insert(utf8_string) ary = utf8_string.unpack("U*") *************** *** 578,583 **** def selection return '' unless @sel_mode ! sb = @model.p2b(xy2p(@sel_x, @sel_y), @sel_y) ! cb = @model.p2b(xy2p(@cursor_x, @cursor_y), @cursor_y) min, max = [sb, cb].sort txt = @model.text[min, max-min] --- 588,593 ---- def selection return '' unless @sel_mode ! sb = vxay2b(@sel_x, @sel_y) ! cb = vxay2b(@cursor_x, @cursor_y) min, max = [sb, cb].sort txt = @model.text[min, max-min] *************** *** 590,595 **** @sel_mode = false ! sb = @model.p2b(xy2p(@sel_x, @sel_y), @sel_y) ! cb = @model.p2b(xy2p(@cursor_x, @cursor_y), @cursor_y) min, max = [sb, cb].sort --- 600,605 ---- @sel_mode = false ! sb = vxay2b(@sel_x, @sel_y) ! cb = vxay2b(@cursor_x, @cursor_y) min, max = [sb, cb].sort *************** *** 636,639 **** --- 646,650 ---- end def search_init(pattern) + $logger.info "view search init, pattern=#{pattern.inspect}" unless pattern.kind_of?(String) or pattern.kind_of?(Regexp) raise TypeError, "must be either String or Regexp" *************** *** 641,660 **** @search_pattern = pattern @search_results = [] ! @model.text.scan(@search_pattern) do @search_results << [$~.begin(0), $~.end(0)] end @search_results.size end def search_down # TODO: in case the model has been changed then sync find ! cb = @model.p2b(xy2p(@cursor_x, @cursor_y), @cursor_y) @search_results.each do |b1, b2| if b1 > cb ! px1, y1 = @model.b2p(b1) ! x1 = py2x(px1, y1) ! @sel_x, @sel_y = x1, y1 ! px2, y2 = @model.b2p(b2) ! x2 = py2x(px2, y2) ! @cursor_x, @cursor_y = x2, y2 @sel_mode = true return true --- 652,683 ---- @search_pattern = pattern @search_results = [] ! @model.text.scan(pattern) do @search_results << [$~.begin(0), $~.end(0)] end + $logger.debug "number of search results = #{@search_results.size} " @search_results.size end def search_down + $logger.info "view search down" # TODO: in case the model has been changed then sync find ! cb = vxay2b(@cursor_x, @cursor_y) @search_results.each do |b1, b2| if b1 > cb ! @sel_x, @sel_y = b2vxay(b1) ! @cursor_x, @cursor_y = b2vxay(b2) ! @sel_mode = true ! return true ! end ! end ! false ! end ! def search_up ! $logger.info "view search up" ! # TODO: in case the model has been changed then sync find ! cb = vxay2b(@cursor_x, @cursor_y) ! @search_results.reverse_each do |b1, b2| ! if b1 < cb ! @cursor_x, @cursor_y = b2vxay(b1) ! @sel_x, @sel_y = b2vxay(b2) @sel_mode = true return true From neoneye at rubyforge.org Sun Jan 23 10:13:32 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 10:13:33 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES README TODO Message-ID: <200501231513.j0NFDWdS016535@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv16528 Modified Files: CHANGES README TODO Log Message: mentioned that search are now working. Index: README =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** README 23 Jan 2005 09:37:41 -0000 1.6 --- README 23 Jan 2005 15:13:30 -0000 1.7 *************** *** 47,50 **** --- 47,53 ---- F1 ............. insert a fullwidth glyph (〜) F2 ............. dump statistics to log + F3 ............. search down + shift F3 ....... search up + ctrl u ......... use clipboard data as search pattern ctrl k k ....... toggle bookmark ctrl k p ....... goto prev bookmark Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** CHANGES 23 Jan 2005 12:57:17 -0000 1.24 --- CHANGES 23 Jan 2005 15:13:30 -0000 1.25 *************** *** 1,4 **** 23-01-2005 Neoneye ! * Early code for search. * Delete key is now working. --- 1,4 ---- 23-01-2005 Neoneye ! * Search up and down with multiline patterns now works. * Delete key is now working. Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** TODO 23 Jan 2005 09:37:41 -0000 1.28 --- TODO 23 Jan 2005 15:13:30 -0000 1.29 *************** *** 5,8 **** --- 5,10 ---- more edit-operations: C: search, replace. + X: word left/right. + Y: match parenthesis. D: multibuffer. F: rectangular selections. From neoneye at rubyforge.org Sun Jan 23 10:41:28 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 10:41:29 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb test_core.rb Message-ID: <200501231541.j0NFfSdS017413@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv17405 Modified Files: core.rb test_core.rb Log Message: View#model_notify now flushes the search results. Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** test_core.rb 23 Jan 2005 15:05:18 -0000 1.42 --- test_core.rb 23 Jan 2005 15:41:26 -0000 1.43 *************** *** 1392,1395 **** --- 1392,1402 ---- exercise_down_bottom(13, 4) end + def test_sync1 + assert_equal(1, @view.search_init(/\d+/u)) + @model.load("mov ax,13;\nint 10;") + exercise_down(9, 0, 7, 0) + exercise_down(6, 1, 4, 1) + exercise_down_bottom(6, 1) + end def test_typeerror1 e = assert_raise(TypeError) { @view.search_init(nil) } Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.53 retrieving revision 1.54 diff -C2 -d -r1.53 -r1.54 *** core.rb 23 Jan 2005 15:05:18 -0000 1.53 --- core.rb 23 Jan 2005 15:41:26 -0000 1.54 *************** *** 274,278 **** @sel_mode = false @search_pattern = '' ! @search_results = [] sync_lines end --- 274,278 ---- @sel_mode = false @search_pattern = '' ! @search_results = nil sync_lines end *************** *** 323,326 **** --- 323,327 ---- @lines[i].dirty = true end + @search_results = nil # clear search results end def canvas=(can) *************** *** 651,664 **** end @search_pattern = pattern @search_results = [] ! @model.text.scan(pattern) do @search_results << [$~.begin(0), $~.end(0)] end ! $logger.debug "number of search results = #{@search_results.size} " @search_results.size end def search_down $logger.info "view search down" - # TODO: in case the model has been changed then sync find cb = vxay2b(@cursor_x, @cursor_y) @search_results.each do |b1, b2| --- 652,671 ---- end @search_pattern = pattern + @search_results = nil + search_sync + @search_results.size + end + def search_sync + return if @search_results @search_results = [] ! @model.text.scan(@search_pattern) do @search_results << [$~.begin(0), $~.end(0)] end ! $logger.info "view search_sync, results = #{@search_results.size}" @search_results.size end def search_down + search_sync $logger.info "view search down" cb = vxay2b(@cursor_x, @cursor_y) @search_results.each do |b1, b2| *************** *** 673,678 **** end def search_up $logger.info "view search up" - # TODO: in case the model has been changed then sync find cb = vxay2b(@cursor_x, @cursor_y) @search_results.reverse_each do |b1, b2| --- 680,685 ---- end def search_up + search_sync $logger.info "view search up" cb = vxay2b(@cursor_x, @cursor_y) @search_results.reverse_each do |b1, b2| From neoneye at rubyforge.org Sun Jan 23 10:53:57 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 10:53:59 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES README core.rb main_tui.rb ncursesw.rb test_core.rb Message-ID: <200501231553.j0NFrvdS017757@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv17737 Modified Files: CHANGES README core.rb main_tui.rb ncursesw.rb test_core.rb Log Message: View#move_top, View#move_bottom added. Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.60 retrieving revision 1.61 diff -C2 -d -r1.60 -r1.61 *** main_tui.rb 23 Jan 2005 15:05:18 -0000 1.60 --- main_tui.rb 23 Jan 2005 15:53:55 -0000 1.61 *************** *** 179,182 **** --- 179,186 ---- when 410 @view.resize(width, height) + when 800 + @view.move_top + when 801 + @view.move_bottom else $logger.debug "dispatch unknown key, event=#{event}" Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -d -r1.43 -r1.44 *** test_core.rb 23 Jan 2005 15:41:26 -0000 1.43 --- test_core.rb 23 Jan 2005 15:53:55 -0000 1.44 *************** *** 1302,1305 **** --- 1302,1331 ---- end + class TestViewMoveTopBottom < Test::Unit::TestCase + def setup + super + @model = AEditor::Model::Caretaker.new + @model.load((1..15).to_a.join("\n")) + @view = AEditor::View::Caretaker.new(@model) + @model.attach(@view) + @view.cursor_x, @view.cursor_y = 1, 7 + @view.scroll_x, @view.scroll_y = 0, 5 + @view.resize(10, 3) + end + def teardown + super + @model.check_integrity + @view.check_integrity + end + def test_top1 + @view.move_top + assert_equal(0, @view.cursor_y) + end + def test_bottom1 + @view.move_bottom + assert_equal(14, @view.cursor_y) + end + end + class TestViewSelectionGet < Test::Unit::TestCase def setup Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.54 retrieving revision 1.55 diff -C2 -d -r1.54 -r1.55 *** core.rb 23 Jan 2005 15:41:26 -0000 1.54 --- core.rb 23 Jan 2005 15:53:55 -0000 1.55 *************** *** 578,581 **** --- 578,589 ---- end end + def move_top + $logger.info "view operation top" + @cursor_y = 0 + end + def move_bottom + $logger.info "view operation bottom" + @cursor_y = visible.last + end def selection_begin $logger.info "view operation selection begin" Index: README =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** README 23 Jan 2005 15:13:30 -0000 1.7 --- README 23 Jan 2005 15:53:55 -0000 1.8 *************** *** 45,48 **** --- 45,50 ---- pageup ......... move a page up pagedown ....... move a page down + ctrl pageup .... move to top + ctrl pagedown .. move to bottom F1 ............. insert a fullwidth glyph (〜) F2 ............. dump statistics to log Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** CHANGES 23 Jan 2005 15:13:30 -0000 1.25 --- CHANGES 23 Jan 2005 15:53:55 -0000 1.26 *************** *** 1,3 **** --- 1,4 ---- 23-01-2005 Neoneye + * Move to buffer top/bottom added. * Search up and down with multiline patterns now works. * Delete key is now working. Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** ncursesw.rb 22 Jan 2005 23:09:56 -0000 1.17 --- ncursesw.rb 23 Jan 2005 15:53:55 -0000 1.18 *************** *** 212,216 **** "\eOQ" => 266, "\eOR" => 267, ! "\eOS" => 268 } def getch --- 212,218 ---- "\eOQ" => 266, "\eOR" => 267, ! "\eOS" => 268, ! "\e[5;5~" => 800, # TODO: what code does these have? ! "\e[6;5~" => 801, # TODO: what code does these have? } def getch From neoneye at rubyforge.org Sun Jan 23 11:27:38 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 11:27:39 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb main_tui.rb ncursesw.rb test_core.rb Message-ID: <200501231627.j0NGRcdS020030@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv20012 Modified Files: core.rb main_tui.rb ncursesw.rb test_core.rb Log Message: View#move_wordleft are now working (for a single line). Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -d -r1.61 -r1.62 *** main_tui.rb 23 Jan 2005 15:53:55 -0000 1.61 --- main_tui.rb 23 Jan 2005 16:27:36 -0000 1.62 *************** *** 183,186 **** --- 183,190 ---- when 801 @view.move_bottom + when 803 + @view.move_wordleft + when 802 + @view.move_wordright else $logger.debug "dispatch unknown key, event=#{event}" Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.44 retrieving revision 1.45 diff -C2 -d -r1.44 -r1.45 *** test_core.rb 23 Jan 2005 15:53:55 -0000 1.44 --- test_core.rb 23 Jan 2005 16:27:36 -0000 1.45 *************** *** 1328,1331 **** --- 1328,1374 ---- end + class TestViewMoveWordright < Test::Unit::TestCase + def setup + super + @model = AEditor::Model::Caretaker.new + @model.load("empty") + @view = AEditor::View::Caretaker.new(@model) + @model.attach(@view) + @view.cursor_x, @view.cursor_y = 0, 0 + @view.scroll_x, @view.scroll_y = 0, 0 + @view.resize(10, 3) + end + def teardown + super + @model.check_integrity + @view.check_integrity + end + def exercise1(input_str, times_right, expected_x) + @model.load(input_str) + ary_x = [@view.cursor_x] + ary_return = [] + times_right.times do + ary_return << @view.move_wordright + ary_x << @view.cursor_x + end + assert_equal(expected_x, ary_x) + ary_return + end + def test_typical1 + ret = exercise1("abcd ef g\nxyz", 6, [0, 4, 5, 7, 8, 9, 9]) + assert_equal([true, true, true, true, true, false], ret) + end + def test_typical2 + @canvas = MockCanvas.new(4, 2) # this sets tabsize=8 + @view.resize(4, 2) + @view.canvas, @canvas.view = @canvas, @view + exercise1("\tab\t\nxyz", 4, [0, 8, 10, 16, 16]) + end + def test_typical3 + exercise1("obj.call_me(42, 3.4, count)\nxyz", 15, + [0, 3, 4, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 26, 27, 27]) + end + end + class TestViewSelectionGet < Test::Unit::TestCase def setup Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** core.rb 23 Jan 2005 15:53:55 -0000 1.55 --- core.rb 23 Jan 2005 16:27:36 -0000 1.56 *************** *** 586,589 **** --- 586,605 ---- @cursor_y = visible.last end + def move_wordleft + $logger.info "view operation wordleft" + end + def move_wordright + $logger.info "view operation wordright" + oldx = @cursor_x + b1 = vxay2b(@cursor_x, @cursor_y) + move_to_lineend + b2 = vxay2b(@cursor_x, @cursor_y) + @cursor_x = oldx + text = @model.text[b1, b2-b1] + m = /\A(?: \s+ | \w+ | . )/ux.match(text) + return false unless m + @cursor_x, @cursor_y = b2vxay(m.end(0) + b1) + true + end def selection_begin $logger.info "view operation selection begin" Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** ncursesw.rb 23 Jan 2005 15:53:55 -0000 1.18 --- ncursesw.rb 23 Jan 2005 16:27:36 -0000 1.19 *************** *** 215,218 **** --- 215,220 ---- "\e[5;5~" => 800, # TODO: what code does these have? "\e[6;5~" => 801, # TODO: what code does these have? + "\e[1;5C" => 802, # TODO: what code does these have? + "\e[1;5D" => 803, # TODO: what code does these have? } def getch From neoneye at rubyforge.org Sun Jan 23 11:40:11 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 11:40:12 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES README TODO core.rb test_core.rb Message-ID: <200501231640.j0NGeBdS020327@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv20313 Modified Files: CHANGES README TODO core.rb test_core.rb Log Message: word left/right added. Index: README =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** README 23 Jan 2005 15:53:55 -0000 1.8 --- README 23 Jan 2005 16:40:09 -0000 1.9 *************** *** 40,46 **** letters ........ insert text backspace ...... erase char left of cursor (or selection) ! delete ......... erase char right of cursor home ........... move cursor to linebegin end ............ move cursor to lineend pageup ......... move a page up pagedown ....... move a page down --- 40,48 ---- letters ........ insert text backspace ...... erase char left of cursor (or selection) ! delete ......... erase char right of cursor (or selection) home ........... move cursor to linebegin end ............ move cursor to lineend + ctrl left ...... move word left + ctrl right ..... move word right pageup ......... move a page up pagedown ....... move a page down Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** TODO 23 Jan 2005 15:13:30 -0000 1.29 --- TODO 23 Jan 2005 16:40:09 -0000 1.30 *************** *** 5,9 **** more edit-operations: C: search, replace. - X: word left/right. Y: match parenthesis. D: multibuffer. --- 5,8 ---- Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** CHANGES 23 Jan 2005 15:53:55 -0000 1.26 --- CHANGES 23 Jan 2005 16:40:09 -0000 1.27 *************** *** 1,3 **** --- 1,4 ---- 23-01-2005 Neoneye + * Move word left/right imported from aeditor1.x. * Move to buffer top/bottom added. * Search up and down with multiline patterns now works. Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -d -r1.45 -r1.46 *** test_core.rb 23 Jan 2005 16:27:36 -0000 1.45 --- test_core.rb 23 Jan 2005 16:40:09 -0000 1.46 *************** *** 1371,1374 **** --- 1371,1418 ---- end + class TestViewMoveWordleft < Test::Unit::TestCase + def setup + super + @model = AEditor::Model::Caretaker.new + @model.load("empty") + @view = AEditor::View::Caretaker.new(@model) + @model.attach(@view) + @view.cursor_x, @view.cursor_y = 0, 0 + @view.scroll_x, @view.scroll_y = 0, 0 + @view.resize(10, 3) + end + def teardown + super + @model.check_integrity + @view.check_integrity + end + def exercise1(input_str, times_left, expected_x) + model = @model.load(input_str) + @view.move_to_lineend + ary_x = [@view.cursor_x] + ary_return = [] + times_left.times do + ary_return << @view.move_wordleft + ary_x.unshift(@view.cursor_x) + end + assert_equal(expected_x, ary_x) + ary_return + end + def test_typical1 + ret = exercise1("abcd ef g\nxyz", 6, [0, 0, 4, 5, 7, 8, 9]) + assert_equal([true, true, true, true, true, false], ret) + end + def test_typical2 + exercise1("obj.call_me(42, 3.4, count)\nxyz", 15, + [0, 0, 3, 4, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 26, 27]) + end + def test_typical3 + @canvas = MockCanvas.new(4, 2) # this sets tabsize=8 + @view.resize(4, 2) + @view.canvas, @canvas.view = @canvas, @view + exercise1("\tab\t\nxyz", 4, [0, 0, 8, 10, 16]) + end + end + class TestViewSelectionGet < Test::Unit::TestCase def setup Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** core.rb 23 Jan 2005 16:27:36 -0000 1.56 --- core.rb 23 Jan 2005 16:40:09 -0000 1.57 *************** *** 588,591 **** --- 588,598 ---- def move_wordleft $logger.info "view operation wordleft" + b1 = vxay2b(0, @cursor_y) + b2 = vxay2b(@cursor_x, @cursor_y) + text = @model.text[b1, b2-b1] + m = /(?: \s+ | \w+ | . )\z/ux.match(text) + return false unless m + @cursor_x, @cursor_y = b2vxay(m.begin(0) + b1) + true end def move_wordright From neoneye at rubyforge.org Sun Jan 23 12:00:33 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sun Jan 23 12:00:35 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES README Message-ID: <200501231700.j0NH0XdS022110@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv22106 Modified Files: CHANGES README Log Message: ready for release Index: README =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** README 23 Jan 2005 16:40:09 -0000 1.9 --- README 23 Jan 2005 17:00:31 -0000 1.10 *************** *** 1,11 **** ! AEDITOR 2.1 =========== This is a new incarnation of AEditor, still barebones, ! still very rough. No syntax coloring, no multibuffer, no advanced edit strategies (it has a new datastructure that rocks). ! No undo/redo. ! If we don't consider the code for wrapping libncursesw, then ! the core of the editor only takes up 860 lines of ruby code. This README is written with this editor. --- 1,10 ---- ! AEDITOR 2.2 =========== This is a new incarnation of AEditor, still barebones, ! slow, still very rough. No syntax coloring, no multibuffer, no advanced edit strategies (it has a new datastructure that rocks). ! No undo/redo. If we don't consider the code for wrapping libncursesw, ! then the core of the editor only takes up 1200 lines of ruby code. This README is written with this editor. *************** *** 15,19 **** screenshot: ! http://aeditor.rubyforge.org/aeditor_shots/045.png --- 14,18 ---- screenshot: ! http://aeditor.rubyforge.org/aeditor_shots/053.png Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** CHANGES 23 Jan 2005 16:40:09 -0000 1.27 --- CHANGES 23 Jan 2005 17:00:31 -0000 1.28 *************** *** 1,3 **** --- 1,4 ---- 23-01-2005 Neoneye + * released version 2.2 (future release). * Move word left/right imported from aeditor1.x. * Move to buffer top/bottom added. From neoneye at rubyforge.org Mon Jan 24 15:42:49 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Mon Jan 24 15:42:51 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source run Message-ID: <200501242042.j0OKgndS025525@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv25516 Added Files: run Log Message: we want to run main in an limited environment --- NEW FILE: run --- #!/usr/bin/ruby cmd = "bash -c 'ulimit -d 5000 -l 5000 -s 5000 -v 5000; ruby main_tui.rb'" system(cmd) From neoneye at rubyforge.org Mon Jan 24 16:06:26 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Mon Jan 24 16:06:27 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source run Message-ID: <200501242106.j0OL6QdS027486@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv27469 Modified Files: run Log Message: lets use some less restrictive limits Index: run =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/run,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** run 24 Jan 2005 20:42:46 -0000 1.1 --- run 24 Jan 2005 21:06:24 -0000 1.2 *************** *** 1,3 **** #!/usr/bin/ruby ! cmd = "bash -c 'ulimit -d 5000 -l 5000 -s 5000 -v 5000; ruby main_tui.rb'" system(cmd) --- 1,4 ---- #!/usr/bin/ruby ! #cmd = "bash -c 'ulimit -d 20000 -l 20000 -s 10000 -v 5000; ruby main_tui.rb'" ! cmd = "bash -c 'ulimit -d 10000 -s 10000; ruby main_tui.rb'" system(cmd) From neoneye at rubyforge.org Mon Jan 24 16:38:14 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Mon Jan 24 16:38:15 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb Message-ID: <200501242138.j0OLcEdS028493@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv28479 Modified Files: main_tui.rb Log Message: it seems as the memory grows a lot every time I insert a char. Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.62 retrieving revision 1.63 diff -C2 -d -r1.62 -r1.63 *** main_tui.rb 23 Jan 2005 16:27:36 -0000 1.62 --- main_tui.rb 24 Jan 2005 21:38:12 -0000 1.63 *************** *** 1,4 **** --- 1,13 ---- require 'core' + module Kernel + def dump_memory_info(msg=nil) + msg ||= "-" + IO.popen("ps u -p #$$") {|io| + $logger.info("meminfo #{msg}\n" + io.read) + } + end + end + class MainTUI < AEditor::Canvas::Base NEONEYE = [0xff2e, 0xff25, 0xff2f, *************** *** 45,48 **** --- 54,58 ---- def self.run(filename) require 'ncursesw' + dump_memory_info CursesCanvas.open do |c| oldtitle = c.get_title || "AEditor has exited" *************** *** 60,63 **** --- 70,74 ---- @view.update dump_statistics + dump_memory_info loop do event = @canvas.getch *************** *** 84,87 **** --- 95,101 ---- @view.scroll_to_cursor @view.update + dump_memory_info("before GC") + GC.start + dump_memory_info("after GC") end @canvas.clear *************** *** 356,359 **** --- 370,374 ---- begin $logger.info "program begin." + dump_memory_info MainTUI.run(ARGV.empty? ? nil : ARGV[0]) rescue Exception => e *************** *** 366,370 **** "#{e.class} #{e.message}\n" + bt end $logger.info "program end." $logger.close ! end \ No newline at end of file --- 381,386 ---- "#{e.class} #{e.message}\n" + bt end + dump_memory_info $logger.info "program end." $logger.close ! end From neoneye at rubyforge.org Mon Jan 24 18:14:31 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Mon Jan 24 18:14:33 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES Message-ID: <200501242314.j0ONEVdS001854@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv1845 Modified Files: CHANGES Log Message: status for tonight Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** CHANGES 23 Jan 2005 17:00:31 -0000 1.28 --- CHANGES 24 Jan 2005 23:14:29 -0000 1.29 *************** *** 1,2 **** --- 1,8 ---- + 24-01-2005 Neoneye + * investigated memory-grow problem. + main_tui.rb's #update, does a 100kbytes grow per update if 11x33, + 200kbytes grow if 27x33, 300kbytes grow if 45x33. + Really bad. There must be a leak of some kind. + 23-01-2005 Neoneye * released version 2.2 (future release). From neoneye at rubyforge.org Mon Jan 24 18:20:15 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Mon Jan 24 18:20:16 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb Message-ID: <200501242320.j0ONKFdS002010@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv1987 Modified Files: core.rb Log Message: flgr suggested instead of $~ to use Regexp.last_match. Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.57 retrieving revision 1.58 diff -C2 -d -r1.57 -r1.58 *** core.rb 23 Jan 2005 16:40:09 -0000 1.57 --- core.rb 24 Jan 2005 23:20:13 -0000 1.58 *************** *** 691,695 **** @search_results = [] @model.text.scan(@search_pattern) do ! @search_results << [$~.begin(0), $~.end(0)] end $logger.info "view search_sync, results = #{@search_results.size}" --- 691,696 ---- @search_results = [] @model.text.scan(@search_pattern) do ! @search_results << [ ! Regexp.last_match.begin(0), Regexp.last_match.end(0)] end $logger.info "view search_sync, results = #{@search_results.size}" From neoneye at rubyforge.org Tue Jan 25 02:31:29 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Tue Jan 25 02:31:31 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses - New directory Message-ID: <200501250731.j0P7VTdS009548@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv9544/canvas_ncurses Log Message: Directory /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses added to the repository From neoneye at rubyforge.org Tue Jan 25 02:32:46 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Tue Jan 25 02:32:48 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses extconf.rb main.rb tui.c Message-ID: <200501250732.j0P7WkdS009582@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv9564 Added Files: extconf.rb main.rb tui.c Log Message: initial preparations for wrapping libncursesw.so through C.. rather than via ruby-dl (which seems to make the memory grow like crazy). --- NEW FILE: extconf.rb --- require 'mkmf' create_makefile("Tui") --- NEW FILE: main.rb --- require 'Tui' tui = Tui.new p tui --- NEW FILE: tui.c --- #include "ruby.h" VALUE c_tui; void Init_Tui() { c_tui = rb_define_class("Tui", rb_cObject); //rb_define_method(cTest, "initialize", t_init, 0); //rb_define_method(cTest, "add", t_add, 1); } From neoneye at rubyforge.org Tue Jan 25 17:28:04 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Tue Jan 25 17:28:06 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses main.rb tui.c Message-ID: <200501252228.j0PMS4dS030289@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv30277 Modified Files: main.rb tui.c Log Message: why doesn't initscr() works? Index: main.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/main.rb,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** main.rb 25 Jan 2005 07:32:44 -0000 1.1 --- main.rb 25 Jan 2005 22:28:02 -0000 1.2 *************** *** 1,5 **** require 'Tui' ! tui = Tui.new ! p tui \ No newline at end of file --- 1,7 ---- require 'Tui' ! Tui.init ! sleep(5) ! ! Tui.close \ No newline at end of file Index: tui.c =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/tui.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** tui.c 25 Jan 2005 07:32:44 -0000 1.1 --- tui.c 25 Jan 2005 22:28:02 -0000 1.2 *************** *** 1,9 **** #include "ruby.h" ! VALUE c_tui; void Init_Tui() { ! c_tui = rb_define_class("Tui", rb_cObject); ! //rb_define_method(cTest, "initialize", t_init, 0); ! //rb_define_method(cTest, "add", t_add, 1); } \ No newline at end of file --- 1,21 ---- #include "ruby.h" + #include "ncurses.h" + + VALUE tui_init(VALUE self) { + /*WINDOW *window = initscr();*/ + return Qnil; + } + + VALUE tui_close(VALUE self) { + /*endwin();*/ + return Qnil; + } ! ! VALUE m_tui; void Init_Tui() { ! m_tui = rb_define_module("Tui"); ! rb_define_module_function(m_tui, "init", tui_init, 0); ! rb_define_module_function(m_tui, "close", tui_close, 0); } \ No newline at end of file From neoneye at rubyforge.org Wed Jan 26 16:42:34 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Wed Jan 26 16:42:35 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses extconf.rb tui.c Message-ID: <200501262142.j0QLgYdS015576@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv15567 Modified Files: extconf.rb tui.c Log Message: we can now link with ncursesw (finally). Index: extconf.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/extconf.rb,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** extconf.rb 25 Jan 2005 07:32:44 -0000 1.1 --- extconf.rb 26 Jan 2005 21:42:32 -0000 1.2 *************** *** 1,2 **** require 'mkmf' ! create_makefile("Tui") \ No newline at end of file --- 1,17 ---- require 'mkmf' ! ! dir_config('ncursesw', '/home/neoneye/include', '/home/neoneye/lib') ! ! ok = true ! ! unless have_header('ncursesw/ncurses.h') ! ok = false ! end ! ! unless have_library('ncursesw', 'wcolor_set') ! ok = false ! end ! ! if ok ! create_makefile("Tui") ! end Index: tui.c =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/tui.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tui.c 25 Jan 2005 22:28:02 -0000 1.2 --- tui.c 26 Jan 2005 21:42:32 -0000 1.3 *************** *** 3,12 **** VALUE tui_init(VALUE self) { ! /*WINDOW *window = initscr();*/ return Qnil; } VALUE tui_close(VALUE self) { ! /*endwin();*/ return Qnil; } --- 3,13 ---- VALUE tui_init(VALUE self) { ! WINDOW *window; ! window = initscr(); return Qnil; } VALUE tui_close(VALUE self) { ! endwin(); return Qnil; } From neoneye at rubyforge.org Wed Jan 26 17:50:08 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Wed Jan 26 17:50:09 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses main.rb tui.c Message-ID: <200501262250.j0QMo8dS018690@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv18677 Modified Files: main.rb tui.c Log Message: experiments with outputtting to the display Index: main.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/main.rb,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** main.rb 25 Jan 2005 22:28:02 -0000 1.2 --- main.rb 26 Jan 2005 22:50:05 -0000 1.3 *************** *** 1,7 **** require 'Tui' ! Tui.init ! sleep(5) ! Tui.close \ No newline at end of file --- 1,9 ---- require 'Tui' ! if Tui.init ! Tui.print "hello world" ! sleep(2) ! Tui.close ! end \ No newline at end of file Index: tui.c =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/tui.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tui.c 26 Jan 2005 21:42:32 -0000 1.3 --- tui.c 26 Jan 2005 22:50:05 -0000 1.4 *************** *** 5,9 **** WINDOW *window; window = initscr(); ! return Qnil; } --- 5,38 ---- WINDOW *window; window = initscr(); ! ! if(has_colors() == 0) { ! endwin(); ! return Qfalse; ! } ! start_color(); ! ! keypad(window, 1); ! cbreak(); ! noecho(); ! nonl(); ! meta(window, 1); ! ! ! init_pair(1, 3, 4); /* yellow on dark-blue ....... text */ ! init_pair(2, 7, 4); /* white on dark-blue ........ keyword */ ! init_pair(3, 0, 6); /* black on bright-blue ...... selection */ ! init_pair(4, 2, 4); /* green on dark-blue ........ strings */ ! init_pair(5, 3, 0); /* yellow on black ........... fold */ ! init_pair(6, 0, 4); /* black on dark-blue ........ borders */ ! init_pair(7, 6, 4); /* bright-blue on dark-blue .. - */ ! init_pair(8, 4, 4); /* blue on blue .............. tabs */ ! ! wcolor_set(window, 1, 0); ! ! clear(); ! move(0, 0); ! addnstr("hi", 2); ! ! return Qtrue; } *************** *** 13,16 **** --- 42,52 ---- } + VALUE tui_print(VALUE self, VALUE text) { + const char *str; + str = STR2CSTR(text); + addstr(str); + return Qnil; + } + VALUE m_tui; *************** *** 20,22 **** --- 56,59 ---- rb_define_module_function(m_tui, "init", tui_init, 0); rb_define_module_function(m_tui, "close", tui_close, 0); + rb_define_module_function(m_tui, "print", tui_print, 1); } \ No newline at end of file From neoneye at rubyforge.org Wed Jan 26 18:05:03 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Wed Jan 26 18:05:04 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses tui.c Message-ID: <200501262305.j0QN53dS020559@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv20540 Modified Files: tui.c Log Message: this extension is now beginning to work Index: tui.c =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/tui.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tui.c 26 Jan 2005 22:50:05 -0000 1.4 --- tui.c 26 Jan 2005 23:05:01 -0000 1.5 *************** *** 1,9 **** #include "ruby.h" #include "ncurses.h" VALUE tui_init(VALUE self) { WINDOW *window; - window = initscr(); if(has_colors() == 0) { endwin(); --- 1,13 ---- #include "ruby.h" #include "ncurses.h" + #include "locale.h" VALUE tui_init(VALUE self) { WINDOW *window; + setlocale(LC_ALL, ""); + + window = initscr(); + if(has_colors() == 0) { endwin(); *************** *** 33,36 **** --- 37,41 ---- move(0, 0); addnstr("hi", 2); + refresh(); return Qtrue; From neoneye at rubyforge.org Wed Jan 26 18:18:22 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Wed Jan 26 18:18:23 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses main.rb tui.c Message-ID: <200501262318.j0QNIMdS020829@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv20823 Modified Files: main.rb tui.c Log Message: added a bunch more of functions Index: main.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/main.rb,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** main.rb 26 Jan 2005 22:50:05 -0000 1.3 --- main.rb 26 Jan 2005 23:18:20 -0000 1.4 *************** *** 2,6 **** --- 2,11 ---- if Tui.init + Tui.move(0, 0) Tui.print "hello world" + + Tui.move(20, 2) + Tui.print "im on (20,2)" + Tui.refresh sleep(2) Index: tui.c =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/tui.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** tui.c 26 Jan 2005 23:05:01 -0000 1.5 --- tui.c 26 Jan 2005 23:18:20 -0000 1.6 *************** *** 3,9 **** #include "locale.h" VALUE tui_init(VALUE self) { - WINDOW *window; - setlocale(LC_ALL, ""); --- 3,10 ---- #include "locale.h" + WINDOW *window; + + VALUE tui_init(VALUE self) { setlocale(LC_ALL, ""); *************** *** 42,45 **** --- 43,47 ---- } + VALUE tui_close(VALUE self) { endwin(); *************** *** 47,50 **** --- 49,79 ---- } + + VALUE tui_refresh(VALUE self) { + refresh(); + return Qnil; + } + + + VALUE tui_width(VALUE self) { + return INT2FIX(window->_maxx + 1); + } + + + VALUE tui_height(VALUE self) { + return INT2FIX(window->_maxy + 1); + } + + + VALUE tui_move(VALUE self, VALUE x, VALUE y) { + int ix; + int iy; + ix = FIX2INT(x); + iy = FIX2INT(y); + move(iy, ix); + return Qnil; + } + + VALUE tui_print(VALUE self, VALUE text) { const char *str; *************** *** 59,64 **** void Init_Tui() { m_tui = rb_define_module("Tui"); ! rb_define_module_function(m_tui, "init", tui_init, 0); ! rb_define_module_function(m_tui, "close", tui_close, 0); ! rb_define_module_function(m_tui, "print", tui_print, 1); } \ No newline at end of file --- 88,97 ---- void Init_Tui() { m_tui = rb_define_module("Tui"); ! rb_define_module_function(m_tui, "init", tui_init, 0); ! rb_define_module_function(m_tui, "close", tui_close, 0); ! rb_define_module_function(m_tui, "move", tui_move, 2); ! rb_define_module_function(m_tui, "print", tui_print, 1); ! rb_define_module_function(m_tui, "refresh", tui_refresh, 0); ! rb_define_module_function(m_tui, "width", tui_width, 0); ! rb_define_module_function(m_tui, "height", tui_height, 0); } \ No newline at end of file From neoneye at rubyforge.org Wed Jan 26 18:23:13 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Wed Jan 26 18:23:14 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses tui.c Message-ID: <200501262323.j0QNNDdS020911@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv20905 Modified Files: tui.c Log Message: except for getch and wcwidth.. then everything is converted. Index: tui.c =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/tui.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** tui.c 26 Jan 2005 23:18:20 -0000 1.6 --- tui.c 26 Jan 2005 23:23:11 -0000 1.7 *************** *** 50,53 **** --- 50,65 ---- + VALUE tui_clear(VALUE self) { + clear(); + return Qnil; + } + + + VALUE tui_clrtoeol(VALUE self) { + clrtoeol(); + return Qnil; + } + + VALUE tui_refresh(VALUE self) { refresh(); *************** *** 84,87 **** --- 96,108 ---- + VALUE tui_setcolor(VALUE self, VALUE pen) { + int ipen; + ipen = FIX2INT(pen); + set_wcolor(window, pen, 0); + return Qnil; + } + + + VALUE m_tui; *************** *** 92,95 **** --- 113,119 ---- rb_define_module_function(m_tui, "move", tui_move, 2); rb_define_module_function(m_tui, "print", tui_print, 1); + rb_define_module_function(m_tui, "set_color", tui_setcolor, 1); + rb_define_module_function(m_tui, "clear", tui_clear, 0); + rb_define_module_function(m_tui, "clear_to_eol", tui_clrtoeol, 0); rb_define_module_function(m_tui, "refresh", tui_refresh, 0); rb_define_module_function(m_tui, "width", tui_width, 0); From neoneye at rubyforge.org Wed Jan 26 18:26:47 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Wed Jan 26 18:26:48 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES Message-ID: <200501262326.j0QNQldS020992@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv20978 Modified Files: CHANGES Log Message: status for tonight Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** CHANGES 24 Jan 2005 23:14:29 -0000 1.29 --- CHANGES 26 Jan 2005 23:26:45 -0000 1.30 *************** *** 1,2 **** --- 1,6 ---- + 26-01-2005 Neoneye + * early code for extension that wraps both ncursesw and setlocale, + only getch() and wcwidth() needs to get wrapped now. + 24-01-2005 Neoneye * investigated memory-grow problem. From neoneye at rubyforge.org Thu Jan 27 02:29:54 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Thu Jan 27 02:29:56 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses main.rb tui.c Message-ID: <200501270729.j0R7TsdS027405@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv27400 Modified Files: main.rb tui.c Log Message: added the remaining functions Index: main.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/main.rb,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** main.rb 26 Jan 2005 23:18:20 -0000 1.4 --- main.rb 27 Jan 2005 07:29:52 -0000 1.5 *************** *** 9,13 **** Tui.refresh ! sleep(2) Tui.close --- 9,13 ---- Tui.refresh ! Tui.getch Tui.close Index: tui.c =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/tui.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** tui.c 26 Jan 2005 23:23:11 -0000 1.7 --- tui.c 27 Jan 2005 07:29:52 -0000 1.8 *************** *** 104,107 **** --- 104,128 ---- + VALUE tui_getch(VALUE self) { + int code; + code = getch(); + return INT2FIX(code); + } + + + VALUE tui_nodelay(VALUE self, VALUE b) { + nodelay(window, (b == Qtrue)); + return Qnil; + } + + + VALUE tui_wcwidth(VALUE self, VALUE glyph) { + long ig; + int res; + ig = FIX2LONG(glyph); + res = wcwidth(ig); + return INT2FIX(res); + } + VALUE m_tui; *************** *** 116,121 **** --- 137,145 ---- rb_define_module_function(m_tui, "clear", tui_clear, 0); rb_define_module_function(m_tui, "clear_to_eol", tui_clrtoeol, 0); + rb_define_module_function(m_tui, "getch", tui_getch, 0); + rb_define_module_function(m_tui, "nodelay", tui_nodelay, 1); rb_define_module_function(m_tui, "refresh", tui_refresh, 0); rb_define_module_function(m_tui, "width", tui_width, 0); rb_define_module_function(m_tui, "height", tui_height, 0); + rb_define_module_function(m_tui, "wcwidth", tui_wcwidth, 1); } \ No newline at end of file From neoneye at rubyforge.org Thu Jan 27 16:16:59 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Thu Jan 27 16:17:01 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses tui.c Message-ID: <200501272116.j0RLGxdS005051@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv5034 Modified Files: tui.c Log Message: adjustments trying to get main_tui.rb using this lib. Index: tui.c =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/tui.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** tui.c 27 Jan 2005 07:29:52 -0000 1.8 --- tui.c 27 Jan 2005 21:16:57 -0000 1.9 *************** *** 99,103 **** int ipen; ipen = FIX2INT(pen); ! set_wcolor(window, pen, 0); return Qnil; } --- 99,103 ---- int ipen; ipen = FIX2INT(pen); ! wcolor_set(window, pen, 0); return Qnil; } From neoneye at rubyforge.org Thu Jan 27 16:19:58 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Thu Jan 27 16:19:58 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source ncursesw.rb main_tui.rb Message-ID: <200501272119.j0RLJwdS005139@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv5128 Modified Files: ncursesw.rb main_tui.rb Log Message: experiments getting the new canvas lib working Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -d -r1.63 -r1.64 *** main_tui.rb 24 Jan 2005 21:38:12 -0000 1.63 --- main_tui.rb 27 Jan 2005 21:19:55 -0000 1.64 *************** *** 68,75 **** --- 68,79 ---- def event_loop @view.resize(width, height) + dump_memory_info("before update") @view.update + @canvas.refresh + dump_memory_info("after update") dump_statistics dump_memory_info loop do + GC.disable event = @canvas.getch break if event == 24 *************** *** 94,99 **** end @view.scroll_to_cursor @view.update ! dump_memory_info("before GC") GC.start dump_memory_info("after GC") --- 98,106 ---- end @view.scroll_to_cursor + dump_memory_info("before update") @view.update ! @canvas.refresh ! dump_memory_info("after update, before GC") ! GC.enable GC.start dump_memory_info("after GC") *************** *** 320,324 **** end end ! @canvas.render_row2( vy, --- 327,332 ---- end end ! ! #=begin @canvas.render_row2( vy, *************** *** 328,331 **** --- 336,340 ---- width+6 ) + #=end end def cursor_show(x, y) *************** *** 337,341 **** @tabsize - (x % @tabsize) else ! LibC.wcwidth(glyph) end end --- 346,351 ---- @tabsize - (x % @tabsize) else ! #LibC.wcwidth(glyph) ! @canvas.measure_width(glyph) end end Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** ncursesw.rb 23 Jan 2005 16:27:36 -0000 1.19 --- ncursesw.rb 27 Jan 2005 21:19:55 -0000 1.20 *************** *** 6,9 **** --- 6,132 ---- + require 'Tui.so' + + class CursesCanvas + def initialize + #$logger.info "cc init1" + unless Tui.init + raise 'cannot init' + end + #$logger.info "cc init2" + @glyph2str = {} + end + def close + Tui.close + end + def self.open(&block) + i = self.new + begin + block.call(i) + ensure + i.close + end + end + def width + Tui.width + end + def height + Tui.height + end + alias :w :width + alias :h :height + def set_color(color) + Tui.set_color(color) + end + def print(utf8_string) + Tui.print(utf8_string) + end + SEQ2KEY = { + "\eOF" => 270, # TODO: what code does these have? + "\eOH" => 271, # TODO: what code does these have? + "\eOP" => 265, + "\eOQ" => 266, + "\eOR" => 267, + "\eOS" => 268, + "\e[5;5~" => 800, # TODO: what code does these have? + "\e[6;5~" => 801, # TODO: what code does these have? + "\e[1;5C" => 802, # TODO: what code does these have? + "\e[1;5D" => 803, # TODO: what code does these have? + } + def getch + key = Tui.getch + return key if key != 27 + sequence = '' + Tui.nodelay(true) + while key >= 0 and key <= 255 + sequence << key.chr + key = Tui.getch + end + Tui.nodelay(false) + key = SEQ2KEY[sequence] || -1 + #$logger.info "curses getch sequence #{sequence.inspect} -> #{key}" + key + end + def clear + Tui.clear + end + def move(x, y) + Tui.move(x, y) + end + def clear_to_eol + Tui.clear_to_eol + end + def refresh + Tui.refresh + end + def printxy(x, y, str) + move(x, y) + print(str) + end + def render_row(y, str) + move(0, y) + clear_to_eol + print(str) unless str.empty? + #clear_to_eol + end + def print_glyph(glyph) + str = @glyph2str[glyph] + unless str + str = [glyph].pack('U') + @glyph2str[glyph] = str + end + print(str) + end + def render_row2(y, glyphs, pens, i, n) + raise 'error' if glyphs.size != pens.size + move(0, y) + clear_to_eol + n.times do + set_color(pens[i]) + print_glyph(glyphs[i]) + i += 1 + end + end + def measure_width(glyph) + Tui.wcwidth(glyph) + end + def set_title(title) + $stdout.puts "\033]0;#{title}\007" + end + # returns either nil or text + def get_title + wid = ENV['WINDOWID'] + return nil unless wid + output = ''; + IO.popen("xprop -id #{wid}") do |io| + while s=io.gets; output << s; end + end + m = output.match(/^WM_NAME\(STRING\) = "(.*)"/) + return m ? m[1] : nil + end + end + + + =begin require 'dl/import' require 'dl/struct' *************** *** 307,319 **** end end if $0 == __FILE__ puts "lets measure the width of unicode chars: halfwidth, fullwidth" ! LibC.setlocale(6, '') # LC_ALL == 6 #p LibC.measure_width(65) #p LibC.measure_width(0x2500) #p LibC.measure_width(0x3000) ! puts "press enter to goto the curses test" ! gets res = [] --- 430,443 ---- end end + =end if $0 == __FILE__ puts "lets measure the width of unicode chars: halfwidth, fullwidth" ! #LibC.setlocale(6, '') # LC_ALL == 6 #p LibC.measure_width(65) #p LibC.measure_width(0x2500) #p LibC.measure_width(0x3000) ! #puts "press enter to goto the curses test" ! #gets res = [] *************** *** 322,329 **** c.printxy(0, 0, " File | Edit | Buffers | View |") c.printxy(c.w-7, 0, "| Help ") ! c.box(0, 1, c.w, c.h-2) c.printxy(2, 1, " main.rb ") c.printxy(0, c.h-1, "Press F1 for help.") ! c.box(10, 5, c.w-20, c.h-10) c.printxy(12, 5, " About AEditor ") c.printxy(c.w-15, 5, "[x]") --- 446,453 ---- c.printxy(0, 0, " File | Edit | Buffers | View |") c.printxy(c.w-7, 0, "| Help ") ! #c.box(0, 1, c.w, c.h-2) c.printxy(2, 1, " main.rb ") c.printxy(0, c.h-1, "Press F1 for help.") ! #c.box(10, 5, c.w-20, c.h-10) c.printxy(12, 5, " About AEditor ") c.printxy(c.w-15, 5, "[x]") *************** *** 333,339 **** #c.printxy(11, 9, Curses.curses_version) ! c.printxy(11, 9, ! "colors=#{Curses.COLORS} " + ! "escdelay=#{Curses.ESCDELAY}") c.move(11, 10) c.refresh --- 457,463 ---- #c.printxy(11, 9, Curses.curses_version) ! #c.printxy(11, 9, ! # "colors=#{Curses.COLORS} " + ! # "escdelay=#{Curses.ESCDELAY}") c.move(11, 10) c.refresh From neoneye at rubyforge.org Thu Jan 27 18:15:33 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Thu Jan 27 18:15:34 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO ncursesw.rb Message-ID: <200501272315.j0RNFXdS011001@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv10926 Modified Files: CHANGES TODO ncursesw.rb Log Message: status for tonight Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** CHANGES 26 Jan 2005 23:26:45 -0000 1.30 --- CHANGES 27 Jan 2005 23:15:31 -0000 1.31 *************** *** 1,2 **** --- 1,7 ---- + 27-01-2005 Neoneye + * I can do some rendering via this new tui extension.. + but somehow the background color is weird. + At least memory stays on 7.3 mbytes, and 3.4 mbytes stack. + 26-01-2005 Neoneye * early code for extension that wraps both ncursesw and setlocale, Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** TODO 23 Jan 2005 16:40:09 -0000 1.30 --- TODO 27 Jan 2005 23:15:31 -0000 1.31 *************** *** 1,2 **** --- 1,6 ---- + make the Tui.so file work (so I can get rid of the + ruby-dl wrapper, which consumes too much memory). + + render with colors. B: faster via caching. Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** ncursesw.rb 27 Jan 2005 21:19:55 -0000 1.20 --- ncursesw.rb 27 Jan 2005 23:15:31 -0000 1.21 *************** *** 5,18 **** end ! require 'Tui.so' class CursesCanvas def initialize - #$logger.info "cc init1" unless Tui.init raise 'cannot init' end - #$logger.info "cc init2" @glyph2str = {} end --- 5,16 ---- end ! #=begin require 'Tui.so' class CursesCanvas def initialize unless Tui.init raise 'cannot init' end @glyph2str = {} end *************** *** 69,72 **** --- 67,71 ---- end def clear + set_color(1) Tui.clear end *************** *** 100,103 **** --- 99,103 ---- def render_row2(y, glyphs, pens, i, n) raise 'error' if glyphs.size != pens.size + set_color(1) move(0, y) clear_to_eol *************** *** 125,129 **** --- 125,151 ---- return m ? m[1] : nil end + def box(x, y, w, h) + str_h = [0x2500].pack("U*") + str_v = [0x2502].pack("U*") + str_tl = [0x250c].pack("U*") + str_tr = [0x2510].pack("U*") + str_bl = [0x2514].pack("U*") + str_br = [0x2518].pack("U*") + (y+1).upto(y+h-2) do |i| + printxy(x, i, str_v) + printxy(x+w-1, i, str_v) + end + (x+1).upto(x+w-2) do |i| + printxy(i, y, str_h) + printxy(i, y+h-1, str_h) + end + printxy(x, y, str_tl) + printxy(x+w-1, y, str_tr) + printxy(x, y+h-1, str_bl) + printxy(x+w-1, y+h-1, str_br) + end end + =begin + =end *************** *** 387,390 **** --- 409,413 ---- def render_row2(y, glyphs, pens, i, n) raise 'error' if glyphs.size != pens.size + set_color(1) move(0, y) clear_to_eol *************** *** 429,433 **** --- 452,460 ---- return m ? m[1] : nil end + def measure_width(glyph) + LibC.wcwidth(glyph) + end end + =begin =end *************** *** 446,453 **** c.printxy(0, 0, " File | Edit | Buffers | View |") c.printxy(c.w-7, 0, "| Help ") ! #c.box(0, 1, c.w, c.h-2) c.printxy(2, 1, " main.rb ") c.printxy(0, c.h-1, "Press F1 for help.") ! #c.box(10, 5, c.w-20, c.h-10) c.printxy(12, 5, " About AEditor ") c.printxy(c.w-15, 5, "[x]") --- 473,480 ---- c.printxy(0, 0, " File | Edit | Buffers | View |") c.printxy(c.w-7, 0, "| Help ") ! c.box(0, 1, c.w, c.h-2) c.printxy(2, 1, " main.rb ") c.printxy(0, c.h-1, "Press F1 for help.") ! c.box(10, 5, c.w-20, c.h-10) c.printxy(12, 5, " About AEditor ") c.printxy(c.w-15, 5, "[x]") From neoneye at rubyforge.org Fri Jan 28 15:19:55 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 28 15:19:57 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb ncursesw.rb Message-ID: <200501282019.j0SKJtdS020975@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv20968 Modified Files: main_tui.rb ncursesw.rb Log Message: now colors are working Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.64 retrieving revision 1.65 diff -C2 -d -r1.64 -r1.65 *** main_tui.rb 27 Jan 2005 21:19:55 -0000 1.64 --- main_tui.rb 28 Jan 2005 20:19:53 -0000 1.65 *************** *** 69,74 **** @view.resize(width, height) dump_memory_info("before update") @view.update ! @canvas.refresh dump_memory_info("after update") dump_statistics --- 69,75 ---- @view.resize(width, height) dump_memory_info("before update") + @canvas.clear @view.update ! #@canvas.refresh dump_memory_info("after update") dump_statistics *************** *** 99,104 **** @view.scroll_to_cursor dump_memory_info("before update") @view.update ! @canvas.refresh dump_memory_info("after update, before GC") GC.enable --- 100,106 ---- @view.scroll_to_cursor dump_memory_info("before update") + #@canvas.clear @view.update ! #@canvas.refresh dump_memory_info("after update, before GC") GC.enable Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** ncursesw.rb 27 Jan 2005 23:15:31 -0000 1.21 --- ncursesw.rb 28 Jan 2005 20:19:53 -0000 1.22 *************** *** 67,71 **** end def clear ! set_color(1) Tui.clear end --- 67,71 ---- end def clear ! #set_color(1) Tui.clear end *************** *** 99,105 **** def render_row2(y, glyphs, pens, i, n) raise 'error' if glyphs.size != pens.size ! set_color(1) move(0, y) clear_to_eol n.times do set_color(pens[i]) --- 99,106 ---- def render_row2(y, glyphs, pens, i, n) raise 'error' if glyphs.size != pens.size ! #set_color(1) move(0, y) clear_to_eol + #move(0, y) n.times do set_color(pens[i]) From neoneye at rubyforge.org Fri Jan 28 15:19:55 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 28 15:19:57 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses tui.c Message-ID: <200501282019.j0SKJtdS020980@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv20968/canvas_ncurses Modified Files: tui.c Log Message: now colors are working Index: tui.c =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/tui.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** tui.c 27 Jan 2005 21:16:57 -0000 1.9 --- tui.c 28 Jan 2005 20:19:53 -0000 1.10 *************** *** 3,13 **** #include "locale.h" - WINDOW *window; - - VALUE tui_init(VALUE self) { setlocale(LC_ALL, ""); ! window = initscr(); if(has_colors() == 0) { --- 3,18 ---- #include "locale.h" VALUE tui_init(VALUE self) { setlocale(LC_ALL, ""); ! initscr(); ! ! ! /*intrflush(stdscr, 0);*/ ! keypad(stdscr, TRUE); /* enable keyboard mapping */ ! nonl(); /* tell curses not to do NL->CR/NL on output */ ! cbreak(); /* take input chars one at a time, no wait for \n */ ! noecho(); /* don't echo input */ ! meta(stdscr, 1); if(has_colors() == 0) { *************** *** 16,42 **** } start_color(); ! ! keypad(window, 1); ! cbreak(); ! noecho(); ! nonl(); ! meta(window, 1); ! ! init_pair(1, 3, 4); /* yellow on dark-blue ....... text */ ! init_pair(2, 7, 4); /* white on dark-blue ........ keyword */ ! init_pair(3, 0, 6); /* black on bright-blue ...... selection */ ! init_pair(4, 2, 4); /* green on dark-blue ........ strings */ ! init_pair(5, 3, 0); /* yellow on black ........... fold */ ! init_pair(6, 0, 4); /* black on dark-blue ........ borders */ ! init_pair(7, 6, 4); /* bright-blue on dark-blue .. - */ ! init_pair(8, 4, 4); /* blue on blue .............. tabs */ ! wcolor_set(window, 1, 0); ! clear(); move(0, 0); addnstr("hi", 2); ! refresh(); return Qtrue; --- 21,42 ---- } start_color(); ! ! init_pair(1, COLOR_YELLOW, COLOR_BLUE); /* text */ ! init_pair(2, COLOR_WHITE, COLOR_BLUE); /* keyword */ ! init_pair(3, COLOR_BLACK, COLOR_MAGENTA); /* selection */ ! init_pair(4, COLOR_GREEN, COLOR_BLUE); /* strings */ ! init_pair(5, COLOR_YELLOW, COLOR_BLACK); /* fold */ ! init_pair(6, COLOR_BLACK, COLOR_BLUE); /* borders */ ! init_pair(7, COLOR_MAGENTA, COLOR_BLUE); /* - */ ! init_pair(8, COLOR_BLUE, COLOR_BLUE); /* tabs */ ! color_set(1, 0); ! bkgdset(1); ! /*clear(); move(0, 0); addnstr("hi", 2); ! refresh();*/ return Qtrue; *************** *** 69,78 **** VALUE tui_width(VALUE self) { ! return INT2FIX(window->_maxx + 1); } VALUE tui_height(VALUE self) { ! return INT2FIX(window->_maxy + 1); } --- 69,78 ---- VALUE tui_width(VALUE self) { ! return INT2FIX(stdscr->_maxx + 1); } VALUE tui_height(VALUE self) { ! return INT2FIX(stdscr->_maxy + 1); } *************** *** 99,103 **** int ipen; ipen = FIX2INT(pen); ! wcolor_set(window, pen, 0); return Qnil; } --- 99,103 ---- int ipen; ipen = FIX2INT(pen); ! color_set(ipen, 0); return Qnil; } *************** *** 112,116 **** VALUE tui_nodelay(VALUE self, VALUE b) { ! nodelay(window, (b == Qtrue)); return Qnil; } --- 112,116 ---- VALUE tui_nodelay(VALUE self, VALUE b) { ! nodelay(stdscr, (b == Qtrue)); return Qnil; } From neoneye at rubyforge.org Fri Jan 28 15:24:31 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 28 15:24:32 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO Message-ID: <200501282024.j0SKOVdS021109@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv21093 Modified Files: CHANGES TODO Log Message: Tui.so is finally working acceptable Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** CHANGES 27 Jan 2005 23:15:31 -0000 1.31 --- CHANGES 28 Jan 2005 20:24:29 -0000 1.32 *************** *** 1,2 **** --- 1,6 ---- + 28-01-2005 Neoneye + * Now colors is rendered nice (again), previously it was rendered + with the ruby-dl wrapper... now its rendered with my extension. + 27-01-2005 Neoneye * I can do some rendering via this new tui extension.. Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** TODO 27 Jan 2005 23:15:31 -0000 1.31 --- TODO 28 Jan 2005 20:24:29 -0000 1.32 *************** *** 1,6 **** - make the Tui.so file work (so I can get rid of the - ruby-dl wrapper, which consumes too much memory). - - render with colors. B: faster via caching. --- 1,2 ---- From neoneye at rubyforge.org Fri Jan 28 15:47:42 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 28 15:47:43 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses tui.c Message-ID: <200501282047.j0SKlgdS021749@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv21734/canvas_ncurses Modified Files: tui.c Log Message: confused MAGENTA with CYAN Index: tui.c =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses/tui.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** tui.c 28 Jan 2005 20:19:53 -0000 1.10 --- tui.c 28 Jan 2005 20:47:40 -0000 1.11 *************** *** 25,33 **** init_pair(1, COLOR_YELLOW, COLOR_BLUE); /* text */ init_pair(2, COLOR_WHITE, COLOR_BLUE); /* keyword */ ! init_pair(3, COLOR_BLACK, COLOR_MAGENTA); /* selection */ init_pair(4, COLOR_GREEN, COLOR_BLUE); /* strings */ init_pair(5, COLOR_YELLOW, COLOR_BLACK); /* fold */ init_pair(6, COLOR_BLACK, COLOR_BLUE); /* borders */ ! init_pair(7, COLOR_MAGENTA, COLOR_BLUE); /* - */ init_pair(8, COLOR_BLUE, COLOR_BLUE); /* tabs */ --- 25,33 ---- init_pair(1, COLOR_YELLOW, COLOR_BLUE); /* text */ init_pair(2, COLOR_WHITE, COLOR_BLUE); /* keyword */ ! init_pair(3, COLOR_BLACK, COLOR_CYAN); /* selection */ init_pair(4, COLOR_GREEN, COLOR_BLUE); /* strings */ init_pair(5, COLOR_YELLOW, COLOR_BLACK); /* fold */ init_pair(6, COLOR_BLACK, COLOR_BLUE); /* borders */ ! init_pair(7, COLOR_CYAN, COLOR_BLUE); /* - */ init_pair(8, COLOR_BLUE, COLOR_BLUE); /* tabs */ From neoneye at rubyforge.org Fri Jan 28 15:56:04 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 28 15:56:06 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source extconf.rb tui.c Message-ID: <200501282056.j0SKu4dS021953@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv21936 Added Files: extconf.rb tui.c Log Message: moved extension to the working dir.. maybe I move it elsewhere later. --- NEW FILE: extconf.rb --- require 'mkmf' dir_config('ncursesw', '/home/neoneye/include', '/home/neoneye/lib') ok = true unless have_header('ncursesw/ncurses.h') ok = false end unless have_library('ncursesw', 'wcolor_set') ok = false end if ok create_makefile("Tui") end --- NEW FILE: tui.c --- #include "ruby.h" #include "ncurses.h" #include "locale.h" VALUE tui_init(VALUE self) { setlocale(LC_ALL, ""); initscr(); /*intrflush(stdscr, 0);*/ keypad(stdscr, TRUE); /* enable keyboard mapping */ nonl(); /* tell curses not to do NL->CR/NL on output */ cbreak(); /* take input chars one at a time, no wait for \n */ noecho(); /* don't echo input */ meta(stdscr, 1); if(has_colors() == 0) { endwin(); return Qfalse; } start_color(); init_pair(1, COLOR_YELLOW, COLOR_BLUE); /* text */ init_pair(2, COLOR_WHITE, COLOR_BLUE); /* keyword */ init_pair(3, COLOR_BLACK, COLOR_CYAN); /* selection */ init_pair(4, COLOR_GREEN, COLOR_BLUE); /* strings */ init_pair(5, COLOR_YELLOW, COLOR_BLACK); /* fold */ init_pair(6, COLOR_BLACK, COLOR_BLUE); /* borders */ init_pair(7, COLOR_CYAN, COLOR_BLUE); /* - */ init_pair(8, COLOR_BLUE, COLOR_BLUE); /* tabs */ color_set(1, 0); bkgdset(1); /*clear(); move(0, 0); addnstr("hi", 2); refresh();*/ return Qtrue; } VALUE tui_close(VALUE self) { endwin(); return Qnil; } VALUE tui_clear(VALUE self) { clear(); return Qnil; } VALUE tui_clrtoeol(VALUE self) { clrtoeol(); return Qnil; } VALUE tui_refresh(VALUE self) { refresh(); return Qnil; } VALUE tui_width(VALUE self) { return INT2FIX(stdscr->_maxx + 1); } VALUE tui_height(VALUE self) { return INT2FIX(stdscr->_maxy + 1); } VALUE tui_move(VALUE self, VALUE x, VALUE y) { int ix; int iy; ix = FIX2INT(x); iy = FIX2INT(y); move(iy, ix); return Qnil; } VALUE tui_print(VALUE self, VALUE text) { const char *str; str = STR2CSTR(text); addstr(str); return Qnil; } VALUE tui_setcolor(VALUE self, VALUE pen) { int ipen; ipen = FIX2INT(pen); color_set(ipen, 0); return Qnil; } VALUE tui_getch(VALUE self) { int code; code = getch(); return INT2FIX(code); } VALUE tui_nodelay(VALUE self, VALUE b) { nodelay(stdscr, (b == Qtrue)); return Qnil; } VALUE tui_wcwidth(VALUE self, VALUE glyph) { long ig; int res; ig = FIX2LONG(glyph); res = wcwidth(ig); return INT2FIX(res); } VALUE m_tui; void Init_Tui() { m_tui = rb_define_module("Tui"); rb_define_module_function(m_tui, "init", tui_init, 0); rb_define_module_function(m_tui, "close", tui_close, 0); rb_define_module_function(m_tui, "move", tui_move, 2); rb_define_module_function(m_tui, "print", tui_print, 1); rb_define_module_function(m_tui, "set_color", tui_setcolor, 1); rb_define_module_function(m_tui, "clear", tui_clear, 0); rb_define_module_function(m_tui, "clear_to_eol", tui_clrtoeol, 0); rb_define_module_function(m_tui, "getch", tui_getch, 0); rb_define_module_function(m_tui, "nodelay", tui_nodelay, 1); rb_define_module_function(m_tui, "refresh", tui_refresh, 0); rb_define_module_function(m_tui, "width", tui_width, 0); rb_define_module_function(m_tui, "height", tui_height, 0); rb_define_module_function(m_tui, "wcwidth", tui_wcwidth, 1); } From neoneye at rubyforge.org Fri Jan 28 15:57:53 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 28 15:57:53 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source/canvas_ncurses extconf.rb main.rb tui.c Message-ID: <200501282057.j0SKvrdS022055@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source/canvas_ncurses In directory rubyforge.org:/tmp/cvs-serv22042/canvas_ncurses Removed Files: extconf.rb main.rb tui.c Log Message: these files has been moved to the root dir --- extconf.rb DELETED --- --- main.rb DELETED --- --- tui.c DELETED --- From neoneye at rubyforge.org Fri Jan 28 16:00:22 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 28 16:00:23 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source ncursesw.rb Message-ID: <200501282100.j0SL0MdS023619@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv22144 Modified Files: ncursesw.rb Log Message: cleaned up code Index: ncursesw.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** ncursesw.rb 28 Jan 2005 20:19:53 -0000 1.22 --- ncursesw.rb 28 Jan 2005 21:00:20 -0000 1.23 *************** *** 5,9 **** end - #=begin require 'Tui.so' --- 5,8 ---- *************** *** 67,71 **** end def clear - #set_color(1) Tui.clear end --- 66,69 ---- *************** *** 99,106 **** def render_row2(y, glyphs, pens, i, n) raise 'error' if glyphs.size != pens.size - #set_color(1) move(0, y) clear_to_eol - #move(0, y) n.times do set_color(pens[i]) --- 97,102 ---- *************** *** 147,474 **** end end - =begin - =end - - - =begin - require 'dl/import' - require 'dl/struct' - module Curses - extend DL::Importable - dlload 'libncursesw.so' - - typealias 'NCURSES_SIZE_T', 'short' - typealias 'chtype', 'unsigned long' - typealias 'attr_t', 'chtype' - typealias 'bool', 'int' - - WINDOW = struct [ - # current cursor position - 'NCURSES_SIZE_T cury', - 'NCURSES_SIZE_T curx', - - # window location and size - # maximums of x and y, NOT window size - 'NCURSES_SIZE_T maxy', - 'NCURSES_SIZE_T maxx', - # screen coords of upper-left-hand corner - 'NCURSES_SIZE_T begy', - 'NCURSES_SIZE_T begx', - - # window state flags - 'short flags', - - # attribute tracking - 'attr_t attrs', # current attribute for non-space character - 'chtype bkgd', # current background char/attribute pair - - # option values set by user - 'bool notimeout', # no time out on function-key entry? - 'bool clear', # consider all data in the window invalid? - 'bool leaveok', # OK to not reset cursor on exit? - 'bool scroll', # OK to scroll this window? - 'bool idlok', # OK to use insert/delete line? - 'bool idcok', # OK to use insert/delete char? - 'bool immed', # window in immed mode? (not yet used) - 'bool sync', # window in sync mode? - 'bool use_keypad', # process function keys into KEY_ symbols? - 'int delay', # 0 = nodelay, <0 = blocking, >0 = delay - - # the actual line data - 'void *line', # TODO: ldat is used.. but what is ldat? - - # global screen state - 'NCURSES_SIZE_T regtop', # top line of scrolling region - 'NCURSES_SIZE_T regbottom', # bottom line of scrolling region - - # these are used only if this is a sub-window - 'int parx', # x coordinate of this window in parent - 'int pary', # y coordinate of this window in parent - # pointer to parent if a sub-window - 'void *parent', # TODO: this is a struct window * pointer - - # these are used only if this is a pad - 'NCURSES_SIZE_T pad_y', - 'NCURSES_SIZE_T pad_x', - 'NCURSES_SIZE_T pad_top', - 'NCURSES_SIZE_T pad_left', - 'NCURSES_SIZE_T pad_bottom', - 'NCURSES_SIZE_T pad_right', - - # real begy is _begy + _yoffset - 'NCURSES_SIZE_T yoffset' - ] - - # setup - extern 'void *initscr()' - extern 'int cbreak()' - extern 'int keypad(void *, bool)' - extern 'int noecho()' - extern 'int nonl()' - extern 'int raw()' - extern 'int meta(void *, bool)' - extern 'int nodelay(void *, bool)' - extern 'int keyok(int, bool)' - - extern 'bool has_colors()' - extern 'int start_color()' - extern 'int init_pair(short, short, short)' - extern 'int wcolor_set(void*, short, void*)' - extern 'void wbkgdset(void *, chtype)' - extern 'int wattrset(void *, int)' - def self.has_colors? - (has_colors != 0) - end - - # access global variables - Int = struct ["int value"] - COLORS_PTR = symbol 'COLORS' - ESCDELAY_PTR = symbol 'ESCDELAY' - def self.COLORS - Int.new(COLORS_PTR).value - end - def self.ESCDELAY - Int.new(ESCDELAY_PTR).value - end - - # teardown - extern 'int endwin()' - - # runtime - extern 'int clear()' - extern 'int addstr(const char *)' - #extern 'int add_wch(const cchar_t *)' - extern 'int getch()' - extern 'int refresh()' - extern 'int clrtoeol()' - extern 'int addnstr(const char *, int)' - extern 'int move(int, int)' - extern 'int refresh()' - end - - module LibC - extend DL::Importable - dlload 'libc.so.6' - extern 'void setlocale(int, const char *)' - - # this is a part of "wchar.h" - extern 'int wcwidth(long)' - extern 'int wcswidth(const long *, long)' - def self.measure_width(code) - #ptr = [code].pack('L*').to_ptr - #wcswidth(ptr, 1) - wcwidth(code) - end - end - - class CursesCanvas - def initialize - LibC.setlocale(6, '') # LC_ALL == 6 - @ptr = Curses.initscr - @ptr.free = nil - @window = Curses::WINDOW.new(@ptr) - unless Curses.has_colors? - raise "you term doesn't have colors. " + - "try 'setenv TERM xterm-color'." - end - Curses.start_color - Curses.keypad(@ptr, 1) # TODO: what does this do? - Curses.cbreak # TODO: what does this do? - Curses.noecho # TODO: what does this do? - Curses.nonl # TODO: what does this do? - Curses.meta(@ptr, 1) # force 8bit instead of 7bit - #Curses.raw # TODO: what does this do? - #Curses.nodelay(@ptr, 1) # TODO: what does this do? - - alloc_colors - Curses.wcolor_set(@ptr, 1, nil) - #Curses.wbkgdset(@ptr, 2) - #Curses.wattrset(@ptr, (5 << 10)) - - @glyph2str = {} - end - def alloc_colors - Curses.init_pair(1, 3, 4) # yellow on dark-blue ....... text - Curses.init_pair(2, 7, 4) # white on dark-blue ........ keyword - Curses.init_pair(3, 0, 6) # black on bright-blue ...... selection - Curses.init_pair(4, 2, 4) # green on dark-blue ........ strings - Curses.init_pair(5, 3, 0) # yellow on black ........... fold - Curses.init_pair(6, 0, 4) # black on dark-blue ........ borders - Curses.init_pair(7, 6, 4) # bright-blue on dark-blue .. - - Curses.init_pair(8, 4, 4) # blue on blue .............. tabs - end - private :alloc_colors - def set_color(color) - Curses.wcolor_set(@ptr, color, nil) - end - def close - Curses.endwin - end - def self.open(&block) - i = self.new - begin - block.call(i) - ensure - i.close - end - end - def width - @window.maxx+1 - end - def height - @window.maxy+1 - end - alias :w :width - alias :h :height - def print(utf8_string) - Curses.addnstr(utf8_string, utf8_string.size) - end - def puts(utf8_string) - s = utf8_string - Curses.addnstr(s, s.size) - end - def p(obj) - s = obj.inspect - Curses.addnstr(s, s.size) - end - SEQ2KEY = { - "\eOF" => 270, # TODO: what code does these have? - "\eOH" => 271, # TODO: what code does these have? - "\eOP" => 265, - "\eOQ" => 266, - "\eOR" => 267, - "\eOS" => 268, - "\e[5;5~" => 800, # TODO: what code does these have? - "\e[6;5~" => 801, # TODO: what code does these have? - "\e[1;5C" => 802, # TODO: what code does these have? - "\e[1;5D" => 803, # TODO: what code does these have? - } - def getch - key = Curses.getch - return key if key != 27 - sequence = '' - Curses.nodelay(@ptr, 1) - while key >= 0 and key <= 255 - sequence << key.chr - key = Curses.getch - end - Curses.nodelay(@ptr, 0) - key = SEQ2KEY[sequence] || -1 - $logger.info "curses getch sequence #{sequence.inspect} -> #{key}" - key - end - def clear - Curses.clear - end - def move(x, y) - Curses.move(y, x) - end - def clear_to_eol - Curses.clrtoeol - end - def refresh - Curses.refresh - end - def printxy(x, y, str) - move(x, y) - print(str) - end - def render_row(y, str) - move(0, y) - clear_to_eol - print(str) unless str.empty? - #clear_to_eol - end - def print_glyph(glyph) - str = @glyph2str[glyph] - unless str - str = [glyph].pack('U') - @glyph2str[glyph] = str - end - print(str) - end - def render_row2(y, glyphs, pens, i, n) - raise 'error' if glyphs.size != pens.size - set_color(1) - move(0, y) - clear_to_eol - n.times do - set_color(pens[i]) - print_glyph(glyphs[i]) - i += 1 - end - end - def box(x, y, w, h) - str_h = [0x2500].pack("U*") - str_v = [0x2502].pack("U*") - str_tl = [0x250c].pack("U*") - str_tr = [0x2510].pack("U*") - str_bl = [0x2514].pack("U*") - str_br = [0x2518].pack("U*") - (y+1).upto(y+h-2) do |i| - printxy(x, i, str_v) - printxy(x+w-1, i, str_v) - end - (x+1).upto(x+w-2) do |i| - printxy(i, y, str_h) - printxy(i, y+h-1, str_h) - end - printxy(x, y, str_tl) - printxy(x+w-1, y, str_tr) - printxy(x, y+h-1, str_bl) - printxy(x+w-1, y+h-1, str_br) - end - def set_title(title) - $stdout.puts "\033]0;#{title}\007" - end - # returns either nil or text - def get_title - wid = ENV['WINDOWID'] - return nil unless wid - output = ''; - IO.popen("xprop -id #{wid}") do |io| - while s=io.gets; output << s; end - end - m = output.match(/^WM_NAME\(STRING\) = "(.*)"/) - return m ? m[1] : nil - end - def measure_width(glyph) - LibC.wcwidth(glyph) - end - end - =begin - =end if $0 == __FILE__ - puts "lets measure the width of unicode chars: halfwidth, fullwidth" - #LibC.setlocale(6, '') # LC_ALL == 6 - #p LibC.measure_width(65) - #p LibC.measure_width(0x2500) - #p LibC.measure_width(0x3000) - #puts "press enter to goto the curses test" - #gets - - res = [] - CursesCanvas.open do |c| c.printxy(0, 0, " File | Edit | Buffers | View |") --- 143,148 ---- From neoneye at rubyforge.org Fri Jan 28 16:20:48 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 28 16:20:50 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb main_tui.rb test_core.rb Message-ID: <200501282120.j0SLKmdS024026@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv24020 Modified Files: core.rb main_tui.rb test_core.rb Log Message: lets invoke canvas.refresh after an update. Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -d -r1.65 -r1.66 *** main_tui.rb 28 Jan 2005 20:19:53 -0000 1.65 --- main_tui.rb 28 Jan 2005 21:20:46 -0000 1.66 *************** *** 69,80 **** @view.resize(width, height) dump_memory_info("before update") - @canvas.clear @view.update - #@canvas.refresh dump_memory_info("after update") dump_statistics dump_memory_info loop do ! GC.disable event = @canvas.getch break if event == 24 --- 69,78 ---- @view.resize(width, height) dump_memory_info("before update") @view.update dump_memory_info("after update") dump_statistics dump_memory_info loop do ! #GC.disable event = @canvas.getch break if event == 24 *************** *** 99,108 **** end @view.scroll_to_cursor ! dump_memory_info("before update") ! #@canvas.clear @view.update ! #@canvas.refresh ! dump_memory_info("after update, before GC") ! GC.enable GC.start dump_memory_info("after GC") --- 97,104 ---- end @view.scroll_to_cursor ! #dump_memory_info("before update") @view.update ! #dump_memory_info("after update, before GC") ! #GC.enable GC.start dump_memory_info("after GC") *************** *** 343,346 **** --- 339,345 ---- @canvas.move(6 + x - @scroll_x, y) end + def refresh + @canvas.refresh + end def measure_width(x, glyph) case glyph Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -d -r1.46 -r1.47 *** test_core.rb 23 Jan 2005 16:40:09 -0000 1.46 --- test_core.rb 28 Jan 2005 21:20:46 -0000 1.47 *************** *** 297,300 **** --- 297,302 ---- @dy << y end + def refresh + end def measure_width(x, glyph) case glyph Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -d -r1.58 -r1.59 *** core.rb 24 Jan 2005 23:20:13 -0000 1.58 --- core.rb 28 Jan 2005 21:20:46 -0000 1.59 *************** *** 375,378 **** --- 375,379 ---- end @canvas.cursor_show(@cursor_x, cy) if cy + @canvas.refresh end # NOTE: there is intentionally no check for if y is From neoneye at rubyforge.org Fri Jan 28 16:51:22 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 28 16:51:25 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb Message-ID: <200501282151.j0SLpMdS024693@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv24687 Modified Files: main_tui.rb Log Message: don't do repaint in case its already rendered Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.66 retrieving revision 1.67 diff -C2 -d -r1.66 -r1.67 *** main_tui.rb 28 Jan 2005 21:20:46 -0000 1.66 --- main_tui.rb 28 Jan 2005 21:51:19 -0000 1.67 *************** *** 14,17 **** --- 14,43 ---- 0xff2e, 0xff25, 0xff39, 0xff25].pack("U*") + class RenderInfo + def initialize( + text, absolute_y, options, sel1, sel2, sel_mode, scroll_x) + @text = text + @absolute_y = absolute_y + @options = options + @sel1 = sel1 + @sel2 = sel2 + @sel_mode = sel_mode + @scroll_x = scroll_x + end + attr_reader :text, :absolute_y, :options + attr_reader :sel1, :sel2, :sel_mode, :scroll_x + def equal?(other) + return false unless other.kind_of?(RenderInfo) + return false if @text != other.text + return false if @absolute_y != other.absolute_y + return false if @options != other.options + return false if @sel1 != other.sel1 + return false if @sel2 != other.sel2 + return false if @sel_mode != other.sel_mode + return false if @scroll_x != other.scroll_x + true + end + end + def initialize(canvas, filename) super() *************** *** 51,54 **** --- 77,82 ---- @render_glyphs = [32] * @render_width @render_pens = [32] * @render_width + + @render_info = {} end def self.run(filename) *************** *** 239,242 **** --- 267,278 ---- end + info = RenderInfo.new( + text, ay, options, + sel1, sel2, @view.sel_mode, @scroll_x) + if info.equal?(@render_info[vy]) + return # nothing to render + end + @render_info[vy] = info + n = 6 - @scroll_x # reserve some space for line-numbers From neoneye at rubyforge.org Fri Jan 28 17:03:41 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Fri Jan 28 17:03:41 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES Message-ID: <200501282203.j0SM3fdS026424@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv26413 Modified Files: CHANGES Log Message: improved speed slightly Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** CHANGES 28 Jan 2005 20:24:29 -0000 1.32 --- CHANGES 28 Jan 2005 22:03:39 -0000 1.33 *************** *** 1,3 **** --- 1,5 ---- 28-01-2005 Neoneye + * In case we already have rendered a row.. then we no longer + render it again. Now speed is better, but still not acceptable. * Now colors is rendered nice (again), previously it was rendered with the ruby-dl wrapper... now its rendered with my extension. From neoneye at rubyforge.org Sat Jan 29 03:44:22 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 29 03:44:23 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES README core.rb main_tui.rb Message-ID: <200501290844.j0T8iMdS005893@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv5889 Modified Files: CHANGES README core.rb main_tui.rb Log Message: we can now convert selections into folds. Index: README =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** README 23 Jan 2005 17:00:31 -0000 1.10 --- README 29 Jan 2005 08:44:20 -0000 1.11 *************** *** 58,61 **** --- 58,62 ---- ctrl f f ....... expand fold ctrl f 5 ....... collapse 5 lines + ctrl f v ....... convert selection into fold ctrl v ......... toggle selection mode ctrl p ......... paste from clipboard Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.67 retrieving revision 1.68 diff -C2 -d -r1.67 -r1.68 *** main_tui.rb 28 Jan 2005 21:51:19 -0000 1.67 --- main_tui.rb 29 Jan 2005 08:44:20 -0000 1.68 *************** *** 148,151 **** --- 148,153 ---- when 6 @view.expand + when 22, 118 # ctrl-v or v + @view.selection_to_fold when 49..57 @view.collapse(@view.cursor_y, @view.cursor_y+event-48) Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** CHANGES 28 Jan 2005 22:03:39 -0000 1.33 --- CHANGES 29 Jan 2005 08:44:20 -0000 1.34 *************** *** 1,2 **** --- 1,5 ---- + 29-01-2005 Neoneye + * We can now convert selections into folds. + 28-01-2005 Neoneye * In case we already have rendered a row.. then we no longer Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.59 retrieving revision 1.60 diff -C2 -d -r1.59 -r1.60 *** core.rb 28 Jan 2005 21:20:46 -0000 1.59 --- core.rb 29 Jan 2005 08:44:20 -0000 1.60 *************** *** 641,644 **** --- 641,653 ---- @model.replace(ax, ay, bx, by, '') end + def selection_to_fold + return unless @sel_mode + @sel_mode = false + min, max = [[@sel_y, @sel_x], [@cursor_y, @cursor_x]].sort + miny, minx = min + maxy, maxx = max + collapse(miny, maxy - ((maxx == 0) ? 1 : 0)) + @cursor_y = miny + end def toggle_bookmark $logger.info "view operation toggle bookmark" From neoneye at rubyforge.org Sat Jan 29 09:22:19 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 29 09:22:21 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source README Message-ID: <200501291422.j0TEMJdS019982@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv19970 Modified Files: README Log Message: mentioned how to install libncursesw.so Index: README =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** README 29 Jan 2005 08:44:20 -0000 1.11 --- README 29 Jan 2005 14:22:17 -0000 1.12 *************** *** 88,90 **** --- 88,100 ---- + Installation of libncursesw.so + ============================== + + Fetch ncurses version 5.4. + + ./configure --enable-widec --with-shared + make + make install + + // END \ No newline at end of file From neoneye at rubyforge.org Sat Jan 29 11:17:41 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 29 11:17:43 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO Message-ID: <200501291617.j0TGHfdS024853@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv24847 Modified Files: TODO Log Message: some more things to do Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** TODO 28 Jan 2005 20:24:29 -0000 1.32 --- TODO 29 Jan 2005 16:17:39 -0000 1.33 *************** *** 1,3 **** --- 1,4 ---- render with colors. + A: syntax coloring, just import the old lexer. B: faster via caching. *************** *** 10,13 **** --- 11,19 ---- + encoding: + A: detect encoding. + B: write back with same encoding. + + paste should interact with X11's clipboard From neoneye at rubyforge.org Sat Jan 29 14:31:33 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Sat Jan 29 14:31:34 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb test_core.rb Message-ID: <200501291931.j0TJVXdS000576@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv571 Modified Files: core.rb test_core.rb Log Message: preparations for smart home Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -d -r1.47 -r1.48 *** test_core.rb 28 Jan 2005 21:20:46 -0000 1.47 --- test_core.rb 29 Jan 2005 19:31:30 -0000 1.48 *************** *** 1109,1116 **** super @model = AEditor::Model::Caretaker.new ! @model.load("line1\nLINE2\n\t3") @view = AEditor::View::Caretaker.new(@model) @model.attach(@view) ! @view.cursor_x, @view.cursor_y = 0, 0 @view.scroll_x, @view.scroll_y = 0, 0 @canvas = MockCanvas.new(3, 1) --- 1109,1116 ---- super @model = AEditor::Model::Caretaker.new ! @model.load("ruvi\n smed\n\ttextmate\n\t diakonos") @view = AEditor::View::Caretaker.new(@model) @model.attach(@view) ! @view.cursor_x, @view.cursor_y = 12, 0 @view.scroll_x, @view.scroll_y = 0, 0 @canvas = MockCanvas.new(3, 1) *************** *** 1122,1129 **** @view.check_integrity end ! def test_begin1 ! @view.move_to_linebegin assert_equal(0, @view.cursor_x) end end --- 1122,1149 ---- @view.check_integrity end ! def test_normal1 ! @view.move_to_linebegin(false) ! assert_equal(0, @view.cursor_x) ! @view.move_to_linebegin(false) ! assert_equal(0, @view.cursor_x) ! end ! def test_normal2 ! @view.cursor_y = 1 ! @view.move_to_linebegin(false) ! assert_equal(0, @view.cursor_x) ! @view.move_to_linebegin(false) ! assert_equal(0, @view.cursor_x) ! end ! def test_smart1 ! @view.cursor_y = 1 ! @view.move_to_linebegin(true) ! assert_equal(2, @view.cursor_x) ! @view.move_to_linebegin(true) assert_equal(0, @view.cursor_x) + @view.move_to_linebegin(true) + assert_equal(2, @view.cursor_x) end + # TODO: deal with empty lines.. goto autoindent point + # TODO: if cursor is inside the indent area.. then goto the string begin.. not goto the linebegin. end Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.60 retrieving revision 1.61 diff -C2 -d -r1.60 -r1.61 *** core.rb 29 Jan 2005 08:44:20 -0000 1.60 --- core.rb 29 Jan 2005 19:31:30 -0000 1.61 *************** *** 545,549 **** @cursor_x = x end ! def move_to_linebegin @cursor_x = 0 end --- 545,565 ---- @cursor_x = x end ! def move_to_linebegin(smart=true) ! unless smart ! @cursor_x = 0 ! return ! end ! cx = @cursor_x ! b1 = vxay2b(0, @cursor_y) ! b2 = vxay2b(@cursor_x, @cursor_y) ! move_to_lineend ! b3 = vxay2b(@cursor_x, @cursor_y) ! text = @model.text[b1, b3-b1] ! m = text.match(/\A\s*/) ! br = m.end(0) + b1 ! if b2 != br ! @cursor_x, dummy = b2vxay(br) ! return ! end @cursor_x = 0 end From neoneye at rubyforge.org Mon Jan 31 15:05:17 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Mon Jan 31 15:05:18 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO Message-ID: <200501312005.j0VK5HdS011203@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv11193 Modified Files: TODO Log Message: added more entries to the list Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** TODO 29 Jan 2005 16:17:39 -0000 1.33 --- TODO 31 Jan 2005 20:05:14 -0000 1.34 *************** *** 4,12 **** more edit-operations: ! C: search, replace. ! Y: match parenthesis. ! D: multibuffer. ! F: rectangular selections. --- 4,20 ---- + resizing of window should flush the render_cache. + + more edit-operations: ! * auto indent. ! * multibuffer. ! * search, replace. ! * match parenthesis. ! * rectangular selections. ! * swap lines. ! * indent/unindent. ! * undo/redo ! * macroes *************** *** 16,19 **** --- 24,33 ---- + commandline interface: + + + scripting facilities: + + paste should interact with X11's clipboard From neoneye at rubyforge.org Mon Jan 31 15:20:44 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Mon Jan 31 15:20:44 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO Message-ID: <200501312020.j0VKKidS011635@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv11612 Modified Files: TODO Log Message: added more ideas to the list Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** TODO 31 Jan 2005 20:05:14 -0000 1.34 --- TODO 31 Jan 2005 20:20:42 -0000 1.35 *************** *** 30,33 **** --- 30,39 ---- + decorations: + * red color text exceeding the 80th column. + * red color for spaces before indentation point. + * red color spaces/tabs after line end. + + paste should interact with X11's clipboard From neoneye at rubyforge.org Mon Jan 31 16:14:34 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Mon Jan 31 16:14:36 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO core.rb main_tui.rb test_core.rb Message-ID: <200501312114.j0VLEYdS014182@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv14174 Modified Files: CHANGES TODO core.rb main_tui.rb test_core.rb Log Message: View#edit_breakline added Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** TODO 31 Jan 2005 20:20:42 -0000 1.35 --- TODO 31 Jan 2005 21:14:32 -0000 1.36 *************** *** 8,12 **** more edit-operations: ! * auto indent. * multibuffer. * search, replace. --- 8,13 ---- more edit-operations: ! * smart home should use autoindent. ! * smart end (toggles between lineend and endspace). * multibuffer. * search, replace. *************** *** 19,22 **** --- 20,28 ---- + refactoring: + * prefix all edit operations with edit_. + * prefix all move operations with move_. + + encoding: A: detect encoding. Index: main_tui.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v retrieving revision 1.68 retrieving revision 1.69 diff -C2 -d -r1.68 -r1.69 *** main_tui.rb 29 Jan 2005 08:44:20 -0000 1.68 --- main_tui.rb 31 Jan 2005 21:14:32 -0000 1.69 *************** *** 172,176 **** install(:dispatch_bookmark) when 13 ! @view.insert("\n") when 16 # ctrl-p paste selected data @view.insert(@selection_text) --- 172,176 ---- install(:dispatch_bookmark) when 13 ! @view.edit_breakline when 16 # ctrl-p paste selected data @view.insert(@selection_text) Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** CHANGES 29 Jan 2005 08:44:20 -0000 1.34 --- CHANGES 31 Jan 2005 21:14:32 -0000 1.35 *************** *** 1,2 **** --- 1,5 ---- + 31-01-2005 Neoneye + * added View#edit_breakline which can do autoindent. + 29-01-2005 Neoneye * We can now convert selections into folds. Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.48 retrieving revision 1.49 diff -C2 -d -r1.48 -r1.49 *** test_core.rb 29 Jan 2005 19:31:30 -0000 1.48 --- test_core.rb 31 Jan 2005 21:14:32 -0000 1.49 *************** *** 1148,1151 **** --- 1148,1193 ---- end + class TestViewBreakline < Test::Unit::TestCase + def setup + super + @model = AEditor::Model::Caretaker.new + @view = AEditor::View::Caretaker.new(@model) + @model.attach(@view) + @view.cursor_x, @view.cursor_y = 12, 0 + @view.scroll_x, @view.scroll_y = 0, 0 + @canvas = MockCanvas.new(3, 1) + @view.canvas = @canvas + end + def teardown + super + @model.check_integrity + @view.check_integrity + end + def test_typical1 + @model.load("lyle") + @view.cursor_x = 2 + @view.edit_breakline + assert_equal("ly\nle", @model.text) + assert_equal(0, @view.cursor_x) + end + def test_typical2 + @model.load(" hal9000") + @view.cursor_x = 3 + @view.edit_breakline + assert_equal(" ha\n l9000", @model.text) + assert_equal(1, @view.cursor_x) + end + def test_typical3 + @model.load(" ts") + @view.cursor_x = 2 + @view.edit_breakline + assert_equal("\n ts", @model.text) + assert_equal([2, 1], @view.cursor) + @view.edit_breakline + assert_equal("\n\n ts", @model.text) + assert_equal([2, 2], @view.cursor) + end + end + class TestViewFolding < Test::Unit::TestCase Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -d -r1.61 -r1.62 *** core.rb 29 Jan 2005 19:31:30 -0000 1.61 --- core.rb 31 Jan 2005 21:14:32 -0000 1.62 *************** *** 511,514 **** --- 511,528 ---- @model.replace(p, cy, p, cy, utf8_string) end + def edit_breakline + b = @model.p2b(0, @cursor_y) + w = @model.bytes[@cursor_y] + istr = @model.text[b, w].match(/\A\s*/).to_s + cb = vxay2b(@cursor_x, @cursor_y) + rem = b + istr.size - cb + if rem > 0 + cx, cy = @cursor_x, @cursor_y + @model.replace(0, cy, istr.size, cy, "\n" + istr) + @cursor_x, @cursor_y = cx, (cy+1) + else + insert("\n" + istr) + end + end def delete_left cx, cy = cursor From neoneye at rubyforge.org Mon Jan 31 16:30:23 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Mon Jan 31 16:30:25 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb test_core.rb Message-ID: <200501312130.j0VLUNdS014615@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv14596 Modified Files: core.rb test_core.rb Log Message: in case the line didn't contained anything.. then we couldn't determine the indentation point correct. This is now fixed. Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.49 retrieving revision 1.50 diff -C2 -d -r1.49 -r1.50 *** test_core.rb 31 Jan 2005 21:14:32 -0000 1.49 --- test_core.rb 31 Jan 2005 21:30:21 -0000 1.50 *************** *** 1188,1191 **** --- 1188,1208 ---- assert_equal([2, 2], @view.cursor) end + def test_typical4 + @model.load("tom\n copeland") + @view.cursor_x, @view.cursor_y = 2, 1 + @view.edit_breakline + assert_equal("tom\n\n copeland", @model.text) + assert_equal([2, 2], @view.cursor) + @view.edit_breakline + assert_equal("tom\n\n\n copeland", @model.text) + assert_equal([2, 3], @view.cursor) + end + def test_typical5 + @model.load("abc\n\n\n\ndef") + @view.cursor_x, @view.cursor_y = 4, 2 + @view.edit_breakline + assert_equal("abc\n\n\n\n\ndef", @model.text) + assert_equal([4, 3], @view.cursor) + end end Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.62 retrieving revision 1.63 diff -C2 -d -r1.62 -r1.63 *** core.rb 31 Jan 2005 21:14:32 -0000 1.62 --- core.rb 31 Jan 2005 21:30:21 -0000 1.63 *************** *** 516,527 **** istr = @model.text[b, w].match(/\A\s*/).to_s cb = vxay2b(@cursor_x, @cursor_y) rem = b + istr.size - cb ! if rem > 0 cx, cy = @cursor_x, @cursor_y @model.replace(0, cy, istr.size, cy, "\n" + istr) @cursor_x, @cursor_y = cx, (cy+1) ! else ! insert("\n" + istr) end end def delete_left --- 516,533 ---- istr = @model.text[b, w].match(/\A\s*/).to_s cb = vxay2b(@cursor_x, @cursor_y) + if b + istr.size >= cb + cx, cy = @cursor_x, @cursor_y + @model.replace(0, cy, 0, cy, "\n") + @cursor_x, @cursor_y = cx, (cy+1) + return + end rem = b + istr.size - cb ! if rem >= 0 cx, cy = @cursor_x, @cursor_y @model.replace(0, cy, istr.size, cy, "\n" + istr) @cursor_x, @cursor_y = cx, (cy+1) ! return end + insert("\n" + istr) end def delete_left From neoneye at rubyforge.org Mon Jan 31 17:34:48 2005 From: neoneye at rubyforge.org (neoneye@rubyforge.org) Date: Mon Jan 31 17:34:49 2005 Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO core.rb test_core.rb Message-ID: <200501312234.j0VMYmdS018804@rubyforge.org> Update of /var/cvs/aeditor/projects/experimental/buffer2/source In directory rubyforge.org:/tmp/cvs-serv18720 Modified Files: CHANGES TODO core.rb test_core.rb Log Message: View#move_linebegin now gotoes the indentation point of the lines above. Index: TODO =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** TODO 31 Jan 2005 21:14:32 -0000 1.36 --- TODO 31 Jan 2005 22:34:46 -0000 1.37 *************** *** 8,12 **** more edit-operations: - * smart home should use autoindent. * smart end (toggles between lineend and endspace). * multibuffer. --- 8,11 ---- Index: CHANGES =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** CHANGES 31 Jan 2005 21:14:32 -0000 1.35 --- CHANGES 31 Jan 2005 22:34:46 -0000 1.36 *************** *** 1,3 **** ! 31-01-2005 Neoneye * added View#edit_breakline which can do autoindent. --- 1,5 ---- ! 31-01-2005 Neoneye 5D ! * improved View#move_linebegin's smart mode so it gotoes the ! indentation point even though its placed on an empty line. * added View#edit_breakline which can do autoindent. Index: test_core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** test_core.rb 31 Jan 2005 21:30:21 -0000 1.50 --- test_core.rb 31 Jan 2005 22:34:46 -0000 1.51 *************** *** 1109,1113 **** super @model = AEditor::Model::Caretaker.new ! @model.load("ruvi\n smed\n\ttextmate\n\t diakonos") @view = AEditor::View::Caretaker.new(@model) @model.attach(@view) --- 1109,1113 ---- super @model = AEditor::Model::Caretaker.new ! @model.load("ruvi\n smed\n\ttextmate\n\n\n\n\t diakonos") @view = AEditor::View::Caretaker.new(@model) @model.attach(@view) *************** *** 1144,1148 **** assert_equal(2, @view.cursor_x) end ! # TODO: deal with empty lines.. goto autoindent point # TODO: if cursor is inside the indent area.. then goto the string begin.. not goto the linebegin. end --- 1144,1157 ---- assert_equal(2, @view.cursor_x) end ! def test_smart_autoindent1 ! # in case of empty lines.. we goto the indentation point ! @view.cursor_y = 5 ! @view.move_to_linebegin(true) ! assert_equal(8, @view.cursor_x) ! @view.move_to_linebegin(true) ! assert_equal(0, @view.cursor_x) ! @view.move_to_linebegin(true) ! assert_equal(8, @view.cursor_x) ! end # TODO: if cursor is inside the indent area.. then goto the string begin.. not goto the linebegin. end Index: core.rb =================================================================== RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -d -r1.63 -r1.64 *** core.rb 31 Jan 2005 21:30:21 -0000 1.63 --- core.rb 31 Jan 2005 22:34:46 -0000 1.64 *************** *** 577,580 **** --- 577,594 ---- text = @model.text[b1, b3-b1] m = text.match(/\A\s*/) + if m.to_s.size == text.size + b = @model.p2b(0, @cursor_y) + (@cursor_y-1).downto(0) do |y| + w = @model.bytes[y] + b -= w + m = @model.text[b, w].match(/\A\s*(?=\S)/u) + next unless m + rx, ry = b2vxay(b + m.to_s.size) + @cursor_x = (cx != rx) ? rx : 0 + return + end + @cursor_x = 0 + return + end br = m.end(0) + b1 if b2 != br