aboutsummaryrefslogtreecommitdiff
path: root/vis.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2015-07-02 11:06:18 +0200
committerMarc André Tanner <mat@brain-dump.org>2015-07-03 09:59:37 +0200
commit87c7258ccc683965d2b6a5190f1e98d74c8d25d3 (patch)
tree7d8dfbe8efe4f23f9d6848c19be9e55e2bbb58b3 /vis.c
parent860ad58af0e1c39d5ffda0474ed3c58aaa1ecca5 (diff)
downloadvis-87c7258ccc683965d2b6a5190f1e98d74c8d25d3.tar.gz
vis-87c7258ccc683965d2b6a5190f1e98d74c8d25d3.tar.xz
Add :show command to display special symbols for whitespaces
Enable/disable by setting to 0/1 respectively: :set show spaces=0 tabs=0 newlines=1
Diffstat (limited to 'vis.c')
-rw-r--r--vis.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/vis.c b/vis.c
index 63c574e..6f1fb27 100644
--- a/vis.c
+++ b/vis.c
@@ -1339,6 +1339,7 @@ static bool cmd_set(Filerange *range, enum CmdOpt cmdopt, const char *argv[]) {
OPTION_EXPANDTAB,
OPTION_TABWIDTH,
OPTION_SYNTAX,
+ OPTION_SHOW,
OPTION_NUMBER,
OPTION_NUMBER_RELATIVE,
};
@@ -1349,6 +1350,7 @@ static bool cmd_set(Filerange *range, enum CmdOpt cmdopt, const char *argv[]) {
[OPTION_EXPANDTAB] = { { "expandtab", "et" }, OPTION_TYPE_BOOL },
[OPTION_TABWIDTH] = { { "tabwidth", "tw" }, OPTION_TYPE_NUMBER },
[OPTION_SYNTAX] = { { "syntax" }, OPTION_TYPE_STRING, true },
+ [OPTION_SHOW] = { { "show" }, OPTION_TYPE_STRING },
[OPTION_NUMBER] = { { "numbers", "nu" }, OPTION_TYPE_BOOL },
[OPTION_NUMBER_RELATIVE] = { { "relativenumbers", "rnu" }, OPTION_TYPE_BOOL },
};
@@ -1448,6 +1450,36 @@ static bool cmd_set(Filerange *range, enum CmdOpt cmdopt, const char *argv[]) {
else
editor_info_show(vis, "Unknown syntax definition: `%s'", argv[2]);
break;
+ case OPTION_SHOW:
+ if (!argv[2]) {
+ editor_info_show(vis, "Expecting: spaces, tabs, newlines");
+ return false;
+ }
+ char *keys[] = { "spaces", "tabs", "newlines" };
+ int values[] = {
+ 1 << SYNTAX_SYMBOL_SPACE,
+ (1 << SYNTAX_SYMBOL_TAB)|(1 << SYNTAX_SYMBOL_TAB_FILL),
+ 1 << SYNTAX_SYMBOL_EOL
+ };
+ int flags = view_symbols_get(vis->win->view);
+ for (const char **args = &argv[2]; *args; args++) {
+ for (int i = 0; i < LENGTH(keys); i++) {
+ if (strcmp(*args, keys[i]) == 0) {
+ flags |= values[i];
+ } else if (strstr(*args, keys[i]) == *args) {
+ bool show;
+ const char *v = *args + strlen(keys[i]);
+ if (*v == '=' && parse_bool(v+1, &show)) {
+ if (show)
+ flags |= values[i];
+ else
+ flags &= ~values[i];
+ }
+ }
+ }
+ }
+ view_symbols_set(vis->win->view, flags);
+ break;
case OPTION_NUMBER:
editor_window_options(vis->win, arg.b ? UI_OPTION_LINE_NUMBERS_ABSOLUTE :
UI_OPTION_LINE_NUMBERS_NONE);