scite-context-readme.tex /size: 28 Kb    last modification: 2021-10-28 13:49
1% interface=en modes=icon,screen language=uk
2
3\usemodule[article-basic]
4\usemodule[abbreviations-smallcaps]
5\usemodule[scite]
6
7\unexpanded\def\METAPOST{MetaPost}
8\unexpanded\def\METAFUN {MetaFun}
9
10\setuphead
11  [section]
12  [color=darkblue]
13
14\setuptype
15  [color=darkblue]
16
17\setuptyping
18  [color=darkblue]
19
20\setuptyping
21  [margin=yes]
22
23\setupwhitespace
24  [big]
25
26\definecolor[gray][s=.2,t=.5,a=1]
27
28\startuseMPgraphic{TitlePage}{darkness}
29    StartPage ;
30
31        numeric factor   ; factor   := 1/3 ;
32        numeric multiple ; multiple := PaperHeight/PaperWidth ; % 1.6 ;
33        numeric stages   ; stages   := multiple/16 ; % .1 ;
34        numeric darkness ; darkness := \MPvar{darkness} ;
35
36        def Scaled(expr s, m) =
37            if m = 1 :
38                scaled (2*s*PaperWidth)
39            else :
40                xscaled (2*s*PaperWidth) yscaled (2*s*PaperHeight)
41            fi
42        enddef ;
43
44        fill Page withcolor (factor*white) ;
45
46        fill fullcircle scaled (multiple*PaperWidth) shifted llcorner Page withcolor (factor*red) ;
47        fill fullcircle scaled (multiple*PaperWidth) shifted ulcorner Page withcolor (factor*green) ;
48        fill fullcircle scaled (multiple*PaperWidth) shifted urcorner Page withcolor (factor*blue) ;
49        fill fullcircle scaled (multiple*PaperWidth) shifted lrcorner Page withcolor (factor*yellow) ;
50
51        for i = llcorner Page, ulcorner Page, urcorner Page, lrcorner Page :
52            for j = 0 step stages until (10*stages-eps) : % or .8
53                fill fullcircle Scaled(j,1) shifted i withcolor transparent(1,\MPvar{darkness}*(1-j),white) ;
54            endfor ;
55        endfor ;
56
57        draw Page withpen pencircle scaled .1PaperWidth withcolor transparent(1,.5,.5white) ;
58
59    StopPage
60\stopuseMPgraphic
61
62\startmode[icon,screen]
63
64    \setuppapersize[S66][S66]
65
66    \setupbodyfont[10pt]
67
68\stopmode
69
70\startmode[icon]
71
72    \starttext
73
74        \startTEXpage
75            \useMPgraphic{TitlePage}{darkness=0.4}
76        \stopTEXpage
77
78    \stoptext
79
80\stopmode
81
82\starttext
83
84% title page
85
86\definelayer
87  [TitlePage]
88  [width=\paperwidth,
89   height=\paperheight]
90
91\setlayer
92  [TitlePage]
93  {\useMPgraphic{TitlePage}{darkness=1}}
94
95\setlayerframed
96  [TitlePage]
97  [preset=rightbottom,
98   hoffset=.1\paperwidth,
99   voffset=.1\paperwidth]
100  [align=left,
101   width=\hsize,
102   frame=off,
103   foregroundcolor=gray]
104  {\definedfont[SerifBold sa 10]SciTE\endgraf
105%  \definedfont[SerifBold sa 2.48]IN CONTEXT MkIV\kern.25\bodyfontsize}
106   \definedfont[SerifBold sa 1.60]IN CONTEXT MkIV & LMTX\kern.25\bodyfontsize}
107
108\startTEXpage
109    \tightlayer[TitlePage]
110\stopTEXpage
111
112% main text
113
114\startsubject[title={About \SCITE}]
115
116For a long time at \PRAGMA\ we used \TEXEDIT, an editor we'd written in \MODULA.
117It had some project management features and recognized the project structure in
118\CONTEXT\ documents. Later we rewrote this to a platform independent
119reimplementation called \TEXWORK\ written in \PERLTK\ (not to be confused with
120the editor with the plural name) that when I checked last still works okay, which
121is proof that \PERLTK\ has been stable for decades.
122
123In the beginning of the century I can into \SCITE, written by Neil Hodgson.
124Although the mentioned editors provide some functionality not present in \SCITE\
125we decided to use that editor because it frees us from maintaining our own. I
126ported our \TEX\ and \METAPOST\ (line based) syntax highlighting to \SCITE\ and
127got a lot of others for free.
128
129After a while I found out that there was an extension interface written in \LUA.
130I played with it and wrote a few extensions too. This pleasant experience later
131triggered the \LUATEX\ project.
132
133A decade into the century \SCITE\ got another new feature: you can write dynamic
134external lexers in \LUA\ using \LPEG. As in the meantime \CONTEXT\ has evolved in
135a \TEX/\LUA\ hybrid, it made sense to look into this. The result is a couple of
136lexers that suit \TEX, \METAPOST\ and \LUA\ usage in \CONTEXT\ \MKIV. As we also
137use \XML\ as input and output format a lexer for \XML\ is also provided. And
138because \PDF\ is one of the backend formats lexing of \PDF\ is also implemented.
139In the process some of the general lexing framework were adapted to suit our
140demands for speed. For a long time we shipped these files as well but at point I
141decided that it made no sense to keep adapting to the relatively frequent changes
142in the \API. The last version in the 3.* series worked okay, in the 4.* series
143things failed but we didn't adapt, and when series 5.* showed up I decided to
144drop the old lexer compatibility. I assume that a version of \SCITE\ is run that
145has \LPEG\ available in the main \LUA\ instance and that also supports copying
146text fragments using the editor object. (Till that is the case, we provide binaries
147with the \CONTEXT\ distribution.)
148
149In the \CONTEXT\ (standalone) distribution you will find the relevant files
150under:
151
152\starttyping
153<texroot>/tex/texmf-context/context/data/scite
154\stoptyping
155
156Normally a user will not have to dive into the implementation details but in
157principle you can tweak the properties files to suit your purpose.
158
159\stopsubject
160
161\startsubject[title={The look and feel}]
162
163The color scheme that we use is consistent over the lexers but we use more colors
164that in the traditional lexing. For instance, \TEX\ primitives, low level \TEX\
165commands, \TEX\ constants, basic file structure related commands, and user
166commands all get a different treatment. When spell checking is turned on, we
167indicate unknown words, but also words that are known but might need checking,
168for instance because they have an uppercase character. In \in {figure}
169[fig:colors] we some of that in practice.
170
171\placefigure
172  [page]
173  [fig:colors]
174  {Nested lexers in action.}
175  {\rotate
176     [rotation=90]
177     {\externalfigure
178        [scite-context-visual.png]
179        [maxheight=1.2\textwidth,
180         maxwidth=.9\textheight]}}
181
182\stopsubject
183
184\startsubject[title={Installing \SCITE}]
185
186Installing \SCITE\ is straightforward. We are most familiar with \MSWINDOWS\ but
187for other operating systems installation is not much different. First you need to
188fetch the archive from:
189
190\starttyping
191www.scintilla.org
192\stoptyping
193
194The \MSWINDOWS\ binaries are zipped in \type {wscite.zip}, and you can unzip this
195in any directory you want as long as you make sure that the binary ends up in
196your path or as shortcut on your desktop. So, say that you install \SCITE\ in:
197
198\starttyping
199c:\data\system\scite\wscite
200\stoptyping
201
202You need to add this path to your local path definition. Installing \SCITE\ to
203some known place has the advantage that you can move it around. There are no
204special dependencies on the operating system.
205
206On \MSWINDOWS\ you can for instance install \SCITE\ in:
207
208\starttyping
209c:\data\system\scite
210\stoptyping
211
212and then end up with:
213
214\starttyping
215c:\data\system\scite\wscite
216\stoptyping
217
218and that is the path you need to add to your environment \type {PATH} variable.
219
220On \LINUX\ the files end up in:
221
222\starttyping
223/usr/bin
224/usr/share/scite
225\stoptyping
226
227Where the second path is the path we will put more files.
228
229\stopsubject
230
231\startsubject[title={Binaries}]
232
233When you compile binaries yourself or get them from somewhere you need to make
234sure that they en dup in te right place (see previous section): When you're on
235\MSWINDOWS\ they fly to:
236
237\starttyping
238wscite/scite.exe
239wscite/scilexer.dll
240\stoptyping
241
242And on \LINUX\ then end up in:
243
244\starttyping
245/usr/bin/SciTE
246/usr/bin/libscintilla.so
247/usr/bin/liblexilla.so
248\stoptyping
249
250Because we only use the official \LUA\ interface methods the lexers should just work,
251assuming that you have imported the \typ {context/scite-context-user} properties file.
252
253\stopsubject
254
255\startsubject[title={Installing the \CONTEXT\ lexers}]
256
257% When we started using this nice extension, we ran into issues and as a
258% consequence shipped a patched \LUA\ code. We also needed some more control as we
259% wanted to provide more features and complex nested lexers. Because the library
260% \API\ changed a couple of times, we now have our own variant which will be
261% cleaned up over time to be more consistent with our other \LUA\ code (so that we
262% can also use it in \CONTEXT\ as variant verbatim lexer). We hope to be able to
263% use the \type {scintillua} library as it does the job.
264%
265% Anyway, if you want to use \CONTEXT, you need to copy the relevant files from
266
267If you want to use \CONTEXT, you need to copy the relevant files from
268
269\starttyping
270<texroot>/tex/texmf-context/context/data/scite
271\stoptyping
272
273to the path were \SCITE\ keeps its property files (\type {*.properties}). This is
274the path we already mentioned. There should be a file there called \type
275{SciteGlobal.properties}.
276
277So,in the end you get on \MSWINDOWS\ new files in:
278
279\starttyping
280c:\data\system\scite\wscite
281c:\data\system\scite\wscite\context
282c:\data\system\scite\wscite\context\lexer
283c:\data\system\scite\wscite\context\lexer\themes
284c:\data\system\scite\wscite\context\lexer\data
285c:\data\system\scite\wscite\context\documents
286\stoptyping
287
288while on \LINUX\ you get:
289
290\starttyping
291/usr/bin/share/
292/usr/bin/share/context
293/usr/bin/share/context/lexer
294/usr/bin/share/context/lexer/themes
295/usr/bin/share/context/lexer/data
296/usr/bin/share/context/documents
297\stoptyping
298
299At the end of the \type {SciteGlobal.properties} you need to add the following
300line:
301
302\starttyping
303import context/scite-context-user
304\stoptyping
305
306After this, things should run as expected (given that \TEX\ runs at the console
307as well).
308
309% In order to run the commands needed, we assume that the following programs
310% are installed:
311%
312% \startitemize[packed]
313% \item tidy (for quick and dirty checking of \XML\ files)
314% \item xsltproc (for converting \XML\ files into other formats)
315% \item acrobat (for viewing files)
316% \item ghostview (for viewing files, use gv on \UNIX)
317% \item rxvt (a console, only needed on \UNIX)
318% \stopitemize
319
320\stopsubject
321
322\startsubject[title={Fonts}]
323
324The configuration file defaults to the Dejavu fonts. These free fonts are part of
325the \CONTEXT\ suite (also known as the standalone distribution). Of course you
326can fetch them from \type {http://dejavu-fonts.org} as well. You have to copy
327them to where your operating system expects them. In the suite they are available
328in:
329
330\starttyping
331<contextroot>/tex/texmf/fonts/truetype/public/dejavu
332\stoptyping
333
334\stopsubject
335
336\startsubject[title={Extensions}]
337
338Just a quick note to some extensions. If you select a part of the text (normally
339you do this with the shift key pressed) and you hit \type {Shift-F11}, you get a
340menu with some options. More (robust) ones will be provided at some point.
341
342\stopsubject
343
344\startsubject[title={Spell checking}]
345
346If you want to have spell checking, you need have files with correct words on
347each line. The first line of a file determines the language:
348
349\starttyping
350% language=uk
351\stoptyping
352
353When you use the external lexers, you need to provide some files. Given that you
354have a text file with valid words only, you can run the following script:
355
356\starttyping
357mtxrun --script scite --words nl uk
358\stoptyping
359
360This will convert files with names like \type {spell-nl.txt} into \LUA\ files
361that you need to copy to the \type {lexers/data} path. Spell checking happens
362realtime when you have the language directive (just add a bogus character to
363disable it). Wrong words are colored red, and words that might have a case
364problem are colored orange. Recognized words are greyed and words with less than
365three characters are ignored.
366
367A spell checking file has to be put in the \type {lexers/data} directory and
368looks as follows (e.g. \type {spell-uk.lua}):
369
370\starttyping
371return {
372 ["max"]=40,
373 ["min"]=3,
374 ["n"]=151493,
375 ["words"]={
376  ["aardvark"]="aardvark",
377  ["aardvarks"]="aardvarks",
378  ["aardwolf"]="aardwolf",
379  ["aardwolves"]="aardwolves",
380  ...
381 }
382}
383\stoptyping
384
385The keys are words that get checked for the given value (which can have uppercase
386characters). The word files are not distributed (but they might be at some point).
387
388In the case of internal lexers, the following file is needed:
389
390\starttyping
391spell-uk.txt
392\stoptyping
393
394If you use the traditional lexer, this file is taken from the path determined by
395the environment variable:
396
397\starttyping
398CTXSPELLPATH
399\stoptyping
400
401As already mentioned, the lpeg lexer expects them in the data path. This is
402because the \LUA\ instance that does the lexing is rather minimalistic and lacks
403some libraries as well as cannot access the main \SCITE\ state.
404
405Spell checking in \type {txt} files is enabled by adding a first line:
406
407\starttyping
408[#!-%] language=uk
409\stoptyping
410
411The first character on that line is one of the four mentioned between square
412brackets. So,
413
414\starttyping
415# language=uk
416\stoptyping
417
418should work. For \XML\ files there are two methods. You can use the following (at
419the start of the file):
420
421\starttyping
422<?xml ... language="uk" ?>
423\stoptyping
424
425But probably better is to use the next directive just below the
426usual \XML\ marker line:
427
428\starttyping
429<?context-directive editor language uk ?>
430\stoptyping
431
432\stopsubject
433
434\startsubject[title={Interface selection}]
435
436In a similar fashion you can drive the interface checking:
437
438\starttyping
439% interface=nl
440\stoptyping
441
442\stopsubject
443
444\startsubject[title={Property files}]
445
446The internal lexers are controlled by the property files while the external ones
447are steered with themes. Unfortunately there is hardly any access to properties
448from the external lexer code nor can we consult the file system and/or run
449programs like \type {mtxrun}. This means that we cannot use configuration files
450in the \CONTEXT\ distribution directly. Hopefully this changes with future
451releases.
452
453\stopsubject
454
455\startsubject[title={The external lexers}]
456
457These are the more advanced lexers. They provide more detail and the \CONTEXT\
458lexer also supports nested \METAPOST\ and \LUA. Currently there is no detailed
459configuration but this might change once they are stable.
460
461The external lexers operate on documents while the internal ones operate on
462lines. This can make the external lexers slow on large documents. We've optimized
463the code somewhat for speed and memory consumption but there's only so much one
464can do. While lexing each change in style needs a small table but allocating and
465garbage collecting many small tables comes at a price. Of course in practice this
466probably gets unnoticed. \footnote {I wrote the code in 2011 on a more than 5
467years old Dell M90 laptop, so I suppose that speed is less an issue now.}
468
469The external lpeg lexers work okay with the \MSWINDOWS\ and \LINUX\ versions of
470\SCITE, but unfortunately at the time of writing this, the \LUA\ library that is
471needed is not available for the \MACOSX\ version of \SCITE. Also, due to the fact
472that the lexing framework is rather isolated, there are some issues that cannot
473be addressed in the properly, at least not currently.
474
475In addition to \CONTEXT\ and \METAFUN\ lexing a \LUA\ lexer is also provided so
476that we can handle \CONTEXT\ \LUA\ Document (\CLD) files too. There is also an
477\XML\ lexer. This one also provides spell checking. The \PDF\ lexer tries to do a
478good job on \PDF\ files, but it has some limitations. There is also a simple text
479file lexer that does spell checking. Finally there is a lexer for \CWEB\ files.
480
481Don't worry if you see an orange rectangle in your \TEX\ or \XML\ document. This
482indicates that there is a special space character there, for instance \type
483{0xA0}, the nonbreakable space. Of course we assume that you use \UTF8 as input
484encoding.
485
486\stopsubject
487
488\startsubject[title={The internal lexers}]
489
490\SCITE\ has quite some built in lexers. A lexer is responsible for highlighting
491the syntax of your document. The way a \TEX\ file is treated is configured in the
492file:
493
494\starttyping
495tex.properties
496\stoptyping
497
498You can edit this file to your needs using the menu entry under \type {options}
499in the top bar. In this file, the following settings apply to the \TEX\ lexer:
500
501\starttyping
502lexer.tex.interface.default=0
503lexer.tex.use.keywords=1
504lexer.tex.comment.process=0
505lexer.tex.auto.if=1
506\stoptyping
507
508The option \type {lexer.tex.interface.default} determines the way keywords are
509highlighted. You can control the interface from your document as well, which
510makes more sense that editing the configuration file each time.
511
512\starttyping
513% interface=all|tex|nl|en|de|cz|it|ro|latex
514\stoptyping
515
516The values in the properties file and the keywords in the preamble line have the
517following meaning:
518
519\starttabulate[|lT|lT|p|]
520\NC 0 \NC all   \NC all commands (preceded by a backslash)                \NC \NR
521\NC 1 \NC tex   \NC \TEX, \ETEX, \PDFTEX, \OMEGA\ primitives (and macros) \NC \NR
522\NC 2 \NC nl    \NC the dutch \CONTEXT\ interface                         \NC \NR
523\NC 3 \NC en    \NC the english \CONTEXT\ interface                       \NC \NR
524\NC 4 \NC de    \NC the german \CONTEXT\ interface                        \NC \NR
525\NC 5 \NC cz    \NC the czech \CONTEXT\ interface                         \NC \NR
526\NC 6 \NC it    \NC the italian \CONTEXT\ interface                       \NC \NR
527\NC 7 \NC ro    \NC the romanian \CONTEXT\ interface                      \NC \NR
528\NC 8 \NC latex \NC \LATEX\ (apart from packages)                         \NC \NR
529\stoptabulate
530
531The configuration file is set up in such a way that you can easily add more
532keywords to the lists. The keywords for the second and higher interfaces are
533defined in their own properties files. If you're curious about the way this is
534configures, you can peek into the property files that start with \type
535{scite-context}. When you have \CONTEXT\ installed you can generate configuration
536files with
537
538\starttyping
539mtxrun --script interface --scite
540\stoptyping
541
542You need to make sure that you move the result to the right place so best not
543mess around with this command and use the files from the distribution.
544
545Back to the properties in \type {tex.properties}. You can disable keyword
546coloring alltogether with:
547
548\starttyping
549lexer.tex.use.keywords=0
550\stoptyping
551
552but this is only handy for testing purposes. More interesting is that you can
553influence the way comment is treated:
554
555\starttyping
556lexer.tex.comment.process=0
557\stoptyping
558
559When set to zero, comment is not interpreted as \TEX\ code and it will come out
560in a uniform color. But, when set to one, you will get as much colors as a \TEX\
561source. It's a matter of taste what you choose.
562
563The lexer tries to cope with the \TEX\ syntax as good as possible and takes for
564instance care of the funny \type {^^} notation. A special treatment is applied to
565so called \type {\if}'s:
566
567\starttyping
568lexer.tex.auto.if=1
569\stoptyping
570
571This is the default setting. When set to one, all \type {\ifwhatever}'s will be
572seen as a command. When set to zero, only the primitive \type {\if}'s will be
573treated. In order not to confuse you, when this property is set to one, the lexer
574will not color an \type {\ifwhatever} that follows an \type {\newif}.
575
576\stopsubject
577
578\startsubject[title={The \METAPOST\ lexer}]
579
580The \METAPOST\ lexer is set up slightly different from its \TEX\ counterpart,
581first of all because \METAPOST\ is more a language that \TEX. As with the \TEX\
582lexer, we can control the interpretation of identifiers. The \METAPOST\ specific
583configuration file is:
584
585\starttyping
586metapost.properties
587\stoptyping
588
589Here you can find properties like:
590
591\starttyping
592lexer.metapost.interface.default=1
593\stoptyping
594
595Instead of editing the configuration file you can control the lexer with the
596first line in your document:
597
598\starttyping
599% interface=none|metapost|mp|metafun
600\stoptyping
601
602The numbers and keywords have the following meaning:
603
604\starttabulate[|lT|lT|p|]
605\NC 0 \NC none           \NC no highlighting of identifiers   \NC \NR
606\NC 1 \NC metapost or mp \NC \METAPOST\ primitives and macros \NC \NR
607\NC 2 \NC metafun        \NC \METAFUN\ macros                 \NC \NR
608\stoptabulate
609
610Similar to the \TEX\ lexer, you can influence the way comments are handled:
611
612\starttyping
613lexer.metapost.comment.process=1
614\stoptyping
615
616This will interpret comment as \METAPOST\ code, which is not that useful
617(opposite to \TEX, where documentation is often coded in \TEX).
618
619The lexer will color the \METAPOST\ keywords, and, when enabled also additional
620keywords (like those of \METAFUN). The additional keywords are colored and shown
621in a slanted font.
622
623The \METAFUN\ keywords are defined in a separate file:
624
625\starttyping
626metafun-scite.properties
627\stoptyping
628
629You can either copy this file to the path where you global properties files lives,
630or put a copy in the path of your user properties file. In that case you need to
631add an entry to the file \type {SciTEUser.properties}:
632
633\starttyping
634import metafun-scite
635\stoptyping
636
637The lexer is able to recognize \type {btex}||\type {etex} and will treat anything
638in between as just text. The same happens with strings (between \type {"}). Both
639act on a per line basis.
640
641\stopsubject
642
643\startsubject[title={Using \ConTeXt}]
644
645When \type {mtxrun} is in your path, \CONTEXT\ should run out of the box. You can
646find \type {mtxrun} in:
647
648\starttyping
649<contextroot>/tex/texmf-mswin/bin
650\stoptyping
651
652or in a similar path that suits the operating system that you use.
653
654When you hit \type{CTRL-12} your document will be processed. Take a look at the
655\type {Tools} menu to see what more is provided.
656
657\stopsubject
658
659\startsubject[title={Extensions (using \LUA)}]
660
661When the \LUA\ extensions are loaded, you will see a message in the log pane that
662looks like:
663
664\starttyping
665-  see scite-ctx.properties for configuring info
666
667-  ctx.spellcheck.wordpath set to ENV(CTXSPELLPATH)
668-  ctxspellpath set to c:\data\develop\context\spell
669-  ctx.spellcheck.wordpath expands to c:\data\develop\context\spell
670
671-  ctx.wraptext.length is set to 65
672-  key bindings:
673
674Shift + F11   pop up menu with ctx options
675
676Ctrl  + B     check spelling
677Ctrl  + M     wrap text (auto indent)
678Ctrl  + R     reset spelling results
679Ctrl  + I     insert template
680Ctrl  + E     open log file
681Ctrl  + +     show language character strip (key might change)
682
683-  recognized first lines:
684
685xml   <?xml version='1.0' language='nl'
686tex   % language=nl
687\stoptyping
688
689This message tells you what extras are available. The language character strip feature
690is relatively new and displays buttons at the bottom of the screen for the characters
691in a (chosen) language. This is handy when you occasionally have to key in (snippets) of
692a language you're not familiar with. More alphabets will be added (we take data from some
693\CONTEXT\ language relates files).
694
695\stopsubject
696
697\startsubject[title={Templates}]
698
699It is possible to define (and use) templates. There is a demo file in the distribution called
700\type {scite-ctx-templates.lua}. You can put a similar file in your working path or one or two
701levels up from there. If not found, the default (demo) file will be used. a manu is called up
702with \type {ctrl-i}.
703
704A template file is a \LUA\ file and looks like this:
705
706\typefile{../scite-ctx-templates.lua}
707
708In \XML\ sources you can add a line:
709
710\starttyping
711<?context-directive job ctxtemplate mytemplates.lua ?>
712\stoptyping
713
714The file will be searched for in the current direct and upto two levels higher. When no file
715is found the \TEX\ distribution is checked.
716
717The files \type {scite-ctx-example} and \type {scite-ctx-context} define the menu commands,
718like:
719
720\starttyping
721command.25.$(file.patterns.example)=insert_template
722\stoptyping
723
724\stopsubject
725
726\startsubject[title={Using \SCITE}]
727
728The following keybindings are available in \SCITE. Most of this list is taken
729from the on|-|line help pages.
730
731\startbuffer[keybindings]
732\starttabulate[|l|p|]
733\FL
734\NC \rm \bf keybinding   \NC \bf meaning (taken from the \SCITE\ help file)                                \NC \NR
735\ML
736\NC \type{Ctrl+Keypad+}         \NC magnify text size                                                      \NC \NR
737\NC \type{Ctrl+Keypad-}         \NC reduce text size                                                       \NC \NR
738\NC \type{Ctrl+Keypad/}         \NC restore text size to normal                                            \NC \NR
739\ML
740\NC \type{Ctrl+Keypad*}         \NC expand or contract a fold point                                        \NC \NR
741\ML
742\NC \type{Ctrl+Tab}             \NC cycle through recent files                                             \NC \NR
743\ML
744\NC \type{Tab}                  \NC indent block                                                           \NC \NR
745\NC \type{Shift+Tab}            \NC dedent block                                                           \NC \NR
746\ML
747\NC \type{Ctrl+BackSpace}       \NC delete to start of word                                                \NC \NR
748\NC \type{Ctrl+Delete}          \NC delete to end of word                                                  \NC \NR
749\NC \type{Ctrl+Shift+BackSpace} \NC delete to start of line                                                \NC \NR
750\NC \type{Ctrl+Shift+Delete}    \NC delete to end of line                                                  \NC \NR
751\ML
752\NC \type{Ctrl+Home}            \NC go to start of document; \type{Shift} extends selection                \NC \NR
753\NC \type{Ctrl+End}             \NC go to end of document; \type{Shift} extends selection                  \NC \NR
754\NC \type{Alt+Home}             \NC go to start of display line; \type{Shift} extends selection            \NC \NR
755\NC \type{Alt+End}              \NC go to end of display line; \type{Shift} extends selection              \NC \NR
756\ML
757\NC \type{Ctrl+F2}              \NC create or delete a bookmark                                            \NC \NR
758\NC \type{F2}                   \NC go to next bookmark                                                    \NC \NR
759\ML
760\NC \type{Ctrl+F3}              \NC find selection                                                         \NC \NR
761\NC \type{Ctrl+Shift+F3}        \NC find selection backwards                                               \NC \NR
762\ML
763\NC \type{Ctrl+Up}              \NC scroll up                                                              \NC \NR
764\NC \type{Ctrl+Down}            \NC scroll down                                                            \NC \NR
765\ML
766\NC \type{Ctrl+C}               \NC copy selection to buffer                                               \NC \NR
767\NC \type{Ctrl+V}               \NC insert content of buffer                                               \NC \NR
768\NC \type{Ctrl+X}               \NC copy selection to buffer and delete selection                          \NC \NR
769\ML
770\NC \type{Ctrl+L}               \NC line cut                                                               \NC \NR
771\NC \type{Ctrl+Shift+T}         \NC line copy                                                              \NC \NR
772\NC \type{Ctrl+Shift+L}         \NC line delete                                                            \NC \NR
773\NC \type{Ctrl+T}               \NC line transpose with previous                                           \NC \NR
774\NC \type{Ctrl+D}               \NC line duplicate                                                         \NC \NR
775\ML
776\NC \type{Ctrl+K}               \NC find matching preprocessor conditional, skipping nested ones           \NC \NR
777\NC \type{Ctrl+Shift+K}         \NC select to matching preprocessor conditional                            \NC \NR
778\NC \type{Ctrl+J}               \NC find matching preprocessor conditional backwards, skipping nested ones \NC \NR
779\NC \type{Ctrl+Shift+J}         \NC select to matching preprocessor conditional backwards                  \NC \NR
780\ML
781\NC \type{Ctrl+[}               \NC previous paragraph; \type{Shift} extends selection                     \NC \NR
782\NC \type{Ctrl+]}               \NC next paragraph; \type{Shift} extends selection                         \NC \NR
783\NC \type{Ctrl+Left}            \NC previous word; \type{Shift} extends selection                          \NC \NR
784\NC \type{Ctrl+Right}           \NC next word; \type{Shift} extends selection                              \NC \NR
785\NC \type{Ctrl+/}               \NC previous word part; \type{Shift} extends selection                     \NC \NR
786\NC \type{Ctrl+\ }              \NC next word part; \type{Shift} extends selection                         \NC \NR
787\ML
788\NC \type{F12 / Ctrl+F7}        \NC check (or process)                                                     \NC \NR
789\NC \type{Ctrl+F12 / Ctrl+F7}   \NC process (run)                                                          \NC \NR
790\NC \type{Alt+F12 / Ctrl+F7}    \NC process (run) using the luajit vm (if applicable)                      \NC \NR
791\LL
792\stoptabulate
793\stopbuffer
794
795\getbuffer[keybindings]
796
797\page
798
799\stopsubject
800
801\startsubject[title={Affiliation}]
802
803\starttabulate[|l|l|]
804\NC author    \NC Hans Hagen                    \NC \NR
805\NC copyright \NC PRAGMA ADE, Hasselt NL        \NC \NR
806\NC more info \NC \type {www.pragma-ade.com}    \NC \NR
807\NC           \NC \type {www.contextgarden.net} \NC \NR
808\NC version   \NC \currentdate                  \NC \NR
809\stoptabulate
810
811\stoptext
812