diru 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a28f4c905f25bd1b2d3bdec8d38caf27d55fbd45
4
- data.tar.gz: 8e8a7210c8e50f1537aa314a97a86f91b373e26c
3
+ metadata.gz: c4270a80d34a955821dbaa758b659a69c38ea72d
4
+ data.tar.gz: 20e891d382e3aba4deac68ad5f482d9dcf20282f
5
5
  SHA512:
6
- metadata.gz: 247e190660aedee8dff49ae2d36fd906aa5c413ece5b13b86fa007adb4be771ad3e97ef8e21494ced2cfb9c4677eaa54c1a87707706adf7ef8be71a551eb6c5f
7
- data.tar.gz: 0ef5b4473de0f18d9473413736c4435e5313237f2e6aac4bb4827c41b082f3f5fa7f2b2c4c2ab71155930fe019976e48a95d7a7e9037e700583e49f23a69d94b
6
+ metadata.gz: 7513d88c4fb717def21e88fb28fb305910824095f8c775086b8cf4116909038be704476b36403d69fc384d56c4056e2d0e3edc23e94612d47867a12d00cb3972
7
+ data.tar.gz: fc809c28767ad797d55d63e4ed7fe4ccbe19bd93d570af90cad94bb5aababdfce7f815af3bc42e067ddaba1b8fea811389a5ceaaa2a8a6874ab94fde86c7ff9c
@@ -1,5 +1,9 @@
1
1
  = Version history
2
2
 
3
+ [0.0.4] Default matching is glob (fnmatch) based.
4
+ Separate command for regex based search ('e').
5
+ Fixed wrong display of paths when Project dir was '/'.
6
+
3
7
  [0.0.3] Mkdir and rmdir commands, direct server update.
4
8
 
5
9
  [0.0.2] Separate refresh for Options File and Project dirs.
@@ -28,8 +28,8 @@ Diru features:
28
28
  * Support for multiple concurrent Projects.
29
29
  * User and Project specific options (configuration).
30
30
  * Jump to Project root.
31
- * Find and jump to dir under Project root (regexp search).
32
- * Find and jump to dir under current dir (regexp search).
31
+ * Find and jump to dir under Project root (glob and regex search).
32
+ * Find and jump to dir under current dir (glob search).
33
33
  * Fast directory search since Server maintains a memory image of
34
34
  directories.
35
35
  * Favorite directories in options (configuration), for permanent
@@ -110,7 +110,7 @@ If we want to jump to a subdir called "dir_0_0" (under root), we do:
110
110
 
111
111
  Note that "dir_0_0" does not have to be directly under Project root,
112
112
  the directory is searched from the complete tree of directories under
113
- Project root using regexp matching.
113
+ Project root using glob (fnmatch) matching.
114
114
 
115
115
  Now that we have changed directory for a couple of times, we can look
116
116
  at the directory change history:
@@ -131,8 +131,11 @@ info from Server.
131
131
  Search commands:
132
132
 
133
133
  * "dr r" - change to Project root dir.
134
- * "dr r <dir>" - change to <dir> (somewhere) under Project root dir.
135
- * "dr t <dir>" - change to <dir> (somewhere) under current dir.
134
+ * "dr r <dir>" - change to <dir> (somewhere) under Project root dir
135
+ (glob).
136
+ * "dr t <dir>" - change to <dir> (somewhere) under current dir (glob).
137
+ * "dr e <dir>" - change to <dir> (somewhere) under Project root dir
138
+ (regexp).
136
139
 
137
140
  Search can match to multiple directories. First match is used and the
138
141
  rest (Left-overs) are displayed to the user. Left-overs are also
@@ -143,6 +146,11 @@ Search pattern can also be constructed from multiple pieces.
143
146
 
144
147
  shell> dr r dir 1_0_1
145
148
 
149
+ The pieces are joined with '*' for glob (fnmatch) based searches and
150
+ with '.*' for regexp based searches. Glob based searches are
151
+ additionally prefixed with '*' and postfixed with '*', since glob does
152
+ not automatically match to the middle of the string, however regexp does.
153
+
146
154
  See "dr i" for alternatives for single letter commands. For example
147
155
  "r" can be replaced with "/".
148
156
 
data/bin/diru CHANGED
@@ -189,6 +189,11 @@ class Search
189
189
 
190
190
  # Server root.
191
191
  @root = root
192
+ if @root == '/'
193
+ @rootpart = ''
194
+ else
195
+ @rootpart = @root
196
+ end
192
197
 
193
198
  # Change directory to DIRU root.
194
199
  Dir.chdir( @root )
@@ -238,6 +243,7 @@ class Search
238
243
  @datalock = Mutex.new
239
244
  @optslock = Mutex.new
240
245
 
246
+
241
247
  # Initial data update.
242
248
  update_conf
243
249
  update_data
@@ -334,7 +340,7 @@ class Search
334
340
 
335
341
  # Get (and update) favorite.
336
342
  def gfav( tag )
