jota 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/INSTALL +64 -97
- data/LICENSE +1 -1
- data/bin/jota +0 -1
- data/lib/app_error.rb +0 -2
- data/lib/clip.rb +18 -19
- data/lib/clip_array.rb +41 -36
- data/lib/gui.rb +72 -69
- data/lib/helper.rb +43 -5
- data/lib/immediate.rb +0 -3
- data/lib/jota.rb +3 -6
- data/lib/jota_curses.rb +27 -29
- data/lib/mbox_storage-tmail.rb +258 -0
- data/lib/preferences.rb +7 -9
- data/lib/test.rb +37 -0
- data/lib/version.rb +4 -8
- data/tests/test_all.rb +1 -1
- data/tests/test_clip.rb +1 -1
- data/tests/test_clip_array.rb +1 -1
- metadata +36 -56
- data/bin/jota.bat +0 -7
data/lib/gui.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
# $Id: gui.rb 300 2011-04-18 08:38:44Z dz $
|
4
|
-
|
5
|
-
|
6
3
|
# rdoc: see http://en.wikibooks.org/wiki/Ruby_Programming/RubyDoc
|
7
4
|
|
8
5
|
# = Class Gui - Realize the GTK+ related functions of Jota
|
@@ -34,6 +31,7 @@ require 'clip'
|
|
34
31
|
require 'clip_array'
|
35
32
|
require 'helper'
|
36
33
|
require 'preferences'
|
34
|
+
require 'objspace'
|
37
35
|
|
38
36
|
class Gui
|
39
37
|
|
@@ -42,8 +40,8 @@ require 'gtk2'
|
|
42
40
|
attr :glade
|
43
41
|
|
44
42
|
def Gui.gtk_version
|
45
|
-
return "GTK+ %d.%d.%d" % [ Gtk::MAJOR_VERSION,
|
46
|
-
Gtk::MINOR_VERSION,
|
43
|
+
return "GTK+ %d.%d.%d" % [ Gtk::MAJOR_VERSION,
|
44
|
+
Gtk::MINOR_VERSION,
|
47
45
|
Gtk::MICRO_VERSION ]
|
48
46
|
# TODO http://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk#MICRO_VERSION
|
49
47
|
end
|
@@ -55,7 +53,7 @@ def initialize
|
|
55
53
|
@clip_widget = nil
|
56
54
|
@next_autosave = Time.now
|
57
55
|
@changed = false
|
58
|
-
end
|
56
|
+
end
|
59
57
|
|
60
58
|
def open(filename)
|
61
59
|
begin
|
@@ -67,7 +65,7 @@ def open(filename)
|
|
67
65
|
set_autosave
|
68
66
|
@changed = false
|
69
67
|
return @data
|
70
|
-
end
|
68
|
+
end
|
71
69
|
|
72
70
|
def close
|
73
71
|
update
|
@@ -75,7 +73,7 @@ def close
|
|
75
73
|
if @data
|
76
74
|
@data.close
|
77
75
|
end
|
78
|
-
end
|
76
|
+
end
|
79
77
|
|
80
78
|
def clip_array
|
81
79
|
return @data
|
@@ -113,15 +111,15 @@ def create_gui(width=nil, height=nil)
|
|
113
111
|
@top_window.add_accel_group(@accel_group)
|
114
112
|
@glade["main_menu"].accel_group=(@accel_group)
|
115
113
|
|
116
|
-
@glade["menu_new"].add_accelerator('activate', @accel_group,
|
114
|
+
@glade["menu_new"].add_accelerator('activate', @accel_group,
|
117
115
|
Gdk::Keyval::GDK_N, Gdk::Window::CONTROL_MASK, Gtk::ACCEL_VISIBLE)
|
118
|
-
@glade["menu_open"].add_accelerator('activate', @accel_group,
|
116
|
+
@glade["menu_open"].add_accelerator('activate', @accel_group,
|
119
117
|
Gdk::Keyval::GDK_O, Gdk::Window::CONTROL_MASK, Gtk::ACCEL_VISIBLE)
|
120
|
-
@glade["menu_save"].add_accelerator('activate', @accel_group,
|
118
|
+
@glade["menu_save"].add_accelerator('activate', @accel_group,
|
121
119
|
Gdk::Keyval::GDK_S, Gdk::Window::CONTROL_MASK, Gtk::ACCEL_VISIBLE)
|
122
|
-
@glade["menu_close"].add_accelerator('activate', @accel_group,
|
120
|
+
@glade["menu_close"].add_accelerator('activate', @accel_group,
|
123
121
|
Gdk::Keyval::GDK_W, Gdk::Window::CONTROL_MASK, Gtk::ACCEL_VISIBLE)
|
124
|
-
@glade["menu_quit"].add_accelerator('activate', @accel_group,
|
122
|
+
@glade["menu_quit"].add_accelerator('activate', @accel_group,
|
125
123
|
Gdk::Keyval::GDK_Q, Gdk::Window::CONTROL_MASK, Gtk::ACCEL_VISIBLE)
|
126
124
|
|
127
125
|
# Update buttons and stuff
|
@@ -135,7 +133,12 @@ def create_gui(width=nil, height=nil)
|
|
135
133
|
autosave
|
136
134
|
true
|
137
135
|
end
|
138
|
-
|
136
|
+
|
137
|
+
# Log memory consumption
|
138
|
+
Gtk.timeout_add(86400*1000) do # once a day
|
139
|
+
print_verbose "ObjectSpace.memsize_of_all #{ObjectSpace.memsize_of_all}"
|
140
|
+
end
|
141
|
+
end
|
139
142
|
|
140
143
|
|
141
144
|
#
|
@@ -144,16 +147,16 @@ end
|
|
144
147
|
|
145
148
|
def on_top_destroy(widget)
|
146
149
|
quit_app
|
147
|
-
end
|
150
|
+
end
|
148
151
|
|
149
152
|
def on_top_delete(widget, arg0)
|
150
153
|
quit_app
|
151
154
|
return true
|
152
|
-
end
|
155
|
+
end
|
153
156
|
|
154
157
|
def on_dialog_delete(widget, arg0)
|
155
158
|
return true
|
156
|
-
end
|
159
|
+
end
|
157
160
|
|
158
161
|
|
159
162
|
#
|
@@ -163,13 +166,13 @@ end
|
|
163
166
|
def on_main_menu_pressed(widget)
|
164
167
|
update
|
165
168
|
set_goto_menu
|
166
|
-
|
169
|
+
|
167
170
|
@glade["main_menu"].popup(
|
168
171
|
nil,
|
169
172
|
nil,
|
170
173
|
Gtk.current_event.button,
|
171
174
|
Gtk.current_event_time)
|
172
|
-
end
|
175
|
+
end
|
173
176
|
|
174
177
|
def on_edit_menu_pressed(widget)
|
175
178
|
@glade["edit_text_menu"].popup(
|
@@ -177,7 +180,7 @@ def on_edit_menu_pressed(widget)
|
|
177
180
|
nil,
|
178
181
|
Gtk.current_event.button,
|
179
182
|
Gtk.current_event_time)
|
180
|
-
end
|
183
|
+
end
|
181
184
|
|
182
185
|
def on_delete_clicked(widget)
|
183
186
|
if pref("confirm_delete") then
|
@@ -201,7 +204,7 @@ def on_delete_clicked(widget)
|
|
201
204
|
update
|
202
205
|
|
203
206
|
if pref("deletesave_enable") and not @data.current.empty? then
|
204
|
-
deletefile = expand_filename(pref("deletesave_file"),
|
207
|
+
deletefile = expand_filename(pref("deletesave_file"),
|
205
208
|
@data.dirname, @data.filename)
|
206
209
|
begin
|
207
210
|
@data.append(deletefile)
|
@@ -213,26 +216,26 @@ def on_delete_clicked(widget)
|
|
213
216
|
@data.delete
|
214
217
|
@changed = true
|
215
218
|
show
|
216
|
-
end
|
219
|
+
end
|
217
220
|
|
218
221
|
def on_new_clicked(widget)
|
219
222
|
update
|
220
223
|
@data.new
|
221
224
|
@changed = true
|
222
225
|
show
|
223
|
-
end
|
226
|
+
end
|
224
227
|
|
225
228
|
def on_next_clicked(widget)
|
226
229
|
update
|
227
230
|
@data.next
|
228
231
|
show
|
229
|
-
end
|
232
|
+
end
|
230
233
|
|
231
234
|
def on_prev_clicked(widget)
|
232
235
|
update
|
233
236
|
@data.prev
|
234
237
|
show
|
235
|
-
end
|
238
|
+
end
|
236
239
|
|
237
240
|
|
238
241
|
|
@@ -243,12 +246,12 @@ end
|
|
243
246
|
|
244
247
|
def on_menu_quit_activate(widget)
|
245
248
|
quit_app
|
246
|
-
end
|
249
|
+
end
|
247
250
|
|
248
251
|
def on_menu_save_activate(widget)
|
249
252
|
update
|
250
253
|
@data.save
|
251
|
-
end
|
254
|
+
end
|
252
255
|
|
253
256
|
def on_menu_new_activate(widget)
|
254
257
|
filename = file_chooser_dialog :save
|
@@ -271,7 +274,7 @@ def on_menu_new_activate(widget)
|
|
271
274
|
show
|
272
275
|
set_autosave
|
273
276
|
set_style
|
274
|
-
end
|
277
|
+
end
|
275
278
|
|
276
279
|
def on_menu_open_activate(widget)
|
277
280
|
filename = file_chooser_dialog :open
|
@@ -288,13 +291,13 @@ def on_menu_open_activate(widget)
|
|
288
291
|
update
|
289
292
|
@data.close
|
290
293
|
end
|
291
|
-
|
294
|
+
|
292
295
|
@data = ca
|
293
296
|
|
294
297
|
show
|
295
298
|
set_autosave
|
296
299
|
set_style
|
297
|
-
end
|
300
|
+
end
|
298
301
|
|
299
302
|
def on_menu_close_activate(widget)
|
300
303
|
if @data.nil? then
|
@@ -305,7 +308,7 @@ def on_menu_close_activate(widget)
|
|
305
308
|
@data.close
|
306
309
|
@data = nil
|
307
310
|
show
|
308
|
-
end
|
311
|
+
end
|
309
312
|
|
310
313
|
def on_menu_preferences_activate(widget)
|
311
314
|
old_autosave_seconds = pref("autosave_seconds")
|
@@ -322,7 +325,7 @@ def on_menu_preferences_activate(widget)
|
|
322
325
|
@glade["entry_sample"].text = "Sample Text"
|
323
326
|
|
324
327
|
@glade["pref_autosave_enable"].active = pref("autosave_enable")
|
325
|
-
@glade["pref_autosave_minutes"].text =
|
328
|
+
@glade["pref_autosave_minutes"].text =
|
326
329
|
"%d" % (pref("autosave_seconds").to_i/60.0)
|
327
330
|
|
328
331
|
@glade["pref_deletesave_enable"].active = pref("deletesave_enable")
|
@@ -339,7 +342,7 @@ def on_menu_preferences_activate(widget)
|
|
339
342
|
|
340
343
|
set_pref("autosave_enable", @glade["pref_autosave_enable"].active?)
|
341
344
|
set_pref("autosave_seconds", 60 * @glade["pref_autosave_minutes"].text.to_i)
|
342
|
-
|
345
|
+
|
343
346
|
set_pref("deletesave_enable", @glade["pref_deletesave_enable"].active?)
|
344
347
|
set_pref("deletesave_file", @glade["pref_deletesave_file"].text)
|
345
348
|
|
@@ -356,18 +359,18 @@ def on_menu_preferences_activate(widget)
|
|
356
359
|
dialog.signal_connect("close") do
|
357
360
|
dialog.hide
|
358
361
|
end
|
359
|
-
end
|
362
|
+
end
|
360
363
|
|
361
364
|
def on_menu_about_activate(widget)
|
362
365
|
dialog = @glade["about_dialog"]
|
363
366
|
dialog.show
|
364
|
-
dialog.signal_connect("close") do
|
367
|
+
dialog.signal_connect("close") do
|
365
368
|
dialog.hide
|
366
369
|
end
|
367
370
|
dialog.signal_connect("destroy") do # XXX tut's nicht!?
|
368
371
|
dialog.hide
|
369
372
|
end
|
370
|
-
dialog.signal_connect("response") do
|
373
|
+
dialog.signal_connect("response") do
|
371
374
|
dialog.hide
|
372
375
|
end
|
373
376
|
end
|
@@ -396,7 +399,7 @@ def on_edit_text_wrap_activate(widget)
|
|
396
399
|
else
|
397
400
|
@clip_widget.wrap_mode = Gtk::TextTag::WRAP_NONE
|
398
401
|
end
|
399
|
-
end
|
402
|
+
end
|
400
403
|
|
401
404
|
|
402
405
|
#
|
@@ -420,17 +423,17 @@ def on_font(widget)
|
|
420
423
|
end
|
421
424
|
|
422
425
|
dialog.show
|
423
|
-
end
|
426
|
+
end
|
424
427
|
|
425
428
|
def on_bgcolor(widget)
|
426
429
|
color_helper :dialog_text => "Select Background Color",
|
427
430
|
:pref_variable => "background"
|
428
|
-
end
|
431
|
+
end
|
429
432
|
|
430
433
|
def on_fgcolor(widget)
|
431
434
|
color_helper :dialog_text => "Select Foreground Color",
|
432
435
|
:pref_variable => "foreground"
|
433
|
-
end
|
436
|
+
end
|
434
437
|
|
435
438
|
# XXX
|
436
439
|
def on_clip_button_press_event(widget,event)
|
@@ -454,7 +457,7 @@ def error_msgbox(message)
|
|
454
457
|
Gtk::Dialog::MODAL,
|
455
458
|
Gtk::MessageDialog::ERROR,
|
456
459
|
Gtk::MessageDialog::BUTTONS_OK,
|
457
|
-
message);
|
460
|
+
message.to_s);
|
458
461
|
msgbox.title = "Error"
|
459
462
|
|
460
463
|
msgbox.run do | response |
|
@@ -465,7 +468,7 @@ def error_msgbox(message)
|
|
465
468
|
end
|
466
469
|
end
|
467
470
|
msgbox.destroy
|
468
|
-
end
|
471
|
+
end
|
469
472
|
|
470
473
|
def set_goto_menu
|
471
474
|
return if @data.nil?
|
@@ -481,7 +484,7 @@ def set_goto_menu
|
|
481
484
|
|
482
485
|
# Using markup in a MenuItems is not implemented before
|
483
486
|
# GTK+ 2.16. Ruby GTK is 2.12 at the moment (2009-07).
|
484
|
-
|
487
|
+
|
485
488
|
#la = Gtk::Label.new
|
486
489
|
if i == @data.current_index then
|
487
490
|
#title.gsub!(/</,"<")
|
@@ -496,7 +499,7 @@ def set_goto_menu
|
|
496
499
|
|
497
500
|
#mi = Gtk::MenuItem.new
|
498
501
|
#mi.label = la
|
499
|
-
mi = Gtk::MenuItem.new("%s%2d: %s" %
|
502
|
+
mi = Gtk::MenuItem.new("%s%2d: %s" %
|
500
503
|
[marker, i+1, title])
|
501
504
|
mi.signal_connect("activate") do
|
502
505
|
on_menu_goto(i)
|
@@ -512,7 +515,7 @@ end
|
|
512
515
|
def color_helper (hash)
|
513
516
|
dialog_text = hash[:dialog_text]
|
514
517
|
pref_variable = hash[:pref_variable]
|
515
|
-
|
518
|
+
|
516
519
|
dialog = Gtk::ColorSelectionDialog.new(dialog_text)
|
517
520
|
|
518
521
|
dialog.colorsel.current_color = array_to_color(pref(pref_variable))
|
@@ -533,7 +536,7 @@ def color_helper (hash)
|
|
533
536
|
end
|
534
537
|
|
535
538
|
dialog.show
|
536
|
-
end
|
539
|
+
end
|
537
540
|
|
538
541
|
|
539
542
|
def pref(key)
|
@@ -542,13 +545,13 @@ def pref(key)
|
|
542
545
|
else
|
543
546
|
@data.pref[key]
|
544
547
|
end
|
545
|
-
end
|
548
|
+
end
|
546
549
|
|
547
550
|
def set_pref(key,value)
|
548
551
|
if @data
|
549
552
|
@data.pref[key] = value
|
550
553
|
end
|
551
|
-
end
|
554
|
+
end
|
552
555
|
|
553
556
|
def set_title
|
554
557
|
if @data then
|
@@ -581,12 +584,12 @@ def set_buttons
|
|
581
584
|
else
|
582
585
|
@glade["but_delete"].sensitive = true
|
583
586
|
@glade["but_new"].sensitive = true
|
584
|
-
@glade["but_next"].sensitive =
|
587
|
+
@glade["but_next"].sensitive =
|
585
588
|
(@data.current_index != @data.length-1)
|
586
589
|
@glade["but_prev"].sensitive = (@data.current_index != 0)
|
587
590
|
@glade["but_edit"].sensitive = true
|
588
591
|
|
589
|
-
@glade["label_index"].text =
|
592
|
+
@glade["label_index"].text =
|
590
593
|
"%d of %d" % [@data.current_index+1, @data.length]
|
591
594
|
|
592
595
|
status = ""
|
@@ -606,15 +609,15 @@ def set_buttons
|
|
606
609
|
@glade["menu_goto"].sensitive = true
|
607
610
|
end
|
608
611
|
|
609
|
-
|
610
|
-
end
|
612
|
+
@glade["clip"].grab_focus
|
613
|
+
end
|
611
614
|
|
612
615
|
def set_wrap_mode
|
613
616
|
return if @data.nil?
|
614
617
|
|
615
618
|
# Gtk::ToggleButton#active= emits an activate signal
|
616
619
|
# and thus calls on_edit_text_wrap_activate
|
617
|
-
|
620
|
+
|
618
621
|
if @data.current.wrap then
|
619
622
|
@glade["edit_text_wrap"].active = true
|
620
623
|
else
|
@@ -631,7 +634,7 @@ def set_style
|
|
631
634
|
@clip_widget.modify_base(Gtk::STATE_NORMAL,
|
632
635
|
array_to_color(pref("background")))
|
633
636
|
@clip_widget.modify_font(Pango::FontDescription.new(pref("font")))
|
634
|
-
end
|
637
|
+
end
|
635
638
|
|
636
639
|
|
637
640
|
#
|
@@ -644,7 +647,7 @@ def set_style_sample(fg_gdk_color, bg_gdk_color, font)
|
|
644
647
|
sample.modify_text(Gtk::STATE_NORMAL, fg_gdk_color) if fg_gdk_color
|
645
648
|
sample.modify_base(Gtk::STATE_NORMAL, bg_gdk_color) if bg_gdk_color
|
646
649
|
sample.modify_font(Pango::FontDescription.new(font)) if font
|
647
|
-
end
|
650
|
+
end
|
648
651
|
|
649
652
|
def quit_app
|
650
653
|
if pref("confirm_quit") then
|
@@ -672,7 +675,7 @@ def quit_app
|
|
672
675
|
end
|
673
676
|
|
674
677
|
Gtk.main_quit
|
675
|
-
end
|
678
|
+
end
|
676
679
|
|
677
680
|
def set_about_dialog
|
678
681
|
dlg = @glade["about_dialog"]
|
@@ -689,7 +692,7 @@ def set_about_dialog
|
|
689
692
|
dlg.website="#{Version::AUTHOR_WEBSITE}"
|
690
693
|
dlg.license="#{Version::LICENSE}"
|
691
694
|
dlg.authors=["#{Version::AUTHOR} <#{Version::AUTHOR_EMAIL}>"]
|
692
|
-
end
|
695
|
+
end
|
693
696
|
|
694
697
|
def clip_to_widget(textview, clip_array)
|
695
698
|
print_debug "clip_to_widget"
|
@@ -702,7 +705,7 @@ def clip_to_widget(textview, clip_array)
|
|
702
705
|
clip = clip_array.current
|
703
706
|
|
704
707
|
textview.buffer.text = clip.text
|
705
|
-
|
708
|
+
|
706
709
|
if clip.pos then
|
707
710
|
#mark = textview.buffer.get_insert
|
708
711
|
# isn't implemented in Ruby ... grrrr
|
@@ -717,8 +720,8 @@ def clip_to_widget(textview, clip_array)
|
|
717
720
|
textview.editable = true
|
718
721
|
end
|
719
722
|
|
720
|
-
|
721
|
-
end
|
723
|
+
@glade["clip"].grab_focus
|
724
|
+
end
|
722
725
|
|
723
726
|
def widget_to_clip(textview, clip_array)
|
724
727
|
print_debug "widget_to_clip"
|
@@ -732,21 +735,21 @@ def widget_to_clip(textview, clip_array)
|
|
732
735
|
clip_array.current.wrap = true
|
733
736
|
end
|
734
737
|
end
|
735
|
-
end
|
738
|
+
end
|
736
739
|
|
737
740
|
def set_autosave
|
738
741
|
if pref("autosave_enable") then
|
739
742
|
@next_autosave = Time.now + pref("autosave_seconds")
|
740
743
|
end
|
741
|
-
end
|
744
|
+
end
|
742
745
|
|
743
746
|
def array_to_color(arr)
|
744
747
|
return Gdk::Color.new(arr[0],arr[1],arr[2])
|
745
|
-
end
|
748
|
+
end
|
746
749
|
|
747
750
|
def color_to_array(gdk_color)
|
748
751
|
return [gdk_color.red, gdk_color.green, gdk_color.blue]
|
749
|
-
end
|
752
|
+
end
|
750
753
|
|
751
754
|
def file_chooser_dialog(mode)
|
752
755
|
case mode
|
@@ -794,7 +797,7 @@ def file_chooser_dialog(mode)
|
|
794
797
|
dialog.destroy
|
795
798
|
|
796
799
|
return filename
|
797
|
-
end
|
800
|
+
end
|
798
801
|
|
799
802
|
def show
|
800
803
|
clip_to_widget(@clip_widget,@data)
|
@@ -802,7 +805,7 @@ def show
|
|
802
805
|
set_wrap_mode
|
803
806
|
set_title
|
804
807
|
end
|
805
|
-
|
808
|
+
|
806
809
|
def update
|
807
810
|
widget_to_clip(@clip_widget, @data) if @data
|
808
811
|
set_buttons
|
@@ -810,10 +813,10 @@ def update
|
|
810
813
|
end
|
811
814
|
|
812
815
|
def autosave
|
813
|
-
# do autosave if enabled
|
814
|
-
if @data &&
|
816
|
+
# do autosave if enabled
|
817
|
+
if @data &&
|
815
818
|
@changed &&
|
816
|
-
pref("autosave_enable") &&
|
819
|
+
pref("autosave_enable") &&
|
817
820
|
Time.now >= @next_autosave then
|
818
821
|
print_verbose "autosaving at #{Time.now}"
|
819
822
|
@data.save
|