summaryrefslogtreecommitdiff
path: root/examples/dte/options.h
diff options
context:
space:
mode:
Diffstat (limited to 'examples/dte/options.h')
-rw-r--r--examples/dte/options.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/examples/dte/options.h b/examples/dte/options.h
new file mode 100644
index 0000000..1d0a129
--- /dev/null
+++ b/examples/dte/options.h
@@ -0,0 +1,114 @@
+#ifndef OPTIONS_H
+#define OPTIONS_H
+
+#include <stdbool.h>
+#include <stddef.h>
+#include "regexp.h"
+#include "util/macros.h"
+#include "util/ptr-array.h"
+#include "util/string.h"
+
+enum {
+ INDENT_WIDTH_MAX = 8,
+ TAB_WIDTH_MAX = 8,
+ TEXT_WIDTH_MAX = 1000,
+};
+
+// Note: this must be kept in sync with ws_error_values[]
+typedef enum {
+ WSE_SPACE_INDENT = 1 << 0, // Spaces in indent (except WSE_SPACE_ALIGN)
+ WSE_SPACE_ALIGN = 1 << 1, // Less than tab-width spaces at end of indent
+ WSE_TAB_INDENT = 1 << 2, // Tab in indent
+ WSE_TAB_AFTER_INDENT = 1 << 3, // Tab anywhere but indent
+ WSE_SPECIAL = 1 << 4, // Special whitespace characters
+ WSE_AUTO_INDENT = 1 << 5, // expand-tab ? WSE_TAB_AFTER_INDENT | WSE_TAB_INDENT : WSE_SPACE_INDENT
+ WSE_TRAILING = 1 << 6, // Trailing whitespace
+ WSE_ALL_TRAILING = 1 << 7, // Like WSE_TRAILING, but including around cursor
+} WhitespaceErrorFlags;
+
+// Note: this must be kept in sync with save_unmodified_enum[]
+typedef enum {
+ SAVE_NONE,
+ SAVE_TOUCH,
+ SAVE_FULL,
+} SaveUnmodifiedType;
+
+#define COMMON_OPTIONS \
+ unsigned int detect_indent; \
+ unsigned int indent_width; \
+ unsigned int save_unmodified; \
+ unsigned int tab_width; \
+ unsigned int text_width; \
+ unsigned int ws_error; \
+ bool auto_indent; \
+ bool editorconfig; \
+ bool emulate_tab; \
+ bool expand_tab; \
+ bool file_history; \
+ bool fsync; \
+ bool overwrite; \
+ bool syntax
+
+typedef struct {
+ COMMON_OPTIONS;
+} CommonOptions;
+
+// Note: all members should be initialized in buffer_new()
+typedef struct {
+ COMMON_OPTIONS;
+ // Only local
+ bool brace_indent;
+ const char *filetype;
+ const InternedRegexp *indent_regex;
+} LocalOptions;
+
+typedef struct {
+ COMMON_OPTIONS;
+ // Only global
+ bool display_special;
+ bool lock_files;
+ bool optimize_true_color;
+ bool select_cursor_char;
+ bool set_window_title;
+ bool show_line_numbers;
+ bool tab_bar;
+ bool utf8_bom; // Default value for new files
+ unsigned int esc_timeout;
+ unsigned int filesize_limit;
+ unsigned int scroll_margin;
+ unsigned int crlf_newlines; // Default value for new files
+ unsigned int case_sensitive_search; // SearchCaseSensitivity
+ const char *statusline_left;
+ const char *statusline_right;
+} GlobalOptions;
+
+#undef COMMON_OPTIONS
+
+static inline bool use_spaces_for_indent(const LocalOptions *opt)
+{
+ return opt->expand_tab || opt->indent_width != opt->tab_width;
+}
+
+struct EditorState;
+
+bool set_option(struct EditorState *e, const char *name, const char *value, bool local, bool global);
+bool set_bool_option(struct EditorState *e, const char *name, bool local, bool global);
+bool toggle_option(struct EditorState *e, const char *name, bool global, bool verbose);
+bool toggle_option_values(struct EditorState *e, const char *name, bool global, bool verbose, char **values, size_t count);
+bool validate_local_options(char **strs);
+void collect_options(PointerArray *a, const char *prefix, bool local, bool global);
+void collect_auto_options(PointerArray *a, const char *prefix);
+void collect_toggleable_options(PointerArray *a, const char *prefix, bool global);
+void collect_option_values(struct EditorState *e, PointerArray *a, const char *option, const char *prefix);
+String dump_options(GlobalOptions *gopts, LocalOptions *lopts);
+const char *get_option_value_string(struct EditorState *e, const char *name);
+
+#if DEBUG >= 1
+ void sanity_check_global_options(const GlobalOptions *opts);
+ void sanity_check_local_options(const LocalOptions *lopts);
+#else
+ static inline void sanity_check_global_options(const GlobalOptions* UNUSED_ARG(gopts)) {}
+ static inline void sanity_check_local_options(const LocalOptions* UNUSED_ARG(lopts)) {}
+#endif
+
+#endif