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 }