337
- "#{@root}/#{@fav[ tag ]}"
343
+ "#{@rootpart}/#{@fav[ tag ]}"
338
344
  end
339
345
 
340
346
 
@@ -397,7 +403,7 @@ class Search
397
403
  if path == @root
398
404
  ''
399
405
  else
400
- rem = "#{@root}/"
406
+ rem = "#{@rootpart}/"
401
407
  rel = path.dup
402
408
  rel[rem] = ''
403
409
  rel
@@ -405,10 +411,41 @@ class Search
405
411
  end
406
412
 
407
413
 
408
- # Match dir/pattern from DB.
414
+ # Match dir/pattern with glob (fnmatch) from DB.
409
415
  def match( dir, pattern )
410
416
  list = []
411
417
 
418
+ if dir
419
+ begin
420
+ dir = abs2rel( dir )
421
+ rescue
422
+ return []
423
+ end
424
+ r = dir + '*' + pattern
425
+ else
426
+ r = pattern
427
+ end
428
+
429
+ @datalock.synchronize do
430
+ @data.each do |i|
431
+ if File.fnmatch( r, i )
432
+ list.push "#{@rootpart}/#{i}"
433
+ end
434
+ end
435
+ end
436
+
437
+ # Update old list.
438
+ @old = list.rotate
439
+
440
+ list
441
+ end
442
+
443
+
444
+
445
+ # Match dir/pattern with regex from DB.
446
+ def rematch( dir, pattern )
447
+ list = []
448
+
412
449
  if dir
413
450
  begin
414
451
  dir = abs2rel( dir )
@@ -423,7 +460,7 @@ class Search
423
460
  @datalock.synchronize do
424
461
  @data.each do |i|
425
462
  if i.match( r )
426
- list.push "#{@root}/#{i}"
463
+ list.push "#{@rootpart}/#{i}"
427
464
  end
428
465
  end
429
466
  end
@@ -914,7 +951,7 @@ class Client
914
951
  cmd = input[0]
915
952
  arg = input[1..-1]
916
953
 
917
- # Shell specials chars to prevent:
954
+ # Shell special chars to avoid:
918
955
  # * ? [ ] ' " \ $ ; & ( ) | ^ < >
919
956
 
920
957
  # Thus allowed:
@@ -929,10 +966,12 @@ class Client
929
966
  if arg.empty?
930
967
  disp @search.root
931
968
  else
932
- disp @search.match( nil, arg.join('.*') )
969
+ disp @search.match( nil, "*"+arg.join('*')+"*" )
933
970
  end
934
971
 
935
- when ':', 't'; disp @search.match( Dir.pwd, arg.join('.*') )
972
+ when ':', 't'; disp @search.match( Dir.pwd, "*"+arg.join('*')+"*" )
973
+
974
+ when 'e'; disp @search.rematch( nil, arg.join('.*') )
936
975
 
937
976
  when '.', 'b';
938
977
  if arg[0] == nil
@@ -1094,6 +1133,7 @@ class Client
1094
1133
  STDERR.puts "
1095
1134
  r / - search from root (or to root)
1096
1135
  t : - search from this (current)
1136
+ e - search from root (with regexp)
1097
1137
  b . - bookmark access
1098
1138
  h , - history access
1099
1139
  s _ - scratch pad access
@@ -1,5 +1,5 @@
1
1
  module Diru
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  def Diru.version
4
4
  Diru::VERSION
5
5
  end
@@ -31,7 +31,19 @@
31
31
  1: /home/tero/prog/gem/diru/test/dir_1/dir_1_1
32
32
  0: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
33
33
  /home/tero/prog/gem/diru/test
34
- /home/tero/prog/gem/diru/test
34
+ /home/tero/prog/gem/diru/test/dir_0/dir_0_2/dir_0_2_1
35
+ /home/tero/prog/gem/diru/test/dir_0/dir_0_2/dir_0_2_2
36
+ /home/tero/prog/gem/diru/test/dir_1/dir_1_2/dir_1_2_0
37
+ /home/tero/prog/gem/diru/test/dir_1/dir_1_2/dir_1_2_1
38
+ /home/tero/prog/gem/diru/test/dir_1/dir_1_2/dir_1_2_2
39
+ /home/tero/prog/gem/diru/test/dir_0/dir_0_2/dir_0_2_0
40
+ /home/tero/prog/gem/diru/test/dir_0/dir_0_2/dir_0_2_1
41
+ /home/tero/prog/gem/diru/test/dir_0/dir_0_2/dir_0_2_2
42
+ /home/tero/prog/gem/diru/test/dir_1/dir_1_2/dir_1_2_0
43
+ /home/tero/prog/gem/diru/test/dir_1/dir_1_2/dir_1_2_1
44
+ /home/tero/prog/gem/diru/test/dir_1/dir_1_2/dir_1_2_2
45
+ /home/tero/prog/gem/diru/test/dir_0/dir_0_2/dir_0_2_0
46
+ /home/tero/prog/gem/diru/test/dir_0/dir_0_2/dir_0_2_0
35
47
  /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
