hilfer 0.11.3 → 0.11.4

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 0.11.4 / 2011-08-16
2
+
3
+ * If a a file path is specified, open its parent
4
+
1
5
  === 0.11.3 / 2011-06-21
2
6
 
3
7
  * Remove Hoe
@@ -50,7 +50,7 @@ which is the root node of the tree, but it's never displayed
50
50
  =end
51
51
  class TreeViewer
52
52
  include SvnColours if HAS_SUBVERSION
53
-
53
+
54
54
  attr_reader :view, :editor, :root_item
55
55
 
56
56
  # Can pass in $options[:terminal] => some_terminal
@@ -65,13 +65,17 @@ class TreeViewer
65
65
  # these need to be window-local
66
66
  @expecting_synchronize_path = false
67
67
  @auto_synchronize_path = $options[:auto_sync]
68
- @root_item = HilferItem.new( '', path )
68
+
69
+ path = Pathname.new( path )
70
+ path = path.parent while !path.directory?
71
+
72
+ @root_item = HilferItem.new( '', path.to_s )
69
73
  # TODO this shuold be in set_root or something like that
70
74
  @location.text = @root_item.path
71
75
  @location.select_region(0,0)
72
76
  @location.position = -1
73
77
  @hilfer_items = {}
74
-
78
+
75
79
  # locators are things that provide a set of shortcut keys
76
80
  # to jump to specific directories, files, or related locations
77
81
  @locators = []
@@ -227,10 +231,10 @@ class TreeViewer
227
231
  editable && editable.signal_connect("editing-done") do |widget|
228
232
  # Fetch the HilferItem
229
233
  item = @view.model.get_iter(path)[0]
230
-
234
+
231
235
  # make the new file name, in full
232
236
  new_path = ( Pathname.new( item.path ).parent + editable.text )
233
-
237
+
234
238
  # rename the file if it's renameable
235
239
  if editable.text != item.item && !File.exists?( new_path.to_s )
236
240
  # rename the file
@@ -246,10 +250,10 @@ class TreeViewer
246
250
  end
247
251
  true
248
252
  end
249
-
253
+
250
254
  true
251
255
  end
252
-
256
+
253
257
  @view.append_column( column )
254
258
  end
255
259
 
@@ -279,7 +283,7 @@ class TreeViewer
279
283
  def confirm_delete_files( iters )
280
284
  msg = "Are you sure you want to delete\n"
281
285
  iters.each { |it| msg += it[0].path + "\n" }
