1 module dinu.command.exec;
2 
3 
4 import dinu;
5 
6 
7 __gshared:
8 
9 
10 shared immutable class CommandExec: Command {
11 
12 	string[] parts;
13 
14 	this(string name){
15 		super(Type.script, name, options.colorExec);
16 		parts = name.chompPrefix(getcwd ~ "/").split('/');
17 	}
18 
19 	this(Type type, string name, float[3] color){
20 		super(type, name, color);
21 		parts = [name];
22 	}
23 
24 	override string text(){
25 		return parts.join("/");
26 	}
27 
28 	/+override string prepFilter(string filter){
29 		return filter.expandTilde.absolutePath.buildNormalizedPath;
30 	}+/
31 
32 	override size_t score(){
33 		return 8;
34 	}
35 
36 	override int draw(DrawEmpty draw, int[2] pos, bool selected, immutable(int)[] positions){
37 		foreach(hit; positions){
38 			auto p = hit - (filterText.length - text.length);
39 			if(p < text.length){
40 				auto s = draw.width(text[0..p]);
41 				draw.setColor([0.333, 0.333, 0.333]);
42 				draw.rect([pos.x+s, pos.y-3], [draw.width(text[0..p+1])-s, 1.em]);
43 				//draw.rect([pos.x+s, pos.y+1.em], [draw.width(text[0..p+1])-s, 1], "#999999");
44 			}
45 		}
46 
47 		int advance = 0;
48 		foreach(i, part; parts){
49 			if(i+1 < parts.length){
50 				draw.setColor(options.colorDir);
51 				advance += draw.text([pos.x+advance, pos.y], part, 0);
52 				draw.setColor(options.colorOutput);
53 				advance += draw.text([pos.x+advance, pos.y], "/", 0);
54 			}else{
55 				draw.setColor(options.colorExec);
56 				advance += draw.text([pos.x+advance, pos.y], part, 0);
57 			}
58 		}
59 		return advance;
60 	}
61 
62 	override void run(string parameter){
63 		spawnCommand(name, parameter);
64 	}
65 
66 }