36
48
  /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
37
49
  /home/tero/prog/gem/diru/test/dir_0/dir_0_0
@@ -105,13 +117,14 @@
105
117
  0: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
106
118
  /home/tero/prog/gem/diru/test
107
119
  /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
108
- 12: /home/tero/prog/gem/diru/test
109
- 11: /home/tero/prog/gem/diru/test/dir_0/dir_0_4/dir_0_4_0
110
- 10: /home/tero/prog/gem/diru/test/dir_1
111
- 9: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_0
112
- 8: /home/tero/prog/gem/diru/test/dir_1/dir_1_1
113
- 7: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
114
- 6: /home/tero/prog/gem/diru/test
120
+ 13: /home/tero/prog/gem/diru/test
121
+ 12: /home/tero/prog/gem/diru/test/dir_0/dir_0_4/dir_0_4_0
122
+ 11: /home/tero/prog/gem/diru/test/dir_1
123
+ 10: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_0
124
+ 9: /home/tero/prog/gem/diru/test/dir_1/dir_1_1
125
+ 8: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
126
+ 7: /home/tero/prog/gem/diru/test
127
+ 6: /home/tero/prog/gem/diru/test/dir_0/dir_0_2/dir_0_2_0
115
128
  5: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
116
129
  4: /home/tero/prog/gem/diru/test/dir_0
117
130
  3: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
@@ -143,13 +156,14 @@ f dir_0/dir_0_4/dir_0_4_0
143
156
  g dir_1/dir_1_2
144
157
  /home/tero/prog/gem/diru/test/dir_0/dir_0_1/dir_0_1_1
145
158
  /home/tero/prog/gem/diru/test/dir_0/dir_0_4/dir_0_4_0
146
- 26: /home/tero/prog/gem/diru/test
147
- 25: /home/tero/prog/gem/diru/test/dir_0/dir_0_4/dir_0_4_0
148
- 24: /home/tero/prog/gem/diru/test/dir_1
149
- 23: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_0
150
- 22: /home/tero/prog/gem/diru/test/dir_1/dir_1_1
151
- 21: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
152
- 20: /home/tero/prog/gem/diru/test
159
+ 27: /home/tero/prog/gem/diru/test
160
+ 26: /home/tero/prog/gem/diru/test/dir_0/dir_0_4/dir_0_4_0
161
+ 25: /home/tero/prog/gem/diru/test/dir_1
162
+ 24: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_0
163
+ 23: /home/tero/prog/gem/diru/test/dir_1/dir_1_1
164
+ 22: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
165
+ 21: /home/tero/prog/gem/diru/test
166
+ 20: /home/tero/prog/gem/diru/test/dir_0/dir_0_2/dir_0_2_0
153
167
  19: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
154
168
  18: /home/tero/prog/gem/diru/test/dir_0
155
169
  17: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
@@ -192,13 +206,14 @@ g dir_1/dir_1_2
192
206
  /home/tero/prog/gem/diru/test/dir_0/dir_0_1/dir_0_1_0
193
207
  /home/tero/prog/gem/diru/test/dir_0/dir_0_1/dir_0_1_1
194
208
  /home/tero/prog/gem/diru/test/dir_0/dir_0_1/dir_0_1_2
195
- 31: /home/tero/prog/gem/diru/test
196
- 30: /home/tero/prog/gem/diru/test/dir_0/dir_0_4/dir_0_4_0
197
- 29: /home/tero/prog/gem/diru/test/dir_1
198
- 28: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_0
199
- 27: /home/tero/prog/gem/diru/test/dir_1/dir_1_1
200
- 26: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
201
- 25: /home/tero/prog/gem/diru/test
209
+ 32: /home/tero/prog/gem/diru/test
210
+ 31: /home/tero/prog/gem/diru/test/dir_0/dir_0_4/dir_0_4_0
211
+ 30: /home/tero/prog/gem/diru/test/dir_1
212
+ 29: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_0
213
+ 28: /home/tero/prog/gem/diru/test/dir_1/dir_1_1
214
+ 27: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
215
+ 26: /home/tero/prog/gem/diru/test
216
+ 25: /home/tero/prog/gem/diru/test/dir_0/dir_0_2/dir_0_2_0
202
217
  24: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
203
218
  23: /home/tero/prog/gem/diru/test/dir_0
204
219
  22: /home/tero/prog/gem/diru/test/dir_1/dir_1_1/dir_1_1_2
@@ -14,6 +14,8 @@ dr ..
14
14
  dr dir_1_1_2
15
15
  dr r
16
16
  dr h
17
+ dr r "dir_?_2_?"
18
+ dr e "dir_._2_."
17
19
 
18
20
  dr b
19
21
  dr r dir_1_1_2
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diru
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tero Isannainen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-17 00:00:00.000000000 Z
11
+ date: 2017-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: como