Start drawing text 1 pixel below.
[mp-5.x.git] / mp_misc.mpsl
blob0e9a38cf6008a3b48a4edde3755fbcc28f6cab03
1 /*
3     Minimum Profit 5.x
4     A Programmer's Text Editor
6     Miscellaneous editor actions.
8     Copyright (C) 1991-2007 Angel Ortega <angel@triptico.com>
10     This program is free software; you can redistribute it and/or
11     modify it under the terms of the GNU General Public License
12     as published by the Free Software Foundation; either version 2
13     of the License, or (at your option) any later version.
15     This program is distributed in the hope that it will be useful,
16     but WITHOUT ANY WARRANTY; without even the implied warranty of
17     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18     GNU General Public License for more details.
20     You should have received a copy of the GNU General Public License
21     along with this program; if not, write to the Free Software
22     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24     http://www.triptico.com
28 /* editor actions */
30 mp.actions['eval']      = sub (d) { 
31         local t = mp.form( [
32                 { 'label' => L("Code to execute:"),
33                   'type' => 'text',
34                   'history' => 'eval' }
35                 ]);
37         if (t != NULL) {
38                 t = t[0];
40                 if (! regex('/;\s*$/', t))
41                         t = t ~ ';';
43                 t = eval(t);
45                 if (ERROR != NULL) {
46                         mp.alert(L("Error: ") ~ ERROR);
47                         ERROR = NULL;
48                 }
49                 else
50                 if (t != NULL)
51                         mp.alert(L("Exit value:\n") ~ t);
52         }
55 mp.actions['eval_doc']  = sub (d) {
56         local t = join("\n", d.txt.lines);
58         if (t != NULL) {
59                 t = eval(t);
61                 if (ERROR != NULL) {
62                         mp.alert(L("Error: ") ~ ERROR);
64                         /* try to move the cursor to the line
65                            where the error was */
66                         local l;
68                         if ((l = regex( [ '/, line /', '/[0-9]+/' ], ERROR)) != NULL)
69                                 mp.set_y(d, l[1]);
71                         ERROR = NULL;
72                 }
73         }
76 mp.actions['encoding']  = sub (d) {
77         local t = mp.form( [
78                 { 'label' => L("Encoding (utf-8, iso8859-1, etc.; empty, current locale)") ~ ':',
79                   'type' => 'text',
80                   'history' => 'encoding' }
81                 ]);
83         if (t != NULL)
84                 if (encoding(t[0]) == -1)
85                         mp.alert(L("Invalid encoding ") ~ t[0]);
88 mp.actions['zoom_in']   = sub (d) {
90         mp.config.font_size++;
91         mp.update_ui();
94 mp.actions['zoom_out']  = sub (d) {
96         if (mp.config.font_size > 4) {
97                 mp.config.font_size--;
98                 mp.update_ui();
99         }
102 mp.actions['word_count'] = sub (d) {
103         local w = 0;
104         local a = mp.get_active_area(d);
106         mp.busy(1);
107         foreach (l, a)
108                 w += size(mp.split_by_words(l));
109         mp.busy(0);
111         mp.alert(sprintf(L("Lines: %d Words: %d"), size(a), w));
114 mp.actions['about'] = sub (d) {
115         local msg = L(
116         "\nMinimum Profit %s - Programmer Text Editor\n\n"\
117         "Components: MPDM %s, MPSL %s\n\n"\
118         "Copyright (C) 1991-2007 Angel Ortega <angel@triptico.com>\n"\
119         "\n"\
120         "This program is free software; you can redistribute it and/or\n"\
121         "modify it under the terms of the GNU General Public License\n"\
122         "as published by the Free Software Foundation; either version 2\n"\
123         "of the License, or (at your option) any later version.\n"\
124         "\n"\
125         "This program is distributed in the hope that it will be useful,\n"\
126         "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"\
127         "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"\
128         "See the GNU General Public License for more details.\n"\
129         "\n"\
130         "You should have received a copy of the GNU General Public License\n"\
131         "along with this program; if not, write to the Free Software Foundation,\n"\
132         "Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n"\
133         "\n"\
134         "Home page: http://www.triptico.com/software/mp.html\n"\
135         "Mailing list: mp-subscribe@lists.triptico.com\n");
137         local mpdm = MPDM();
138         msg = sprintf(msg, mp.VERSION, mpdm.version, MPSL.VERSION);
140         d = mp.open("<about>");
142         if (size(d.txt.lines) == 1) {
143                 mp.insert(d, msg);
144                 d.txt.mod = 0;
145                 d.read_only = 1;
146         }
149 /* default key bindings */
151 mp.keycodes['escape']           = 'eval';
152 mp.keycodes['f12']              = 'zoom_in';
153 mp.keycodes['ctrl-kp-plus' ]    = 'zoom_in';
154 mp.keycodes['f11']              = 'zoom_out';
155 mp.keycodes['ctrl-kp-minus' ]   = 'zoom_out';
157 /* action descriptions */
159 mp.actdesc['eval']              = LL("Execute MPSL code...");
160 mp.actdesc['eval_doc']          = LL("Execute document as MPSL");
161 mp.actdesc['encoding']          = LL("Set charset encoding...");
162 mp.actdesc['zoom_in']           = LL("Bigger font");
163 mp.actdesc['zoom_out']          = LL("Smaller font");
164 mp.actdesc['word_count']        = LL("Count words");
165 mp.actdesc['about']             = LL("About...");
167 /* code */
169 sub dump(v)
170 /* overwrite of the MPSL dump() function, dumping over a text document */
172         local d = mp.open("<dump>");
174         mp.move_eof(d);
175         mp.insert(d, dumper(v));
176         d.txt.mod = 0;
177         d.read_only = 1;