diff --git a/app/build.gradle b/app/build.gradle
index 9803dca17d9b20dcf7befcdd46ce50aec58efdaa..0fdbfb1b806c81c0715a2f97378e2fa899d83f20 100755
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@ android {
         minSdkVersion 8
         targetSdkVersion 23
 
-        versionCode 90
-        versionName "5.3b"
+        versionCode 91
+        versionName "5.3e"
     }
 
     buildTypes {
diff --git a/app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java b/app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java
index 5dea24cff4f16c0e405e63aa0905d60ccd0a9427..a41d2b72f53134f69bb727e270568d65de21ee03 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java
@@ -117,7 +117,7 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable {
         @Override
         public void onOutput(String output) {
             try {
-                ui.setOutput(output);
+                ui.setOutput(output, true);
             } catch (NullPointerException e) {
                 e.printStackTrace();
             }
@@ -199,7 +199,7 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable {
         }
 
         NotificationManager.create();
-        boolean notifications = NotificationManager.get(boolean.class, NotificationManager.Options.enabled);
+        boolean notifications = XMLPrefsManager.get(boolean.class, NotificationManager.Options.enabled);
         if(notifications) {
             LocalBroadcastManager.getInstance(this).registerReceiver(onNotice, new IntentFilter("Msg"));
             if(!Tuils.hasNotificationAccess(this)) {
@@ -366,7 +366,7 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable {
                         MainPack info = main.getMainPack();
                         main.onCommand(info.lastCommand, null);
                     } else {
-                        ui.setOutput(getString(R.string.output_nopermissions));
+                        ui.setOutput(getString(R.string.output_nopermissions), false);
                         main.sendPermissionNotGrantedWarning();
                     }
                     break;
@@ -385,7 +385,7 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable {
                     break;
                 case COMMAND_SUGGESTION_REQUEST_PERMISSION:
                     if (grantResults.length == 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {
-                        ui.setOutput(getString(R.string.output_nopermissions));
+                        ui.setOutput(getString(R.string.output_nopermissions), false);
                     }
                     break;
             }
@@ -403,14 +403,12 @@ public class LauncherActivity extends AppCompatActivity implements Reloadable {
 
         @Override
         public void onReceive(Context context, Intent intent) {
-//            Log.e("andre", "received");
-
             String pack = intent.getStringExtra("package");
             String title = intent.getStringExtra("title");
             String text = intent.getStringExtra("text");
 
             if(ui != null) {
-                ui.setOutput(pack + ": " + (title == null ? Tuils.EMPTYSTRING : title + (text == null ? Tuils.EMPTYSTRING : " --- ")) + (text == null ? Tuils.EMPTYSTRING : text), intent.getIntExtra("color", Color.RED));
+                ui.setOutput(pack + ": " + (title == null ? Tuils.EMPTYSTRING : title + (text == null ? Tuils.EMPTYSTRING : " --- ")) + (text == null ? Tuils.EMPTYSTRING : text), intent.getIntExtra("color", Color.RED), false);
             }
         }
     };
diff --git a/app/src/main/java/ohi/andre/consolelauncher/MainManager.java b/app/src/main/java/ohi/andre/consolelauncher/MainManager.java
index 874bade574ce3a1fcb55b0e4de5c34a2d098705f..fc90af8b9071bdb5eced513205ca0b83d6147111 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/MainManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/MainManager.java
@@ -8,6 +8,8 @@ import android.os.Handler;
 import android.os.Looper;
 import android.util.Log;
 
+import java.util.Arrays;
+
 import ohi.andre.consolelauncher.commands.Command;
 import ohi.andre.consolelauncher.commands.CommandGroup;
 import ohi.andre.consolelauncher.commands.CommandTuils;
@@ -98,6 +100,7 @@ public class MainManager {
 
     private Thread thread;
     private boolean busy = false;
+    private boolean ctrlced = false;
     private void busy() {
         busy = true;
 
@@ -148,10 +151,12 @@ public class MainManager {
 
 //    command manager
     public void onCommand(String input, String alias) {
-
         if(busy) {
             if(input.equalsIgnoreCase("ctrlc")) {
                 thread.interrupt();
+
+                ctrlced = true;
+
                 notBusy();
                 return;
             }
@@ -239,15 +244,6 @@ public class MainManager {
 
 //            this is the last trigger, it has to say "command not found"
 
-//            boolean su = false;
-//            if (CommandTuils.isSuCommand(input)) {
-//                su = true;
-//                input = input.substring(3);
-//                if (input.startsWith(ShellUtils.COMMAND_SU_ADD + Tuils.SPACE)) {
-//                    input = input.substring(3);
-//                }
-//            }
-
             final String cmd = input;
             final boolean useSU = false;
 
@@ -262,13 +258,18 @@ public class MainManager {
                     ShellUtils.CommandResult result = ShellUtils.execCommand(new String[] {cmd}, useSU, mainPack.currentDirectory.getAbsolutePath(), out);
                     if(Thread.interrupted()) return;
 
+                    if(ctrlced) {
+                        ctrlced = false;
+                        return;
+                    }
+
                     if (result == null || result.result == COMMAND_NOTFOUND || result.result == -1) {
                         out.onOutput(mContext.getString(R.string.output_commandnotfound));
                     } else {
                         String output = result.toString();
                         if(output != null) {
                             output = output.trim();
-                            if(output.length() == 0 ) {
+                            if(output.length() == 0 && result.result > 0) {
                                 output = mainPack.res.getString(R.string.output_commandexitvalue) + Tuils.SPACE + result.result;
                             }
                         }
@@ -336,7 +337,7 @@ public class MainManager {
                             String output = command.exec(mContext.getResources(), info);
                             if(Thread.interrupted()) return;
 
-                            if(output != null) {
+                            if(output != null && !ctrlced) {
                                 out.onOutput(output);
                             }
                         }
diff --git a/app/src/main/java/ohi/andre/consolelauncher/UIManager.java b/app/src/main/java/ohi/andre/consolelauncher/UIManager.java
index 7484bc64631cfa1f0ed7c2363c66e4da8c4a8169..f2ac2c9ac56c0d030a0769d509c2311c234d1819 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/UIManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/UIManager.java
@@ -112,38 +112,38 @@ public class UIManager implements OnTouchListener {
                 return;
             }
 
-            if(st == s.length() - 1 && b == 0 && c == 1 && s.subSequence(st, s.length()).toString().equals(Tuils.SPACE)) {
-                nOfSpace++;
-                originalText = s.toString();
-            } else {
-                nOfSpace = -1;
-                originalText = null;
-                navigatingWithSpace = false;
-            }
-
-            if(nOfSpace == suggestionsView.getChildCount() + 1) {
-                nOfSpace = -2;
-                navigatingWithSpace = false;
-            }
-
-            if(nOfSpace >= 0) {
-                if(nOfSpace == 1 && suggestionsView.getChildCount() == 1) {
-                    nOfSpace = -1;
-                    originalText = null;
-                    navigatingWithSpace = false;
-                } else {
-                    for(int count = 0; count < suggestionsView.getChildCount(); count++) {
-                        SuggestionsManager.Suggestion suggestion = (SuggestionsManager.Suggestion) suggestionsView.getChildAt(count).getTag(R.id.suggestion_id);
-                        if(originalText.trim().endsWith(suggestion.text)) {
-                            nOfSpace = -1;
-                            originalText = null;
-                            navigatingWithSpace = false;
-                            break;
-                        }
-                        if(count == suggestionsView.getChildCount() - 1) return;
-                    }
-                }
-            }
+//            if(st == s.length() - 1 && b == 0 && c == 1 && s.subSequence(st, s.length()).toString().equals(Tuils.SPACE) && !navigatingWithSpace) {
+//                nOfSpace++;
+//                originalText = s.toString();
+//            } else if(!navigatingWithSpace) {
+//                nOfSpace = -1;
+//                originalText = null;
+//                navigatingWithSpace = false;
+//            }
+//
+//            if(nOfSpace == suggestionsView.getChildCount() + 1) {
+//                nOfSpace = -2;
+//                navigatingWithSpace = false;
+//            }
+//
+//            if(nOfSpace >= 0) {
+//                if(nOfSpace == 1 && suggestionsView.getChildCount() == 1) {
+//                    nOfSpace = -1;
+//                    originalText = null;
+//                    navigatingWithSpace = false;
+//                } else {
+//                    for(int count = 0; count < suggestionsView.getChildCount(); count++) {
+//                        SuggestionsManager.Suggestion suggestion = (SuggestionsManager.Suggestion) suggestionsView.getChildAt(count).getTag(R.id.suggestion_id);
+//                        if(originalText.trim().endsWith(suggestion.text)) {
+//                            nOfSpace = -1;
+//                            originalText = null;
+//                            navigatingWithSpace = false;
+//                            break;
+//                        }
+//                        if(count == suggestionsView.getChildCount() - 1) return;
+//                    }
+//                }
+//            }
 
             String text = s.toString();
             int lastSpace = text.lastIndexOf(Tuils.SPACE);
@@ -156,53 +156,53 @@ public class UIManager implements OnTouchListener {
 
         @Override
         public void afterTextChanged(Editable s) {
-            if(nOfSpace == -2) {
-                s.replace(0,s.length(),originalText);
-                originalText = null;
-                return;
-            }
-
-            if(nOfSpace > 0 && s.length() > 0 && call) {
-
-                if(nOfSpace == 1) {
-                    call = false;
-                    s.replace(s.length() - 1, s.length(), Tuils.EMPTYSTRING);
-                    call = true;
-                }
-
-                navigatingWithSpace = true;
-
-                call = false;
-                s.replace(s.length() - 1, s.length(), Tuils.EMPTYSTRING);
-                call = true;
-
-//                int count = suggestionsView.getChildCount();
-                int index = nOfSpace - 1;
-//                if(nOfSpace <= count) {
-//                    index = nOfSpace - 1;
+//            if(nOfSpace == -2) {
+//                s.replace(0,s.length(),originalText);
+//                originalText = null;
+//                return;
+//            }
+//
+//            if(nOfSpace > 0 && s.length() > 0 && call) {
+//                if(nOfSpace == 1) {
+//                    call = false;
+//                    s.replace(s.length() - 1, s.length(), Tuils.EMPTYSTRING);
+//                    call = true;
 //                }
-//                else {
-//                    index = nOfSpace % (count + 1) - 1;
+//
+//                navigatingWithSpace = true;
+//
+//                call = false;
+//                s.replace(s.length() - 1, s.length(), Tuils.EMPTYSTRING);
+//                call = true;
+//
+////                int count = suggestionsView.getChildCount();
+//                int index = nOfSpace - 1;
+////                if(nOfSpace <= count) {
+////                    index = nOfSpace - 1;
+////                }
+////                else {
+////                    index = nOfSpace % (count + 1) - 1;
+////                }
+//
+//                call = false;
+//                if(index != -1) {
+//                    View view = suggestionsView.getChildAt(index);
+//                    SuggestionsManager.Suggestion suggestion = (SuggestionsManager.Suggestion) view.getTag(R.id.suggestion_id);
+//
+//                    String text = suggestion.getText() + Tuils.SPACE;
+//
+//                    if(originalText.length() < s.length() && suggestion.type == SuggestionsManager.Suggestion.TYPE_PERMANENT) {
+//                        s.replace(originalText.length(), s.length(), text);
+//                    }  else {
+//                        s.replace(0, s.length(), text);
+//                    }
+//                } else {
+//                    Log.e("andre", "4");
+//                    s.replace(0, s.length(), originalText);
+//                    navigatingWithSpace = false;
 //                }
-
-                call = false;
-                if(index != -1) {
-                    View view = suggestionsView.getChildAt(index);
-                    SuggestionsManager.Suggestion suggestion = (SuggestionsManager.Suggestion) view.getTag(R.id.suggestion_id);
-
-                    String text = suggestion.getText() + Tuils.SPACE;
-
-                    if(originalText.length() < s.length() && suggestion.type == SuggestionsManager.Suggestion.TYPE_PERMANENT) {
-                        s.replace(originalText.length(), s.length(), text);
-                    }  else {
-                        s.replace(0, s.length(), text);
-                    }
-                } else {
-                    s.replace(0, s.length(), originalText);
-                    navigatingWithSpace = false;
-                }
-                call = true;
-            }
+//                call = true;
+//            }
         }
     };
 
@@ -518,12 +518,12 @@ public class UIManager implements OnTouchListener {
         mTerminalAdapter.setDefaultHint();
     }
 
-    public void setOutput(String string) {
-        mTerminalAdapter.setOutput(string);
+    public void setOutput(String string, boolean fromUser) {
+        mTerminalAdapter.setOutput(string, fromUser);
     }
 
-    public void setOutput(String s, int color) {
-        mTerminalAdapter.setOutput(s, color);
+    public void setOutput(String s, int color, boolean fromUser) {
+        mTerminalAdapter.setOutput(s, color, fromUser);
     }
 
     public void disableSuggestions() {
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/Command.java b/app/src/main/java/ohi/andre/consolelauncher/commands/Command.java
index ab5acc668a410b7d7f87d7d53952bf94b612e49b..881f48ca34a30b7582171581644c223f4bf3666c 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/Command.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/Command.java
@@ -1,6 +1,7 @@
 package ohi.andre.consolelauncher.commands;
 
 import android.content.res.Resources;
+import android.util.Log;
 
 import ohi.andre.consolelauncher.R;
 import ohi.andre.consolelauncher.commands.specific.ParamCommand;
@@ -17,6 +18,9 @@ public class Command {
     public String exec(Resources resources, ExecutePack info) throws Exception {
         info.set(mArgs);
 
+        if(cmd instanceof ParamCommand && mArgs != null && (mArgs.length == 0 || ((ParamCommand) cmd).argsForParam((String) mArgs[0]) == null)) {
+            return info.context.getString(R.string.output_invalid_param) + Tuils.SPACE + mArgs[0];
+        }
         if (indexNotFound != -1) {
             return cmd.onArgNotFound(info, indexNotFound);
         }
@@ -25,9 +29,6 @@ public class Command {
                         ((ParamCommand) cmd).argsForParam((String) mArgs[0]).length + 1 > nArgs)) {
             return cmd.onNotArgEnough(info, nArgs);
         }
-        if(cmd instanceof ParamCommand && ((ParamCommand) cmd).argsForParam((String) mArgs[0]) == null) {
-            return info.context.getString(R.string.output_invalid_param) + Tuils.SPACE + mArgs[0];
-        }
         if (cmd.maxArgs() != CommandAbstraction.UNDEFINIED && nArgs > cmd.maxArgs()) {
             return resources.getString(R.string.output_toomanyargs);
         }
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java
index 18a2fbd473a1ffdf2d8a52825d597f20e041f338..fc9b31f7040f16d7b6ab53ac29c367ac98ae1f50 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java
@@ -2,7 +2,6 @@ package ohi.andre.consolelauncher.commands;
 
 import android.annotation.SuppressLint;
 import android.graphics.Color;
-import android.util.Log;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -217,32 +216,10 @@ public class CommandTuils {
             return null;
         }
 
-        List<String> strings = new ArrayList<>();
-
-        char[] chars = input.toCharArray();
-        String arg = "";
-        int index;
-
-        for (index = 0; index < chars.length; index++) {
-            char c = chars[index];
-            if (c == ' ') {
-                if (arg.length() > 0) {
-                    strings.add(arg);
-                    arg = "";
-                    continue;
-                } else {
-//                	prevent double space
-                    continue;
-                }
-            }
-
-            arg = arg.concat(c + Tuils.EMPTYSTRING);
-        }
-
-        if (arg.length() > 0)
-            strings.add(arg);
+        String[] strings = input.split(Tuils.SPACE + "+");
+        List<String> arg = new ArrayList<>(Arrays.asList(strings));
 
-        return new ArgInfo(strings, input.substring(index), true, strings.size());
+        return new ArgInfo(arg, null, true, arg.size());
     }
 
     private static ArgInfo command(String string, CommandGroup active) {
@@ -267,7 +244,7 @@ public class CommandTuils {
                 while (count-- >= 0)
                     strings.remove(0);
 
-                String residual = Tuils.toPlanString(strings, " ");
+                String residual = Tuils.toPlanString(strings, Tuils.SPACE);
                 return new ArgInfo(info.file, residual, true, 1);
             }
 
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/alias.java b/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/alias.java
index db4e64e685adb9a572b410a4d53b995d1db03261..86eb97ab7480ca8ceab9a71f7f092c1de72b6d49 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/alias.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/alias.java
@@ -1,22 +1,116 @@
 package ohi.andre.consolelauncher.commands.main.raw;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
 import ohi.andre.consolelauncher.R;
 import ohi.andre.consolelauncher.commands.CommandAbstraction;
 import ohi.andre.consolelauncher.commands.ExecutePack;
 import ohi.andre.consolelauncher.commands.main.MainPack;
+import ohi.andre.consolelauncher.commands.specific.ParamCommand;
+import ohi.andre.consolelauncher.managers.AliasManager;
+import ohi.andre.consolelauncher.managers.XMLPrefsManager;
+import ohi.andre.consolelauncher.tuils.Tuils;
 
 /**
  * Created by andre on 15/11/15.
  */
-public class alias implements CommandAbstraction {
+public class alias extends ParamCommand {
+
+    private enum Param implements ohi.andre.consolelauncher.commands.main.Param {
+
+        add {
+            @Override
+            public String exec(ExecutePack pack) {
+                ArrayList<String> args = pack.get(ArrayList.class, 1);
+                if(args.size() < 2) return pack.context.getString(R.string.output_lessarg);
+                return ((MainPack) pack).aliasManager.add(args.remove(0), Tuils.toPlanString(args, Tuils.SPACE));
+            }
+
+            @Override
+            public int[] args() {
+                return new int[] {CommandAbstraction.TEXTLIST};
+            }
+        },
+        remove {
+            @Override
+            public String exec(ExecutePack pack) {
+                ArrayList<String> args = pack.get(ArrayList.class, 1);
+                if(args.size() < 1) return pack.context.getString(R.string.output_lessarg);
+                if(((MainPack) pack).aliasManager.remove(args.get(0))) return null;
+                else return pack.context.getString(R.string.output_aliasnotfound) + Tuils.SPACE + args.get(0);
+            }
+
+            @Override
+            public int[] args() {
+                return new int[] {CommandAbstraction.TEXTLIST};
+            }
+        },
+        file {
+            @Override
+            public String exec(ExecutePack pack) {
+                pack.context.startActivity(Tuils.openFile(new File(Tuils.getFolder(), AliasManager.PATH)));
+                return null;
+            }
+
+            @Override
+            public int[] args() {
+                return new int[0];
+            }
+        },
+        ls {
+            @Override
+            public String exec(ExecutePack pack) {
+                return ((MainPack) pack).aliasManager.printAliases();
+            }
+
+            @Override
+            public int[] args() {
+                return new int[0];
+            }
+        };
+
+        static Param get(String p) {
+            p = p.toLowerCase();
+            Param[] ps = values();
+            for (Param p1 : ps)
+                if (p.endsWith(p1.label()))
+                    return p1;
+            return null;
+        }
+
+        static String[] labels() {
+            Param[] ps = values();
+            String[] ss = new String[ps.length];
+
+            for (int count = 0; count < ps.length; count++) {
+                ss[count] = ps[count].label();
+            }
+
+            return ss;
+        }
+
+        @Override
+        public String label() {
+            return Tuils.MINUS + name();
+        }
+    }
+
+
+    @Override
+    public String[] params() {
+        return Param.labels();
+    }
+
+    @Override
+    protected ohi.andre.consolelauncher.commands.main.Param paramForString(String param) {
+        return Param.get(param);
+    }
 
     @Override
-    public String exec(ExecutePack pack) {
-        MainPack info = (MainPack) pack;
-        if (info.aliasManager.getNum() > 0)
-            return info.aliasManager.printAliases();
-        else
-            return info.res.getString(helpRes());
+    protected String doThings(ExecutePack pack) {
+        return null;
     }
 
     @Override
@@ -26,17 +120,12 @@ public class alias implements CommandAbstraction {
 
     @Override
     public int minArgs() {
-        return 0;
+        return 1;
     }
 
     @Override
     public int maxArgs() {
-        return 0;
-    }
-
-    @Override
-    public int[] argType() {
-        return new int[0];
+        return CommandAbstraction.UNDEFINIED;
     }
 
     @Override
@@ -46,7 +135,7 @@ public class alias implements CommandAbstraction {
 
     @Override
     public String onNotArgEnough(ExecutePack info, int nArgs) {
-        return null;
+        return ((MainPack) info).aliasManager.printAliases();
     }
 
     @Override
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/apps.java b/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/apps.java
index 91e62f6c0d58b0dfd98c87ee2ec01070bbb9b39f..e35ceba82cf5bd6ffc59faf0714aab1fe70c667c 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/apps.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/apps.java
@@ -4,6 +4,8 @@ import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
 
+import java.io.File;
+
 import ohi.andre.consolelauncher.R;
 import ohi.andre.consolelauncher.commands.CommandAbstraction;
 import ohi.andre.consolelauncher.commands.ExecutePack;
@@ -87,6 +89,18 @@ public class apps extends ParamCommand {
                 Intent intent = ((MainPack) pack).appsManager.getIntent(pack.get(String.class, 1));
                 pack.context.startActivity(intent);
 
+                return null;
+            }
+        },
+        file {
+            @Override
+            public int[] args() {
+                return new int[0];
+            }
+
+            @Override
+            public String exec(ExecutePack pack) {
+                pack.context.startActivity(Tuils.openFile(new File(Tuils.getFolder(), AppsManager.PATH)));
                 return null;
             }
         };
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/config.java b/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/config.java
index 7250689e4e24b7100a918753c8d07098de53f6e4..412930f18cd1c2819c58fc89c0bbf71cbb8497b8 100644
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/config.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/config.java
@@ -1,11 +1,13 @@
 package ohi.andre.consolelauncher.commands.main.raw;
 
+import android.util.Log;
+
 import java.io.File;
+import java.util.Arrays;
 
 import ohi.andre.consolelauncher.R;
 import ohi.andre.consolelauncher.commands.CommandAbstraction;
 import ohi.andre.consolelauncher.commands.ExecutePack;
-import ohi.andre.consolelauncher.commands.main.Param;
 import ohi.andre.consolelauncher.commands.specific.ParamCommand;
 import ohi.andre.consolelauncher.managers.XMLPrefsManager;
 import ohi.andre.consolelauncher.tuils.Tuils;
@@ -39,8 +41,8 @@ public class config extends ParamCommand {
 
             @Override
             public String exec(ExecutePack pack) {
-                File file = pack.get(File.class, 1);
-                Tuils.openFile(file);
+                File file = new File(Tuils.getFolder(), pack.get(String.class, 1));
+                pack.context.startActivity(Tuils.openFile(file));
                 return null;
             }
         };
@@ -48,9 +50,7 @@ public class config extends ParamCommand {
         static Param get(String p) {
             p = p.toLowerCase();
             Param[] ps = values();
-            for (Param p1 : ps)
-                if (p.endsWith(p1.label()))
-                    return p1;
+            for (Param p1 : ps) if (p.endsWith(p1.label())) return p1;
             return null;
         }
 
@@ -108,7 +108,6 @@ public class config extends ParamCommand {
 
     @Override
     public String onArgNotFound(ExecutePack pack, int indexNotFound) {
-        if(indexNotFound == 0) return pack.context.getString(R.string.output_invalid_param);
         return pack.context.getString(R.string.output_invalidarg);
     }
 
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/hideapp.java b/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/hideapp.java
deleted file mode 100644
index b599a14b08b4e05dbfa946afb1edc2fcf0d882b8..0000000000000000000000000000000000000000
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/hideapp.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package ohi.andre.consolelauncher.commands.main.raw;
-
-import android.app.Activity;
-import android.content.SharedPreferences;
-
-import ohi.andre.consolelauncher.R;
-import ohi.andre.consolelauncher.commands.CommandAbstraction;
-import ohi.andre.consolelauncher.commands.ExecutePack;
-import ohi.andre.consolelauncher.commands.main.MainPack;
-import ohi.andre.consolelauncher.tuils.Tuils;
-
-/**
- * Created by francescoandreuzzi on 04/03/2017.
- */
-
-public class hideapp implements CommandAbstraction {
-
-    @Override
-    public String exec(ExecutePack pack) throws Exception {
-        String app = pack.get(String.class, 0);
-        hideApp((MainPack) pack, app);
-        return null;
-    }
-
-    @Override
-    public int minArgs() {
-        return 1;
-    }
-
-    @Override
-    public int maxArgs() {
-        return 1;
-    }
-
-    @Override
-    public int[] argType() {
-        return new int[] {CommandAbstraction.VISIBLE_PACKAGE};
-    }
-
-    @Override
-    public int priority() {
-        return 2;
-    }
-
-    @Override
-    public int helpRes() {
-        return R.string.help_appshide;
-    }
-
-    @Override
-    public String onArgNotFound(ExecutePack pack, int index) {
-        MainPack info = (MainPack) pack;
-        return info.res.getString(R.string.output_appnotfound);
-    }
-
-    @Override
-    public String onNotArgEnough(ExecutePack pack, int nArgs) {
-        MainPack info = (MainPack) pack;
-        return info.res.getString(helpRes());
-    }
-
-    private String hideApp(MainPack info, String app) {
-        SharedPreferences.Editor editor = ((Activity) info.context).getPreferences(0).edit();
-        String result = info.appsManager.hideApp(app);
-        if (result != null) {
-            editor.commit();
-            return result + Tuils.SPACE + info.res.getString(R.string.output_hideapp);
-        } else
-            return info.res.getString(R.string.output_appnotfound);
-    }
-}
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/notifications.java b/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/notifications.java
index 6aa0cbf677dca4c2dfa2e73c422197647ef466d3..1fa59c3efe306e29bb1cf2d8e059a6581821d48a 100644
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/notifications.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/notifications.java
@@ -1,6 +1,9 @@
 package ohi.andre.consolelauncher.commands.main.raw;
 
+import java.io.File;
+
 import ohi.andre.consolelauncher.R;
+import ohi.andre.consolelauncher.commands.Command;
 import ohi.andre.consolelauncher.commands.CommandAbstraction;
 import ohi.andre.consolelauncher.commands.ExecutePack;
 import ohi.andre.consolelauncher.commands.main.MainPack;
@@ -15,10 +18,6 @@ import ohi.andre.consolelauncher.tuils.Tuils;
 
 public class notifications extends ParamCommand {
 
-    private final String INCLUDE_PARAM = "-inc";
-    private final String EXCLUDE_PARAM = "-exc";
-    private final String COLOR_PARAM = "-clr";
-
     private enum Param implements ohi.andre.consolelauncher.commands.main.Param {
 
         inc {
@@ -33,7 +32,7 @@ public class notifications extends ParamCommand {
                 return new int[] {CommandAbstraction.VISIBLE_PACKAGE};
             }
         },
-        exc{
+        exc {
             @Override
             public String exec(ExecutePack pack) {
                 NotificationManager.notificationsChangeFor(new NotificationManager.NotificatedApp(pack.get(String.class, 1), -1, false));
@@ -45,7 +44,7 @@ public class notifications extends ParamCommand {
                 return new int[] {CommandAbstraction.VISIBLE_PACKAGE};
             }
         },
-        clr{
+        clr {
             @Override
             public String exec(ExecutePack pack) {
                 if(pack.args.length < 3) return ((MainPack) pack).context.getString(R.string.help_notifications);
@@ -59,6 +58,42 @@ public class notifications extends ParamCommand {
             public int[] args() {
                 return new int[] {CommandAbstraction.COLOR, CommandAbstraction.VISIBLE_PACKAGE};
             }
+        },
+        title_regex {
+            @Override
+            public String exec(ExecutePack pack) {
+                NotificationManager.excludeRegex(pack.get(String.class, 1), "title");
+                return null;
+            }
+
+            @Override
+            public int[] args() {
+                return new int[] {CommandAbstraction.PLAIN_TEXT};
+            }
+        },
+        text_regex {
+            @Override
+            public String exec(ExecutePack pack) {
+                NotificationManager.excludeRegex(pack.get(String.class, 1), "text");
+                return null;
+            }
+
+            @Override
+            public int[] args() {
+                return new int[] {CommandAbstraction.PLAIN_TEXT};
+            }
+        },
+        file {
+            @Override
+            public int[] args() {
+                return new int[0];
+            }
+
+            @Override
+            public String exec(ExecutePack pack) {
+                pack.context.startActivity(Tuils.openFile(new File(Tuils.getFolder(), NotificationManager.PATH)));
+                return null;
+            }
         };
 
         static Param get(String p) {
@@ -104,7 +139,7 @@ public class notifications extends ParamCommand {
 
     @Override
     public int minArgs() {
-        return 2;
+        return 0;
     }
 
     @Override
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/unhideapp.java b/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/unhideapp.java
deleted file mode 100644
index b82ec5a2e10945f7381be6c7a0f62a646a2dd1d4..0000000000000000000000000000000000000000
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/main/raw/unhideapp.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package ohi.andre.consolelauncher.commands.main.raw;
-
-import android.app.Activity;
-import android.content.SharedPreferences;
-
-import ohi.andre.consolelauncher.R;
-import ohi.andre.consolelauncher.commands.CommandAbstraction;
-import ohi.andre.consolelauncher.commands.ExecutePack;
-import ohi.andre.consolelauncher.commands.main.MainPack;
-import ohi.andre.consolelauncher.tuils.Tuils;
-
-/**
- * Created by francescoandreuzzi on 04/03/2017.
- */
-
-public class unhideapp implements CommandAbstraction {
-    @Override
-    public String exec(ExecutePack pack) throws Exception {
-        String app = pack.get(String.class, 0);
-        unHideApp((MainPack) pack, app);
-        return null;
-    }
-
-    @Override
-    public int minArgs() {
-        return 1;
-    }
-
-    @Override
-    public int maxArgs() {
-        return 1;
-    }
-
-    @Override
-    public int[] argType() {
-        return new int[] {CommandAbstraction.HIDDEN_PACKAGE};
-    }
-
-    @Override
-    public int priority() {
-        return 2;
-    }
-
-    @Override
-    public int helpRes() {
-        return R.string.help_appsunhide;
-    }
-
-    @Override
-    public String onArgNotFound(ExecutePack pack, int index) {
-        MainPack info = (MainPack) pack;
-        return info.res.getString(R.string.output_appnotfound);
-    }
-
-    @Override
-    public String onNotArgEnough(ExecutePack pack, int nArgs) {
-        MainPack info = (MainPack) pack;
-        return info.res.getString(helpRes());
-    }
-
-    private String unHideApp(MainPack info, String app) {
-        SharedPreferences.Editor editor = ((Activity) info.context).getPreferences(0).edit();
-        String result = info.appsManager.unhideApp(app);
-        if (result != null) {
-            editor.commit();
-            return result + Tuils.SPACE + info.res.getString(R.string.output_unhideapp);
-        } else
-            return info.res.getString(R.string.output_appnotfound);
-    }
-}
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/specific/ParamCommand.java b/app/src/main/java/ohi/andre/consolelauncher/commands/specific/ParamCommand.java
index 833ee60fef6328e634301ee2d92a1fe4ee304791..328c89c9f0783d98e3273fd8ae11a7749e9bda7d 100644
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/specific/ParamCommand.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/specific/ParamCommand.java
@@ -6,6 +6,7 @@ import ohi.andre.consolelauncher.R;
 import ohi.andre.consolelauncher.commands.CommandAbstraction;
 import ohi.andre.consolelauncher.commands.ExecutePack;
 import ohi.andre.consolelauncher.commands.main.Param;
+import ohi.andre.consolelauncher.tuils.Tuils;
 
 /**
  * Created by francescoandreuzzi on 01/05/2017.
@@ -23,11 +24,11 @@ public abstract class ParamCommand implements CommandAbstraction {
         String o = doThings(pack);
         if(o != null) return o;
 
-        try {
-            return paramForString(pack.get(String.class, 0)).exec(pack);
-        } catch (NullPointerException e) {
-            return pack.context.getString(R.string.output_invalid_param);
+        Param param = paramForString(pack.get(String.class, 0));
+        if(param == null) {
+            return pack.context.getString(R.string.output_invalid_param) + Tuils.SPACE + pack.get(String.class, 0);
         }
+        return param.exec(pack);
     }
 
     public final int[] argsForParam(String param) {
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/tuixt/TuixtActivity.java b/app/src/main/java/ohi/andre/consolelauncher/commands/tuixt/TuixtActivity.java
index dc125a2ff477b1550b5dd3ed880ee02e3536a420..876722f2745768f5ab39ea5dc24ff26d98e0491f 100644
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/tuixt/TuixtActivity.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/tuixt/TuixtActivity.java
@@ -10,6 +10,7 @@ import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.text.InputType;
 import android.text.method.ScrollingMovementMethod;
+import android.util.Log;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
@@ -61,6 +62,8 @@ public class TuixtActivity extends Activity {
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        Log.e("andre", "0");
+
         final Typeface lucidaConsole = Typeface.createFromAsset(getAssets(), "lucida_console.ttf");
         final LinearLayout rootView = new LinearLayout(this);
 
@@ -73,6 +76,7 @@ public class TuixtActivity extends Activity {
             path = file.getAbsolutePath();
         }
 
+        Log.e("andre", "1");
         final File file = new File(path);
 
         CommandGroup group = new CommandGroup(this, "ohi.andre.consolelauncher.commands.tuixt.raw");
@@ -87,6 +91,8 @@ public class TuixtActivity extends Activity {
             }
         }
 
+        Log.e("andre", "2");
+
         if (!skinManager.useSystemWp) {
             rootView.setBackgroundColor(skinManager.bgColor);
         } else {
@@ -106,6 +112,8 @@ public class TuixtActivity extends Activity {
 
         TextView prefixView = (TextView) inputOutputView.findViewById(R.id.prefix_view);
 
+        Log.e("andre", "3");
+
         ImageButton submitView = (ImageButton) inputOutputView.findViewById(R.id.submit_tv);
         boolean showSubmit = skinManager.showSubmit;
         if (!showSubmit) {
@@ -124,6 +132,7 @@ public class TuixtActivity extends Activity {
         prefixView.setTextSize(skinManager.getTextSize());
         prefixView.setText(prefix);
 
+        Log.e("andre", "4");
 
         if (submitView != null) {
             submitView.setColorFilter(skinManager.inputColor);
@@ -150,6 +159,8 @@ public class TuixtActivity extends Activity {
             }
         });
 
+        Log.e("andre", "5");
+
         outputView.setTypeface(skinManager.systemFont ? Typeface.DEFAULT : lucidaConsole);
         outputView.setTextSize(skinManager.getTextSize());
         outputView.setTextColor(skinManager.outputColor);
@@ -187,6 +198,8 @@ public class TuixtActivity extends Activity {
 
         setContentView(rootView);
 
+        Log.e("andre", "6");
+
 //
 //
 //        end setup part, now start
@@ -220,6 +233,7 @@ public class TuixtActivity extends Activity {
                         }
                     });
                 } catch (Exception e) {
+                    Log.e("andre", "", e);
                     intent.putExtra(ERROR_KEY, e.toString());
                     setResult(1, intent);
                     finish();
@@ -237,6 +251,8 @@ public class TuixtActivity extends Activity {
             inputView.setText("help");
             inputView.setSelection(inputView.getText().length());
         }
+
+        Log.e("andre", "7");
     }
 
     @Override
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java
index 9dbb3115a69f1720fcf6976a09560479a8356ea1..6fe05f570a1fa1a9dfb134f43342f592a7cbd57d 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java
@@ -6,6 +6,7 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -16,11 +17,12 @@ import ohi.andre.consolelauncher.tuils.Tuils;
 import ohi.andre.consolelauncher.tuils.interfaces.Reloadable;
 
 import static ohi.andre.consolelauncher.managers.XMLPrefsManager.resetFile;
+import static ohi.andre.consolelauncher.managers.XMLPrefsManager.set;
 
 public class AliasManager implements Reloadable {
 
-    private final String NAME = "ALIAS";
-    private final String PATH = "alias.xml";
+    public static final String NAME = "ALIAS";
+    public static final String PATH = "alias.xml";
 
     private final String VALUE_ATTRIBUTE = "value";
 
@@ -41,10 +43,6 @@ public class AliasManager implements Reloadable {
         return output.trim();
     }
 
-    public int getNum() {
-        return alias.size();
-    }
-
     public String getAlias(String s) {
         XMLPrefsManager.XMLPrefsEntry entry = alias.get(s);
         if(entry != null) return entry.value;
@@ -98,4 +96,20 @@ public class AliasManager implements Reloadable {
             alias.add(nn, node.getAttributes().getNamedItem(VALUE_ATTRIBUTE).getNodeValue());
         }
     }
+
+    public String add(String name, String value) {
+        return set(new File(Tuils.getFolder(), PATH), NAME, name, new String[] {VALUE_ATTRIBUTE}, new String[] {value});
+    }
+
+    public boolean remove(String name) {
+        return XMLPrefsManager.removeNode(new File(Tuils.getFolder(), PATH), NAME, name);
+    }
+
+    public List<String> getAliases() {
+        List<String> labels = new ArrayList<>();
+        if(alias == null) return labels;
+
+        for(int count = 0; count < alias.size(); count++) labels.add(alias.at(count).key);
+        return labels;
+    }
 }
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java
index c3bbd9518eb4df7d55acd6738d310e62c2c5dd7f..2fa92cb29b0c356b49cb5a3053dc007420252d29 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java
@@ -66,6 +66,8 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement {
     private SharedPreferences preferences;
     private SharedPreferences.Editor editor;
 
+    private static XMLPrefsManager.XmlPrefsElement instance = null;
+
     public enum Options implements XMLPrefsManager.XMLPrefsSave {
 
         default_app_n1 {
@@ -108,8 +110,8 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement {
         }
 
         @Override
-        public XMLPrefsManager.XMLPrefsRoot parent() {
-            return null;
+        public XMLPrefsManager.XmlPrefsElement parent() {
+            return instance;
         }
 
         @Override
@@ -141,6 +143,8 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement {
     };
 
     public AppsManager(Context context, Outputable outputable) {
+        instance = this;
+
         this.context = context;
         this.outputable = outputable;
 
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/TerminalMAnager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/TerminalMAnager.java
index 0778589a8252cd0655d8335cd75434daa3f91ce8..15406c978b0daa53737475bee558b86f11bc46bf 100644
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/TerminalMAnager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/TerminalMAnager.java
@@ -242,52 +242,30 @@ public class TerminalManager {
         return true;
     }
 
-    public void setOutput(String output) {
-        if (output == null) {
-            return;
-        }
-
-        output = output.trim();
-        if(output.equals(Tuils.EMPTYSTRING)) {
-            return;
-        }
-
-        if(output.equals(clear.CLEAR)) {
-            clear();
-            return;
-        }
-
-        writeToView(output, OUTPUT);
+    public void setOutput(String output, boolean fromUser) {
+        setOutput(output, -1, OUTPUT, fromUser);
+    }
 
-        for(Messager messager : messagers) {
-            if(cmds != 0 && cmds % messager.n == 0) {
-                writeToView(messager.message, OUTPUT);
-            }
-        }
+    public void setOutput(String output, int color, boolean fromUser) {
+        setOutput(output, color, -1, fromUser);
     }
 
-    public void setOutput(String output, int color) {
-        if (output == null) {
-            return;
-        }
+    public void setOutput(String output, int color, int type, boolean fromUser) {
+        if (output == null) return;
 
         output = output.trim();
-        if(output.equals(Tuils.EMPTYSTRING)) {
-            return;
-        }
+        if(output.equals(Tuils.EMPTYSTRING)) return;
 
         if(output.equals(clear.CLEAR)) {
             clear();
             return;
         }
 
-        writeToView(color, output);
+        if(color == -1) writeToView(output, type);
+        else writeToView(color, output);
 
-        for(Messager messager : messagers) {
-            if(cmds != 0 && cmds % messager.n == 0) {
-                writeToView(messager.message, OUTPUT);
-            }
-        }
+        if(fromUser)
+            for (Messager messager : messagers) if (cmds != 0 && cmds % messager.n == 0) writeToView(messager.message, OUTPUT);
     }
 
     public void onBackPressed() {
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/XMLPrefsManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/XMLPrefsManager.java
index ed5f731c0574df84a3de06b8cfd3e9378934a2a5..1c3856124db4124f914ae1bcc526510c0335a81f 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/XMLPrefsManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/XMLPrefsManager.java
@@ -395,7 +395,7 @@ public class XMLPrefsManager {
         show_alias_content {
             @Override
             public String defaultValue() {
-                return "true";
+                return "false";
             }
         },
         show_launch_history {
@@ -465,8 +465,6 @@ public class XMLPrefsManager {
         public List<XMLPrefsSave> copy;
 
         XMLPrefsRoot(String path, XMLPrefsSave[] en) {
-            Log.e("andre", Arrays.toString(en));
-
             this.path = path;
             this.values = new XMLPrefsList();
 
@@ -520,10 +518,16 @@ public class XMLPrefsManager {
         }
 
         public XMLPrefsEntry get(Object o) {
+            if(o instanceof Integer) return at((Integer) o);
+
             for(XMLPrefsEntry e : list) if(e.equals(o)) return e;
             return null;
         }
 
+        public XMLPrefsEntry at(int index) {
+            return list.get(index);
+        }
+
         public int size() {
             return list.size();
         }
@@ -655,14 +659,14 @@ public class XMLPrefsManager {
         } catch (Exception e) {}
     }
 
-    public static void set(File file, String rootName, String elementName, String[] attributeNames, String[] attributeValues) {
+    public static String set(File file, String rootName, String elementName, String[] attributeNames, String[] attributeValues) {
         String[][] values = new String[1][attributeValues.length];
         values[0] = attributeValues;
 
-        setMany(file, rootName, new String[] {elementName}, attributeNames, values);
+        return setMany(file, rootName, new String[] {elementName}, attributeNames, values);
     }
 
-    public static void setMany(File file, String rootName, String elementNames[], String[] attributeNames, String[][] attributeValues) {
+    public static String setMany(File file, String rootName, String elementNames[], String[] attributeNames, String[][] attributeValues) {
         try {
             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
             DocumentBuilder builder = factory.newDocumentBuilder();
@@ -671,7 +675,7 @@ public class XMLPrefsManager {
             try {
                 d = builder.parse(file);
             } catch (Exception e) {
-                return;
+                return e.toString();
             }
 
             Element root = (Element) d.getElementsByTagName(rootName).item(0);
@@ -687,7 +691,7 @@ public class XMLPrefsManager {
                     for(int c = 0; c < attributeNames.length; c++) e.setAttribute(attributeNames[c], attributeValues[index][c]);
 
                     writeTo(d, file);
-                    return;
+                    return null;
                 }
             }
 
@@ -699,10 +703,42 @@ public class XMLPrefsManager {
             }
 
             writeTo(d, file);
+        } catch (Exception e) {
+            return e.toString();
+        }
+        return null;
+    }
+
+    public static boolean removeNode(File file, String rootName, String nodeName) {
+        try {
+            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder builder = factory.newDocumentBuilder();
+
+            Document d;
+            try {
+                d = builder.parse(file);
+            } catch (Exception e) {
+                return false;
+            }
+
+            Element root = (Element) d.getElementsByTagName(rootName).item(0);
+            NodeList nodes = root.getElementsByTagName("*");
+
+            for(int count = 0; count < nodes.getLength(); count++) {
+                Node node = nodes.item(count);
+
+                if(node.getNodeName().equalsIgnoreCase(nodeName)) {
+                    root.removeChild(node);
+                    writeTo(d, file);
+                    return true;
+                }
+            }
         } catch (Exception e) {}
+
+        return false;
     }
 
-    public static String[] getAttrValues(File file, String rootName, String elementName, String[] attrNames) {
+    public static String[] getAttrValues(File file, String rootName, String nodeName, String[] attrNames) {
         try {
             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
             DocumentBuilder builder = factory.newDocumentBuilder();
@@ -720,7 +756,7 @@ public class XMLPrefsManager {
             for(int count = 0; count < nodes.getLength(); count++) {
                 Node node = nodes.item(count);
 
-                if(node.getNodeName().equals(elementName)) {
+                if(node.getNodeName().equals(nodeName)) {
                     Element e = (Element) node;
 
                     String[] values = new String[attrNames.length];
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationManager.java
index 3e1472135f9e0bdd88621af5ba225e54f30daf8d..ff9293d6e39ca116fe9172ca1672195bf44e505d 100644
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationManager.java
@@ -3,6 +3,7 @@ package ohi.andre.consolelauncher.managers.notifications;
 import android.annotation.TargetApi;
 import android.graphics.Color;
 import android.os.Build;
+import android.util.Log;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -17,6 +18,8 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -41,10 +44,17 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
 
     private static final String COLOR_ATTRIBUTE = "color";
     private static final String ENABLED_ATTRIBUTE = "enabled";
+    private static final String ON_ATTRIBUTE = "on";
+
+    private static final String REGEX_NODE = "regex";
 
     public static final String PATH = "notifications.xml";
     private static final String NAME = "NOTIFICATIONS";
 
+    private static XMLPrefsManager.XmlPrefsElement instance = null;
+
+    public static boolean default_app_state;
+
     public enum Options implements XMLPrefsManager.XMLPrefsSave {
 
         enabled {
@@ -53,6 +63,12 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
                 return "true";
             }
         },
+        default_app_state {
+            @Override
+            public String defaultValue() {
+                return "true";
+            }
+        },
         default_color {
             @Override
             public String defaultValue() {
@@ -61,8 +77,8 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
         };
 
         @Override
-        public XMLPrefsManager.XMLPrefsRoot parent() {
-            return null;
+        public XMLPrefsManager.XmlPrefsElement parent() {
+            return instance;
         }
 
         @Override
@@ -86,27 +102,32 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
         set(new File(Tuils.getFolder(), PATH), NAME, save.label(), new String[] {VALUE_ATTRIBUTE}, new String[] {value});
     }
 
-    private static File folder;
     private static XMLPrefsManager.XMLPrefsList values;
-    private static Map<String, Integer> colors;
+    private static List<NotificatedApp> apps;
+    private static List<Pattern> titleRegexs;
+    private static List<Pattern> textRegexs;
     private static boolean created = false;
 
     private NotificationManager() {}
 
     public static void create() {
+        instance = new NotificationManager();
+
+        default_app_state = XMLPrefsManager.get(boolean.class, Options.default_app_state);
+
         if(created) return;
         created = true;
 
-        folder = Tuils.getFolder();
-
-        colors = new HashMap<>();
+        apps = new ArrayList<>();
+        textRegexs = new ArrayList<>();
+        titleRegexs = new ArrayList<>();
         values = new XMLPrefsManager.XMLPrefsList();
 
         try {
             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
             DocumentBuilder builder = factory.newDocumentBuilder();
 
-            File file = new File(folder, PATH);
+            File file = new File(Tuils.getFolder(), PATH);
             if(!file.exists() && !file.createNewFile()) return;
 
             Document d;
@@ -141,19 +162,33 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
                             break;
                         }
                     }
+                } else if(nn.equals(REGEX_NODE)) {
+                    if(node.getNodeType() == Node.ELEMENT_NODE) {
+                        Element e = (Element) node;
+                        String regex = e.hasAttribute(REGEX_NODE) ? e.getAttribute(REGEX_NODE) : null;
+                        if(regex == null) continue;
+                        String on = e.hasAttribute(ON_ATTRIBUTE) ? e.getAttribute(ON_ATTRIBUTE) : null;
+                        if(on == null || on.equals("text") || !on.equals("title")) textRegexs.add(Pattern.compile(regex));
+                        else titleRegexs.add(Pattern.compile(regex));
+                    }
                 } else {
                     if(node.getNodeType() == Node.ELEMENT_NODE) {
                         Element e = (Element) node;
 
+                        NotificatedApp app;
+
                         boolean enabled = !e.hasAttribute(ENABLED_ATTRIBUTE) || Boolean.parseBoolean(e.getAttribute(ENABLED_ATTRIBUTE));
-                        if(enabled) {
-                            int color = e.hasAttribute(COLOR_ATTRIBUTE) ? Color.parseColor(e.getAttribute(COLOR_ATTRIBUTE)) : getColor(Options.default_color);
-                            colors.put(nn, color);
-                        }
+
+                        int color = -1;
+                        if(enabled)
+                            color = e.hasAttribute(COLOR_ATTRIBUTE) ? Color.parseColor(e.getAttribute(COLOR_ATTRIBUTE)) : XMLPrefsManager.getColor(Options.default_color);
+                        app = new NotificatedApp(nn, color, enabled);
+                        apps.add(app);
                     }
                 }
             }
 
+
             if(enums.size() == 0) return;
 
             for(XMLPrefsManager.XMLPrefsSave s : enums) {
@@ -172,6 +207,18 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
         notificationsChangeFor(new ArrayList<>(Collections.singletonList(app)));
     }
 
+    public static boolean textMatches(String text) {
+        if(text == null || text.length() == 0) return false;
+        for(Pattern p : textRegexs) if (p.matcher(text).matches()) return true;
+        return false;
+    }
+
+    public static boolean titleMatches(String text) {
+        if(text == null || text.length() == 0) return false;
+        for(Pattern p : titleRegexs) if (p.matcher(text).matches()) return true;
+        return false;
+    }
+
     public static void notificationsChangeFor(List<NotificatedApp> apps) {
         String[] names = new String[apps.size()];
         final String[] attrNames = {ENABLED_ATTRIBUTE, COLOR_ATTRIBUTE};
@@ -184,78 +231,21 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
             values[count][1] = app.color + Tuils.EMPTYSTRING;
         }
 
-        setMany(new File(folder, PATH), NAME, names, attrNames, values);
+        setMany(new File(Tuils.getFolder(), PATH), NAME, names, attrNames, values);
     }
 
-    public static NotificatedApp getAppState(String pkg) {
-        try {
-            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-            DocumentBuilder builder = factory.newDocumentBuilder();
-
-            File file = new File(folder, PATH);
-
-            Document d;
-            try {
-                d = builder.parse(file);
-            } catch (Exception e) {
-                FileOutputStream stream = new FileOutputStream(file);
-                stream.write(XML_DEFAULT.getBytes());
-                stream.flush();
-                stream.close();
-
-                d = builder.parse(file);
-            }
-
-            Element root = (Element) d.getElementsByTagName(NAME).item(0);
-            NodeList nodes = root.getElementsByTagName("*");
-
-            for (int count = 0; count < nodes.getLength(); count++) {
-                Node node = nodes.item(count);
-
-                if(!pkg.equals(node.getNodeName())) continue;
-
-                Element e = (Element) node;
-                boolean enabled = !e.hasAttribute(ENABLED_ATTRIBUTE) || Boolean.parseBoolean(e.getAttribute(ENABLED_ATTRIBUTE));
-                int color = e.hasAttribute(COLOR_ATTRIBUTE) ? Color.parseColor(e.getAttribute(COLOR_ATTRIBUTE)) : getColor(Options.default_color);
-
-                return new NotificatedApp(pkg, color, enabled);
-            }
-        } catch (Exception e) {
-            return null;
-        }
-
-//        default!!!
-        return new NotificatedApp(pkg, getColor(Options.default_color), true);
-    }
-
-    public static <T> T get(Class<T> c, XMLPrefsManager.XMLPrefsSave prefsSave) {
-        if(prefsSave != null) {
-            try {
-                return (T) transform(values.get(prefsSave).value, c);
-            } catch (Exception e) {
-                return (T) transform(prefsSave.defaultValue(), c);
-            }
-        }
-        return null;
+    public static void excludeRegex(String regex, String on) {
+        XMLPrefsManager.set(new File(Tuils.getFolder(), PATH), NAME, REGEX_NODE, new String[] {ON_ATTRIBUTE, VALUE_ATTRIBUTE}, new String[] {on, regex});
     }
 
-    public static int getColor(XMLPrefsManager.XMLPrefsSave prefsSave) {
-        if(prefsSave != null) {
-            try {
-                return (int) transform(values.get(prefsSave).value, Color.class);
-            } catch (Exception e) {
-                String def = prefsSave.defaultValue();
-                if(def == null || def.length() == 0) {
-                    return -1;
-                }
-                return (int) transform(def, Color.class);
-            }
-        }
-        return 0;
+    public static int apps() {
+        return apps.size();
     }
 
-    public static int colorsLength() {
-        return colors.size();
+    public static NotificatedApp getAppState(String pkg) {
+        int index = apps.indexOf(pkg);
+        if(index == -1) return null;
+        return apps.get(index);
     }
 
     public static class NotificatedApp {
@@ -276,6 +266,7 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
         @Override
         public boolean equals(Object obj) {
             if(obj instanceof NotificatedApp) return pkg.equals(((NotificatedApp) obj).pkg);
+            if(obj instanceof String) return pkg.equals(obj);
             return this == obj;
         }
     }
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationService.java b/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationService.java
index 7a0bb5979ce1447ada8c2d52bc86d6330b657529..c20a29ed6e2d42ff59aed667e7bcff5c8027f0f2 100644
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationService.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationService.java
@@ -48,7 +48,7 @@ public class NotificationService extends NotificationListenerService {
 
         NotificationManager.create();
 
-        if(NotificationManager.colorsLength() == 0) {
+        if(NotificationManager.apps() == 0) {
 //            some nice apps
             NotificationManager.notificationsChangeFor(new ArrayList<>(Arrays.asList(
                     new NotificatedApp("com.whatsapp", Color.parseColor("#25D366"), true),
@@ -94,8 +94,12 @@ public class NotificationService extends NotificationListenerService {
         }
 
         String pack = sbn.getPackageName();
+
         NotificatedApp nApp = NotificationManager.getAppState(pack);
-        if(nApp == null || !nApp.enabled) {
+        if( (nApp != null && !nApp.enabled)) {
+            return;
+        }
+        if(nApp == null && !NotificationManager.default_app_state) {
             return;
         }
 
@@ -117,6 +121,8 @@ public class NotificationService extends NotificationListenerService {
             title = titleSequence.toString();
         }
 
+        if(NotificationManager.textMatches(text) || NotificationManager.titleMatches(title)) return;
+
         Intent msgrcv = new Intent("Msg");
         msgrcv.putExtra("package", pack);
         msgrcv.putExtra("title", title);
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/suggestions/SuggestionsManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/suggestions/SuggestionsManager.java
index 650056043b9f230a9cd8ebb981a60e14e90eea11..e720d565feec31f06cfa9393fbac619e17a2c001 100644
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/suggestions/SuggestionsManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/suggestions/SuggestionsManager.java
@@ -15,6 +15,7 @@ import ohi.andre.consolelauncher.commands.CommandTuils;
 import ohi.andre.consolelauncher.commands.specific.ParamCommand;
 import ohi.andre.consolelauncher.commands.specific.PermanentSuggestionCommand;
 import ohi.andre.consolelauncher.commands.main.MainPack;
+import ohi.andre.consolelauncher.managers.AliasManager;
 import ohi.andre.consolelauncher.managers.AppsManager;
 import ohi.andre.consolelauncher.managers.ContactManager;
 import ohi.andre.consolelauncher.managers.FileManager;
@@ -67,11 +68,13 @@ public class SuggestionsManager {
                         float rate = 1f / shift;
                         suggestionList.add(new Suggestion(before, apps[count], true, (int) Math.ceil(rate), Suggestion.TYPE_APP));
                     }
-
-                    return suggestionList.toArray(new Suggestion[suggestionList.size()]);
                 }
+
+                suggestAlias(info.aliasManager, suggestionList, lastWord);
+
+                return suggestionList.toArray(new Suggestion[suggestionList.size()]);
             }
-//            lastword = 0 && before > 0
+//            lastword == 0 && before > 0
             else {
 //                check if this is a command
                 Command cmd = null;
@@ -98,7 +101,7 @@ public class SuggestionsManager {
 //                        suggestArgs(info, cmd.cmd instanceof ParamCommand ? ((ParamCommand) cmd.cmd).argsForParam((String) cmd.mArgs[0])[cmd.nArgs - 1] : cmd.cmd.argType()[cmd.nArgs], suggestionList, lastWord, before);
 //                    }
 
-                    if(cmd.cmd instanceof ParamCommand && (cmd.mArgs == null || cmd.mArgs.length == 0)) suggestParams(suggestionList, (ParamCommand) cmd.cmd, before);
+                    if(cmd.cmd instanceof ParamCommand && (cmd.mArgs == null || cmd.mArgs.length == 0)) suggestParams(suggestionList, (ParamCommand) cmd.cmd, before, null);
                     else suggestArgs(info, cmd.nextArg(), suggestionList, before);
 
                 } else {
@@ -129,7 +132,9 @@ public class SuggestionsManager {
                         lastWord = before.substring(index) + lastWord;
                     }
 
-                    suggestArgs(info, cmd.nextArg(), suggestionList, lastWord, before);
+                    if(cmd.cmd instanceof ParamCommand && (cmd.mArgs == null || cmd.mArgs.length == 0)) {
+                        suggestParams(suggestionList, (ParamCommand) cmd.cmd, before, lastWord);
+                    } else suggestArgs(info, cmd.nextArg(), suggestionList, lastWord, before);
                 } else {
 //                    not a command
 //                    ==> app
@@ -138,6 +143,7 @@ public class SuggestionsManager {
             } else {
 //                lastword > 0 && before = 0
                 suggestCommand(info, suggestionList, lastWord);
+                suggestAlias(info.aliasManager, suggestionList, lastWord);
                 suggestApp(info, suggestionList, lastWord, Tuils.EMPTYSTRING);
             }
         }
@@ -154,16 +160,20 @@ public class SuggestionsManager {
         }
     }
 
-    private void suggestParams(List<Suggestion> suggestions, ParamCommand cmd, String before) {
+    private void suggestAlias(AliasManager aliasManager, List<Suggestion> suggestions, String lastWord) {
+        if(lastWord.length() == 0) for(String s : aliasManager.getAliases()) suggestions.add(new Suggestion(Tuils.EMPTYSTRING, s, true, NO_RATE, Suggestion.TYPE_ALIAS));
+        else for(String s : aliasManager.getAliases()) if(s.startsWith(lastWord)) suggestions.add(new Suggestion(Tuils.EMPTYSTRING, s, true, NO_RATE, Suggestion.TYPE_ALIAS));
+    }
+
+    private void suggestParams(List<Suggestion> suggestions, ParamCommand cmd, String before, String lastWord) {
         String[] params = cmd.params();
         if (params == null) {
             return;
         }
 
         boolean exec = false;
-        for (String s : cmd.params()) {
-            suggestions.add(new Suggestion(before, s, exec, NO_RATE, 0));
-        }
+        if(lastWord == null || lastWord.length() == 0) for (String s : cmd.params()) suggestions.add(new Suggestion(before, s, exec, NO_RATE, 0));
+        else for (String s : cmd.params()) if (s.startsWith(lastWord)) suggestions.add(new Suggestion(before, s, exec, NO_RATE, 0));
     }
 
     private void suggestArgs(MainPack info, int type, List<Suggestion> suggestions, String prev, String before) {
@@ -198,6 +208,7 @@ public class SuggestionsManager {
                 break;
             case CommandAbstraction.CONFIG_FILE:
                 suggestConfigFile(suggestions, prev, before);
+                break;
         }
     }
 
@@ -453,7 +464,6 @@ public class SuggestionsManager {
             xmlPrefsFiles.add(AppsManager.PATH);
             xmlPrefsFiles.add(NotificationManager.PATH);
         }
-        Log.e("andre", xmlPrefsFiles.toString());
 
         if(prev == null || prev.length() == 0) {
             for(String s : xmlPrefsFiles) {
diff --git a/app/src/main/java/ohi/andre/consolelauncher/tuils/ShellUtils.java b/app/src/main/java/ohi/andre/consolelauncher/tuils/ShellUtils.java
index d56baacd770b913bfbe175297600d6fbfd6a595e..89b9b7fce882a4c28b3fe14255f5b3a7f6c8cc8b 100644
--- a/app/src/main/java/ohi/andre/consolelauncher/tuils/ShellUtils.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/tuils/ShellUtils.java
@@ -6,6 +6,7 @@ import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.InterruptedIOException;
 
 import ohi.andre.consolelauncher.tuils.interfaces.Outputable;
 
@@ -63,91 +64,64 @@ public class ShellUtils {
 //            return new CommandResult(0, e.toString());
 //        }
 
-        if(cmds.length > 1) return null;
+        if(cmds.length > 1 || cmds.length == 0) return null;
 
         int result = -1;
-        if (cmds == null || cmds.length == 0) {
-            return null;
-        }
 
         BufferedReader errorResult = null;
         StringBuilder errorMsg = null;
         final StringBuilder output = new StringBuilder();
 
-//        DataOutputStream os = null;
         try {
-//            process = Runtime.getRuntime().exec(root ? "su" : "sh");
-//            os = new DataOutputStream(process.getOutputStream());
-//
-//            if (path != null) {
-//                String cdCommand = "cd " + path;
-//                os.write(cdCommand.getBytes());
-//                os.writeBytes(Tuils.NEWLINE);
-//                os.flush();
-//            }
-
-//            for (String command : cmds) {
-//                if (command == null) {
-//                    continue;
-//                }
-//
-//                os.write(command.getBytes());
-//                os.writeBytes(Tuils.NEWLINE);
-//            }
-//            os.flush();
 
             final Process process = Runtime.getRuntime().exec((root ? "su -c " : "") + cmds[0], null, path != null ? new File(path) : null);
             final Thread externalThread = Thread.currentThread();
 
-            Thread thread = new StoppableThread() {
+            Thread readerThread = new StoppableThread() {
 
                 @Override
                 public void run() {
                     super.run();
 
-                    if(Thread.interrupted() || externalThread.isInterrupted()) return;
+                    if (Thread.interrupted() || externalThread.isInterrupted()) return;
 
                     BufferedReader successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
                     String s;
                     try {
                         while ((s = successResult.readLine()) != null) {
-                            if(Thread.currentThread().isInterrupted() || externalThread.isInterrupted()) return;
+                            if (Thread.currentThread().isInterrupted() || externalThread.isInterrupted())
+                                return;
+
+                            if (outputable != null) outputable.onOutput(Tuils.NEWLINE + s);
+                            else {
+                                output.append(Tuils.NEWLINE);
+                                output.append(s);
+                            }
+                        }
 
-                            if(outputable != null) outputable.onOutput(Tuils.NEWLINE + s);
+                        sleep(25);
+                    } catch (StackOverflowError | Exception e) {
+                        if(outputable != null && ! (e instanceof InterruptedException)) outputable.onOutput(e.toString());
 
-                            output.append(Tuils.NEWLINE);
-                            output.append(s);
-                        }
-                    } catch (IOException e) {
-                        Log.e("andre", "", e);
-                    }
+                        try {
+                            successResult.close();
+                        } catch (IOException e1) {}
 
-                    try {
-                        sleep(50);
-                    } catch (InterruptedException e) {
-                        Log.e("andre", "", e);
                         return;
                     }
-
-                    run();
                 }
             };
-            thread.start();
+            readerThread.start();
 
             result = process.waitFor();
-            thread.interrupt();
+            readerThread.interrupt();
 
             if(output.length() == 0) {
                 errorMsg = new StringBuilder();
 
-//                successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
                 errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));
 
                 String s;
-//                while ((s = successResult.readLine()) != null) {
-//                    successMsg.append(Tuils.NEWLINE);
-//                    successMsg.append(s);
-//                }
                 while ((s = errorResult.readLine()) != null) {
                     if(errorMsg.length() > 0) errorMsg.append(Tuils.NEWLINE);
                     errorMsg.append(s);
@@ -159,18 +133,10 @@ public class ShellUtils {
         catch (Exception e) {}
         finally {
             try {
-//                if (os != null) {
-//                    os.close();
-//                }
-//                if (successResult != null) {
-//                    successResult.close();
-//                }
                 if (errorResult != null) {
                     errorResult.close();
                 }
-            } catch (IOException e) {
-                Log.e("andre", "", e);
-            }
+            } catch (IOException e) {}
         }
 
         if(output.length() > 0) {
diff --git a/app/src/main/java/ohi/andre/consolelauncher/tuils/StoppableThread.java b/app/src/main/java/ohi/andre/consolelauncher/tuils/StoppableThread.java
index 4772add12d9877085ff3eac4441e947b8a22b909..f98c1ec26415727366881a8c4661c2a481a76eea 100644
--- a/app/src/main/java/ohi/andre/consolelauncher/tuils/StoppableThread.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/tuils/StoppableThread.java
@@ -1,5 +1,7 @@
 package ohi.andre.consolelauncher.tuils;
 
+import android.util.Log;
+
 /**
  * Created by francescoandreuzzi on 27/04/2017.
  */
@@ -12,11 +14,17 @@ public class StoppableThread extends Thread {
     public void interrupt() {
         super.interrupt();
 
-        stopped = true;
+        synchronized (this) {
+            stopped = true;
+        }
     }
 
     @Override
     public boolean isInterrupted() {
-        return stopped || super.isInterrupted();
+        boolean b;
+        synchronized (this) {
+            b = stopped;
+        }
+        return b || super.isInterrupted();
     }
 }
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index fc38f9f1588f5bcfcfae5ef3f4f3e2e1a8a51f84..69880211c1f5b376074f3406856305aac9e67769 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -14,7 +14,7 @@
 
     <!-- busy -->
     <string name="busy">T-UI is busy, wait until the execution finishes or use the command \"ctrlc\"</string>
-    <string name="busy_hint">type "ctrlc" to stop</string>
+    <string name="busy_hint">type \"ctrlc\" to stop</string>
 
     <string name="rate_donate_text">\nDo you like my work? Rate on Play Store (command: >>rate) or offer me a coffee (command: >>donate). Thank you for using T-UI.\n\nYou can disable this message in >>tuisettings</string>
 
@@ -39,6 +39,8 @@
     <string name="output_problemcamera">There was a problem while connecting to your device camera</string>
     <string name="output_numberformat">Wrong number format</string>
     <string name="output_invalidarg">Invalid argument</string>
+    <string name="output_lessarg">Less arguments than expected</string>
+    <string name="output_aliasnotfound">Alias not found:</string>
 
     <!-- tuixt -->
     <string name="help_tuixt_help">Print the list of commands, or info about a command
@@ -116,8 +118,15 @@
 
 
     <string name="help_airplane">Toggle Airplane Mode</string>
-    <string name="help_aliases">Print alias that are currently saved in \"sdcard\"/t-ui/alias.txt</string>
-    <string name="help_aliasfile">Open alias.txt</string>
+    <string name="help_aliases">Manager your aliases
+        \n\nUsage:
+        \n-add -> add a new alias
+        \n-rm -> remove an existing alias
+        \n-ls -> list your aliases
+        \n-file -> open alias.xml
+        \n\nExample:
+        \n>>alias -add bip echo beeeeeep
+        \n>>alias -rm bip</string>
     <string name="help_apps">Manage your apps
         \n\nUsage:
         \n>>apps [option] [app name]
@@ -127,20 +136,11 @@
         \n-ps -> show Google Play Store page for this app
         \n-st -> show Settings details for this app
         \n-frc -> force t-ui to open this app
+        \n-file -> open apps.xml
         \nno option -> list your apps
         \n\nExample:
         \n>>apps -st T-UI
     </string>
-    <string name="help_appshide">Hide an app
-        \n\nUsage:
-        \n>>apps_hide [app]
-        \n\nExample:
-        \n>>apps_hide Settings</string>
-    <string name="help_appsunhide">Unhide an hidden app
-        \n\nUsage:
-        \n>>apps_unhide [app]
-        \n\nExample:
-        \n>>apps_unhide Settings</string>
     <string name="help_bluetooth">Toggle Bluetooth</string>
     <string name="help_clear">Clear the screen</string>
     <string name="help_calc" formatted="false">Perform basic operations (+ - * / % ^ sqrt)
@@ -262,6 +262,7 @@
         \n\n-inc -> include an application
         \n-exc -> exclude an appliation
         \n-clr -> set the color to be used for the application
+        \n-file -> open notifications.xml
         \n\nExample:
         \n\nnotifications -inc Clock
         \nnotifications -clr Settings #FF0000</string>