Avoid deleting the range when the selection is incomplete.
[mp-5.x.git] / mp_templates.mpsl
blob820d3ccc181cb27521803443a35fb36dea2315e9
1 /*
3     Minimum Profit 5.x
4     A Programmer's Text Editor
6     Templates.
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['insert_template']    = sub(d) {
32         local l, t;
34         /* no local templates? do nothing */
35         if ((l = mp.long_op(mp.read_templates_file)) == NULL)
36                 return;
38         /* select one */
39         if ((t = mp.form( [
40                 { 'label'       => L("Template to insert:"),
41                   'type'        => 'list',
42                   'list'        => l }
43                 ])) == NULL)
44                 return;
45         t = t[0];
47         mp.store_undo(d);
49         /* insert the template content */
50         mp.insert(d, mp.templates[l[t]]);
53 mp.actions['open_templates_file'] = sub (d) {
55         mp.open(HOMEDIR ~ ".mp_templates");
58 /** default key bindings **/
60 /** action descriptions **/
62 mp.actdesc['insert_template']           = LL("Insert template...");
63 mp.actdesc['open_templates_file']       = LL("Edit templates file");
65 /** data **/
67 mp.templates = {};
69 /** code **/
71 sub mp.read_templates_file()
72 /* reads the $HOME/.mp_templates file into mp.templates */
74         local f, l, k, v, n;
76         /* doesn't exist? just return */
77         if ((f = open(HOMEDIR ~ "/.mp_templates", "r")) == NULL)
78                 return NULL;
80         k = NULL;
81         v = NULL;
82         n = [];
84         /* reset */
85         mp.templates = {};
87         while (l = read(f)) {
88                 if (regex("/^%%/", l)) {
89                         /* new template: store previous, if any */
90                         if (k && v) {
91                                 push(n, k);
92                                 mp.templates[k] = v;
93                         }
95                         /* strip prefix */
96                         k = sregex("/^%%/", mp.chomp(l), NULL);
97                         v = NULL;
98                 }
99                 else {
100                         /* add to v */
101                         v = v ~ l;
102                 }
103         }
105         /* store last value */
106         if (k && v) {
107                 push(n, k);
108                 mp.templates[k] = v;
109         }
111         close(f);
113         /* returns keys(mp.templates), but in its original order */
114         return n;