diff options
Diffstat (limited to 'src/textadept.c')
-rw-r--r-- | src/textadept.c | 97 |
1 files changed, 96 insertions, 1 deletions
diff --git a/src/textadept.c b/src/textadept.c index 3886baec..084d616a 100644 --- a/src/textadept.c +++ b/src/textadept.c @@ -1,7 +1,6 @@ // Copyright 2007-2008 Mitchell mitchell<att>caladbolg.net. See LICENSE. #include "textadept.h" -#include "properties.h" #define signal(o, s, c) g_signal_connect(G_OBJECT(o), s, G_CALLBACK(c), 0) @@ -464,6 +463,102 @@ static bool w_exit(GtkWidget*, GdkEventAny*, gpointer) { return false; } +// Properties + +static long SSS(ScintillaObject *sci, unsigned int msg, const char *wParam=0, + const char *lParam=0) { + return scintilla_send_message(sci, msg, reinterpret_cast<long>(wParam), + reinterpret_cast<long>(lParam)); +} + +#define sp(k, v) SSS(sci, SCI_SETPROPERTY, k, v) +#define color(r, g, b) r | (g << 8) | (b << 16) + +/** + * Sets the default properties for a Scintilla window. + * @param sci The Scintilla window to set default properties for. + */ +void set_default_editor_properties(ScintillaObject *sci) { + sp("textadept.home", textadept_home); + sp("lexer.lua.home", "/usr/share/textadept/lexers/"); + sp("lexer.lua.script", "/usr/share/textadept/lexers/lexer.lua"); + + // caret + SS(sci, SCI_SETCARETFORE, color(0xAA, 0xAA, 0xAA)); + SS(sci, SCI_SETCARETLINEVISIBLE, true); + SS(sci, SCI_SETCARETLINEBACK, color(0x44, 0x44, 0x44)); + SS(sci, SCI_SETXCARETPOLICY, CARET_SLOP, 20); + SS(sci, SCI_SETYCARETPOLICY, CARET_SLOP | CARET_STRICT | CARET_EVEN, 1); + SS(sci, SCI_SETCARETSTYLE, 2); + SS(sci, SCI_SETCARETPERIOD, 0); + + // selection + SS(sci, SCI_SETSELFORE, 1, color(0x33, 0x33, 0x33)); + SS(sci, SCI_SETSELBACK, 1, color(0x99, 0x99, 0x99)); + + SS(sci, SCI_SETBUFFEREDDRAW, 1); + SS(sci, SCI_SETTWOPHASEDRAW, 0); + SS(sci, SCI_CALLTIPUSESTYLE, 32); + SS(sci, SCI_USEPOPUP, 0); + SS(sci, SCI_SETFOLDFLAGS, 16); + SS(sci, SCI_SETMODEVENTMASK, SC_MOD_CHANGEFOLD); + + SS(sci, SCI_SETMARGINWIDTHN, 0, 4 + 2 * // line number margin + SS(sci, SCI_TEXTWIDTH, STYLE_LINENUMBER, reinterpret_cast<long>("9"))); + + SS(sci, SCI_SETMARGINWIDTHN, 1, 0); // marker margin invisible + + // fold margin + SS(sci, SCI_SETFOLDMARGINCOLOUR, 1, color(0xAA, 0xAA, 0xAA)); + SS(sci, SCI_SETFOLDMARGINHICOLOUR, 1, color(0xAA, 0xAA, 0xAA)); + SS(sci, SCI_SETMARGINTYPEN, 2, SC_MARGIN_SYMBOL); + SS(sci, SCI_SETMARGINWIDTHN, 2, 10); + SS(sci, SCI_SETMARGINMASKN, 2, SC_MASK_FOLDERS); + SS(sci, SCI_SETMARGINSENSITIVEN, 2, 1); + + // fold margin markers + SS(sci, SCI_MARKERDEFINE, SC_MARKNUM_FOLDEROPEN, SC_MARK_ARROWDOWN); + SS(sci, SCI_MARKERSETFORE, SC_MARKNUM_FOLDEROPEN, 0); + SS(sci, SCI_MARKERSETBACK, SC_MARKNUM_FOLDEROPEN, 0); + SS(sci, SCI_MARKERDEFINE, SC_MARKNUM_FOLDER, SC_MARK_ARROW); + SS(sci, SCI_MARKERSETFORE, SC_MARKNUM_FOLDER, 0); + SS(sci, SCI_MARKERSETBACK, SC_MARKNUM_FOLDER, 0); + SS(sci, SCI_MARKERDEFINE, SC_MARKNUM_FOLDERSUB, SC_MARK_EMPTY); + SS(sci, SCI_MARKERDEFINE, SC_MARKNUM_FOLDERTAIL, SC_MARK_EMPTY); + SS(sci, SCI_MARKERDEFINE, SC_MARKNUM_FOLDEREND, SC_MARK_EMPTY); + SS(sci, SCI_MARKERDEFINE, SC_MARKNUM_FOLDEROPENMID, SC_MARK_EMPTY); + SS(sci, SCI_MARKERDEFINE, SC_MARKNUM_FOLDERMIDTAIL, SC_MARK_EMPTY); + + SS(sci, SCI_SETSCROLLWIDTH, 2000); + SS(sci, SCI_SETHSCROLLBAR, 1); + SS(sci, SCI_SETENDATLASTLINE, 1); + SS(sci, SCI_SETCARETSTICKY, 0); +} + +/** + * Sets the default properties for a Scintilla document. + * @param sci The Scintilla window containing the document to set default + * properties for. + */ +void set_default_buffer_properties(ScintillaObject *sci) { + sp("fold", "1"); + sp("fold.by.indentation", "1"); + + SS(sci, SCI_SETLEXER, SCLEX_LPEG); + SS(sci, SCI_SETLEXERLANGUAGE, 0, reinterpret_cast<long>("container")); + + // Tabs and indentation + SS(sci, SCI_SETTABWIDTH, 2); + SS(sci, SCI_SETUSETABS, 0); + SS(sci, SCI_SETINDENT, 2); + SS(sci, SCI_SETTABINDENTS, 1); + SS(sci, SCI_SETBACKSPACEUNINDENTS, 1); + SS(sci, SCI_SETINDENTATIONGUIDES, 1); + + SS(sci, SCI_SETEOLMODE, SC_EOL_LF); + SS(sci, SCI_AUTOCSETCHOOSESINGLE, 1); +} + // Project Manager /** |