module dinu.loader.executables;


import dinu;


__gshared:


enum ignored = [
	"cd", "clear", "."
];


class ExecutablesLoader: ChoiceLoader {

	override void run(){
		add(new immutable CommandSpecial("cd"));
		add(new immutable CommandSpecial("clear"));
		add(new immutable CommandSpecial("."));
		
		auto execs = pipeShell("compgen -ack -A function | sort -u", Redirect.stdout);

		auto desktops = getAll;

		string[] ignoreExecs;

		foreach(desktop; desktops){
			auto executable = desktop.exec;
			foreach(c; "fFuU")
				executable = executable.replace("%" ~ c, "").strip;
			if(!executable.length)
				continue;
			ignoreExecs ~= executable;
			add(new immutable CommandDesktop([desktop.name, executable].bangJoin));
		}

		foreach(executable; execs.stdout.byLineCopy){
			if(!executable.length || ignored.canFind(executable) || ignoreExecs.canFind(executable))
				continue;
			add(new immutable CommandExec(executable));
		}

	}

}