282
-
286
+
283
287
  confirm = Gtk::MessageDialog.new(
284
288
  @window,
285
289
  Gtk::Dialog::Flags::MODAL,
@@ -299,7 +303,7 @@ class TreeViewer
299
303
  true
300
304
  end
301
305
  end
302
-
306
+
303
307
  # actually delete the files
304
308
  confirm.run do |response|
305
309
  delete_files( iters ) if response == Gtk::Dialog::RESPONSE_YES
@@ -317,32 +321,32 @@ class TreeViewer
317
321
  end
318
322
  end
319
323
  end
320
-
324
+
321
325
  # handle keypresses
322
326
  # TODO use HandlerDefn
323
327
  def init_keys
324
328
  @view.signal_connect( 'key-press-event' ) do |widget,event|
325
329
  puts "event: #{event.inspect}" if $options[:debug]
326
-
330
+
327
331
  retval = true
328
332
  case
329
333
  # enter - go into directory
330
334
  # or open all selected files
331
335
  when event.match( /return/i, /enter/i ) && !event.state.control_mask?
332
336
  items = []
333
-
337
+
334
338
  # fetch all selected items
335
339
  widget.selection.selected_each do |model, path, iter|
336
340
  items << model.get_value( iter, 0 )
337
341
  end
338
-
342
+
339
343
  # go into if the first item is a directory
340
344
  open_action( items )
341
-
345
+
342
346
  # ctrl-enter opens new window with the selected root(s)
343
347
  when event.match( /return/i, /enter/i ) && event.state.control_mask?
344
348
  widget.selection.selected_each do |model, path, iter|
345
- new_path =
349
+ new_path =
346
350
  if !iter[0].dir?
347
351
  # open the directory this file lives in
348
352
  # unless we're already in that directory
@@ -353,14 +357,14 @@ class TreeViewer
353
357
  end
354
358
  TreeViewerWindow.new( new_path, @editor ) unless new_path.nil?
355
359
  end
356
-
360
+
357
361
  # backspace - go up to parent directory
358
362
  when event =~ 'BackSpace'
359
363
  # go up one directory
360
364
  temp = Pathname.new( @root_item.path )
361
365
  @root_item.path = temp.parent.realpath.to_s
362
366
  go_into( @root_item.path )
363
-
367
+
364
368
  # del on main keyboard or keypad deletes a file
365
369
  when event =~ /Delete/
366
370
  iters = []
@@ -368,7 +372,7 @@ class TreeViewer
368
372
  iters << iter
369
373
  end
370
374
  confirm_delete_files( iters )
371
-
375
+
372
376
  # ctrl-e and F2 edits the file name
373
377
  when ( event.e? && event.state.control_mask? ) || event.f2?
374
378
  # make sure all the files are selected
@@ -382,11 +386,11 @@ class TreeViewer
382
386
  # the rest of the work is done in the renderer's handler.
383
387
  @text_renderer.editable = false
384
388
  end
385
-
389
+
386
390
  # ctrl-d sends some debug/info commands to scite
387
391
  when event.d? && event.state.control_mask? && !event.state.shift_mask?
388
392
  @editor.dump
389
-
393
+
390
394
  # ctrl-b sends the current selection to the editor
391
395
  when event.b? && event.state.control_mask? && !event.state.shift_mask?
392
396
  paths = []
@@ -395,20 +399,20 @@ class TreeViewer
395
399
  paths << model.get_value( iter, 0 ).path
396
400
  end
397
401
  @editor.insert paths
398
-
402
+
399
403
  # ctrl-c copies current selections as text
400
404
  when event.c? && event.state.control_mask? && !event.state.shift_mask?
401
405
  paths = []
402
-
406
+
403
407
  # fetch all selected items
404
408
  # don't use a join here so we get a trailing newline
405
409
  widget.selection.selected_each do |model, path, iter|
406
410
  paths << model.get_value( iter, 0 ).path
407
411
  end
408
-
412
+
409
413
  Gtk::Clipboard.get( Gdk::Selection::CLIPBOARD ).text = paths.join("\n")
410
-
411
- # ctrl-v selects the files in the clipboard
414
+
415
+ # ctrl-v selects the files in the clipboard
412
416
  when event.v? && event.state.control_mask? && !event.state.shift_mask?
413
417
  text = Gtk::Clipboard.get( Gdk::Selection::CLIPBOARD ).wait_for_text
414
418
  paths = text.strip.split( /\s*\n\s*/ )
@@ -419,18 +423,18 @@ class TreeViewer
419
423
  ( fullpath.exist? ? fullpath : x ).to_s
420
424
  end
421
425
  select_fs_paths( paths )
422
-
426
+
423
427
  # ctrl-n opens new window with same root
424
428
  when event.n? && event.state.control_mask?
425
429
  TreeViewerWindow.new( @root_item.path, @editor )
426
-
430
+
427
431
  # ctrl-y synchronizes with current editor file
428
432
  when event.y? && event.state.control_mask?
429
433
  # make sure other windows don't synchronize
430
434
  @expecting_synchronize_path = true
431
435
  # ask editor for current file and sync
432
436
  @editor.synchronize_path
433
-
437
+
434
438
  # alt-y toggles automatic synchronization
435
439
  when event.y? && event.state.mod1_mask?
436
440
  @auto_synchronize_path = !@auto_synchronize_path
@@ -438,7 +442,7 @@ class TreeViewer
438
442
  # ctrl-r refreshes from filesystem
439
443
  when event.r? && event.state.control_mask?
440
444
  refresh
441
-
445
+
442
446
  # ctrl-t opens a terminal window on the given directories.
443
447
  # Uses gnome-terminal and opens directories in tabs
444
448
  when event.t? && event.state.control_mask? && !event.state.shift_mask?
@@ -456,22 +460,22 @@ class TreeViewer
456
460
  end
457
461
  end
458
462
  terminal.launch( dirs )
459
-
463
+
460
464
  # alt-l toggles the location bar
461
465
  when event.l? && event.state.mod1_mask?
462
466
  @location.no_show_all = true
463
467
  @location.visible = !@location.visible?
464
-
468
+
465
469
  # alt-q toggles whether shutdown is automatic or not
466
470
  when event.q? && event.state.mod1_mask?
467
471
  $options[:quit_editor] = !$options[:quit_editor]
468
-
472
+
469
473
  # ctrl-* on keypad means expand the entire tree
470
474
  when event =~ 'KP_Multiply' && event.state.control_mask?
471
475
  # 100 levels of directories should be enough...
472
476
  populate( @view.model, @root_item, nil, 100 )
473
477
  @view.expand_all
474
-
478
+
475
479
  # * on keypad means expand subtree
476
480
  when event =~ 'KP_Multiply' && event.state.empty?
477
481
  widget.selection.selected_rows.each do |path|
@@ -480,11 +484,11 @@ class TreeViewer
480
484
  expand_dir( widget, path, iter )
481
485
  end
482
486
  end
483
-
487
+
484
488
  # shift-/ on keypad means collapse the entire tree
485
489
  when event =~ 'KP_Divide' && event.state.shift_mask?
486
490
  @view.collapse_all
487
-
491
+
488
492
  # ctrl-left means go to parent
489
493
  when event =~ /left$/i && event.state.control_mask?
490
494
  widget.selection.selected_each do |model, path, iter|
@@ -492,11 +496,11 @@ class TreeViewer
492
496
  iter.parent[0].last_child_used = path
493
497
  select_iter( iter.parent )
494
498
  end
495
-
499
+
496
500
  # only do the first one
497
501
  break
498
502
  end
499
-
503
+
500
504
  # ctrl-right means go to last used path, or first child
501
505
  when event.right? && event.state.control_mask?
502
506
  widget.selection.selected_each do |model, path, iter|
@@ -508,11 +512,11 @@ class TreeViewer
508
512
  select_iter( iter.first_child )
509
513
  end
510
514
  end
511
-
515
+
512
516
  # only do the first one
513
517
  break
514
518
  end
515
-
519
+
516
520
  # ctrl-up means go to previous sibling with children
517
521
  when event.up? && event.state.control_mask?
518
522
  widget.selection.selected_each do |model, path, iter|
@@ -528,7 +532,7 @@ class TreeViewer
528
532
  end
529
533
  break
530
534
  end
531
-
535
+
532
536
  # ctrl-down means go to next sibling with children
533
537
  when event.down? && event.state.control_mask?
534
538
  widget.selection.selected_each do |model, path, iter|
@@ -581,7 +585,7 @@ class TreeViewer
581
585
  # false means don't expand children
582
586
  widget.expand_row( path, false )
583
587
  end
584
-
588
+
585
589
  else
586
590
  # indicate signal not handled
587
591
  retval = false
@@ -594,7 +598,7 @@ class TreeViewer
594
598
  retval
595
599
  end
596
600
  end
597
-
601
+
598
602
  def expand_dir( widget, path, iter )
599
603
  # make sure all directories in subtree are populated
600
604
  populate( @view.model, iter[0], iter, 100 )
@@ -611,7 +615,7 @@ class TreeViewer
611
615
  paths << cur.clone
612
616
  cur.up!
613
617
  end
614
-
618
+
615
619
  # now open the necessary paths from the top down
616
620
  # false is don't open all children
617
621
  paths.reverse.each do |x|
@@ -619,18 +623,18 @@ class TreeViewer
619
623
  @view.selection.unselect_path( x )
620
624
  end
621
625
  end
622
-
626
+
623
627
  def unselect_all
624
628
  @view.selection.unselect_all
625
629
  end
626
-
630
+
627
631
  def select_children( widget, iter )
628
632
  widget.expand_row( iter.path, false )
629
633
  (0...iter.n_children).each do |index|
630
634
  select_iter( iter.nth_child( index ), false, false )
631
635
  end
632
636
  end
633
-
637
+
634
638
  # set selection and cursor to the given GtkTreeModel path
635
639
  def select_path( path, unselect = true, set_cursor = true )
636
640
  unselect_all if unselect
@@ -650,7 +654,7 @@ class TreeViewer
650
654
  # path, column, use_align, row_align, col_align
651
655
  @view.scroll_to_cell( iter.path, nil, true, 0.5, 0.0 )
652
656
  end
653
-
657
+
654
658
  # Set selection to the given filesystem path.
655
659
  # TODO could optimise this to select faster if we
656
660
  # use directory names. Possibly also use select_iter if it's faster
@@ -678,13 +682,13 @@ class TreeViewer
678
682
  @view.set_cursor( iter.path, nil, false )
679
683
  cursor_set = true
680
684
  end
681
-
685
+
682
686
  select_iter( iter, false, false )
683
687
  end
684
688
  end
685
-
689
+
686
690
  end
687
-
691
+
688
692
  def select_first
689
693
  # set first item as selected
690
694
  @view.selection.select_path Gtk::TreePath.new( '0' )
@@ -700,7 +704,7 @@ class TreeViewer
700
704
  @expecting_synchronize_path = false
701
705
  end
702
706
  end
703
-
707
+
704
708
  # called from open_action when we don't want the auto-centering
705
709
  # to do its thing.
706
710
  def no_synchronize
@@ -709,7 +713,7 @@ class TreeViewer
709
713
  yield @editor
710
714
  @auto_synchronize_path = save
711
715
  end
712
-
716
+
713
717
  # called from the keyboard handler on enter
714
718
  # and the double-click handler to
715
719
  # open files or go into a directory
@@ -777,13 +781,13 @@ class TreeViewer
777
781
  {}
778
782
  end
779
783
  end
780
-
784
+
781
785
  # populate the model from the filesystem
782
786
  # by default populate only 1 level down
783
787
  def populate( model, item, parent_iter, levels_to_populate = 1, level = 0 )
784
788
  iter = nil
785
789
  path_colours = do_compute_colours( item )
786
-
790
+
787
791
  Dir.new( item.path ).entries.sort.each do |x|
788
792
  begin
789
793
  # ignore directory entries
@@ -1,3 +1,3 @@
1
1
  module Hilfer
2
- VERSION = '0.11.3'
2
+ VERSION = '0.11.4'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hilfer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.3
4
+ version: 0.11.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,23 +9,23 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-06-21 00:00:00.000000000 +02:00
12
+ date: 2011-08-16 00:00:00.000000000 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: gtk2
17
- requirement: &70808530 !ruby/object:Gem::Requirement
17
+ requirement: &79176550 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
21
21
  - !ruby/object:Gem::Version
22
- version: 0.90.9
22
+ version: 1.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70808530
25
+ version_requirements: *79176550
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: bones
28
- requirement: &70808250 !ruby/object:Gem::Requirement
28
+ requirement: &79176270 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: 3.7.0
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70808250
36
+ version_requirements: *79176270
37
37
  description: Programmers file browser for SciTE
38
38
  email: panic@semiosix.com
39
39
  executables: