aboutsummaryrefslogtreecommitdiff
path: root/src/properties.h
blob: 1d7d8b50ddec53b748121fc63b1c6ae3112ff0a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// Copyright 2007-2008 Mitchell mitchell<att>caladbolg.net. See LICENSE.

#ifndef PROPERTIES_H
#define PROPERTIES_H

#include "textadept.h"

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);
}

#endif