annotate lisp/strokes.el @ 56905:661d52db56de

(isearch-toggle-regexp): Set `isearch-success' and `isearch-adjusted' to `t'. (isearch-toggle-case-fold): Set `isearch-success' to `t'. (isearch-message-prefix): Add "pending" for isearch-adjusted. (isearch-other-meta-char): Restore isearch-point unconditionally. (isearch-query-replace): Add new arg `regexp-flag' and use it. Set point to start of match if region is not active in transient mark mode (to include the current match to region boundaries). Push the search string to `query-replace-from-history-variable'. Add prompt "Query replace regexp" for isearch-regexp. Add region beginning/end as last arguments of `perform-replace.' (isearch-query-replace-regexp): Replace code by the call to `isearch-query-replace' with arg `t'.
author Juri Linkov <juri@jurta.org>
date Fri, 03 Sep 2004 20:32:57 +0000
parents 4ca4b1218e81
children 84c10e765f2b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
1 ;;; strokes.el --- control Emacs through mouse strokes
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
43233
ae3e8c9e9b87 (strokes-do-stroke, strokes-do-complex-stroke): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41603
diff changeset
3 ;; Copyright (C) 1997, 2000, 2002 Free Software Foundation, Inc.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
27975
ede0e764fc12 Change maintainer's mail address.
Gerd Moellmann <gerd@gnu.org>
parents: 19897
diff changeset
5 ;; Author: David Bakhash <cadet@alum.mit.edu>
45103
0fb0ba55467e Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 43233
diff changeset
6 ;; Maintainer: FSF
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: lisp, mouse, extensions
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; any later version.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; Boston, MA 02111-1307, USA.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; This is the strokes package. It is intended to allow the user to
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; control Emacs by means of mouse strokes. Once strokes is loaded, you
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; can always get help be invoking `strokes-help':
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; > M-x strokes-help
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; and you can learn how to use the package. A mouse stroke, for now,
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
35 ;; can be defined as holding the shift key and the middle button, for
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
36 ;; instance, and then moving the mouse in whatever pattern you wish,
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
37 ;; which you have set Emacs to understand as mapping to a given
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
38 ;; command. For example, you may wish the have a mouse stroke that
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
39 ;; looks like a capital `C' which means `copy-region-as-kill'. Treat
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
40 ;; strokes just like you do key bindings. For example, Emacs sets key
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
41 ;; bindings globally with the `global-set-key' command. Likewise, you
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
42 ;; can do
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
44 ;; > M-x strokes-global-set-stroke
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; to interactively program in a stroke. It would be wise to set the
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; first one to this very command, so that from then on, you invoke
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
48 ;; `strokes-global-set-stroke' with a stroke. Likewise, there may
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
49 ;; eventually be a `strokes-local-set-stroke' command, also analogous
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
50 ;; to `local-set-key'.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;; You can always unset the last stroke definition with the command
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;; > M-x strokes-unset-last-stroke
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;; and the last stroke that was added to `strokes-global-map' will be
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ;; removed.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;; Other analogies between strokes and key bindings are as follows:
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;; 1) To describe a stroke binding, you can type
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
63 ;; > M-x strokes-describe-stroke
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;; analogous to `describe-key'. It's also wise to have a stroke,
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;; like an `h', for help, or a `?', mapped to `describe-stroke'.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; 2) stroke bindings are set internally through the Lisp function
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
69 ;; `strokes-define-stroke', similar to the `define-key' function.
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
70 ;; some examples for a 3x3 stroke grid would be
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
72 ;; (strokes-define-stroke c-mode-stroke-map
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;; '((0 . 0) (1 . 1) (2 . 2))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;; 'kill-region)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
75 ;; (strokes-define-stroke strokes-global-map
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; '((0 . 0) (0 . 1) (0 . 2) (1 . 2) (2 . 2))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;; 'list-buffers)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;; however, if you would probably just have the user enter in the
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;; stroke interactively and then set the stroke to whatever he/she
54598
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
81 ;; entered. The Lisp function to interactively read a stroke is
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; `strokes-read-stroke'. This is especially helpful when you're
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; on a fast computer that can handle a 9x9 stroke grid.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;; NOTE: only global stroke bindings are currently implemented,
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;; however mode- and buffer-local stroke bindings may eventually
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;; be implemented in a future version.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;; The important variables to be aware of for this package are listed
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;; below. They can all be altered through the customizing package via
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 ;; > M-x customize
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 ;; and customizing the group named `strokes'. You can also read
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 ;; documentation on the variables there.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;; `strokes-minimum-match-score' (determines the threshold of error that
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
98 ;; makes a stroke acceptable or unacceptable. If your strokes aren't
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 ;; matching, then you should raise this variable.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ;; `strokes-grid-resolution' (determines the grid dimensions that you use
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 ;; when defining/reading strokes. The finer the grid your computer can
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ;; handle, the more you can do, but even a 3x3 grid is pretty cool.)
43233
ae3e8c9e9b87 (strokes-do-stroke, strokes-do-complex-stroke): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41603
diff changeset
104 ;; The default value (9) should be fine for most decent computers.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 ;; NOTE: This variable should not be set to a number less than 3.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;; `strokes-display-strokes-buffer' will allow you to hide the strokes
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;; buffer when doing simple strokes. This is a speedup for slow
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ;; computers as well as people who don't want to see their strokes.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 ;; If you find that your mouse is accelerating too fast, you can
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
112 ;; execute an X command to slow it down. A good possibility is
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ;; % xset m 5/4 8
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ;; which seems, heuristically, to work okay, without much disruption.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;; Whenever you load in the strokes package, you will be able to save
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;; what you've done upon exiting Emacs. You can also do
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
121 ;; > M-x strokes-prompt-user-save-strokes
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ;; and it will save your strokes in ~/.strokes, or you may wish to change
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;; this by setting the variable `strokes-file'.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 ;; Note that internally, all of the routines that are part of this
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ;; package are able to deal with complex strokes, as they are a superset
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 ;; of simple strokes. However, the default of this package will map
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
129 ;; S-mouse-2 to the command `strokes-do-stroke', and M-mouse-2 to
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
130 ;; `strokes-do-complex-stroke'. Complex strokes are terminated
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
131 ;; with mouse button 3.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
133 ;; You can also toggle between strokes mode by simple typing
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 ;; > M-x strokes-mode
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
137 ;; I hope that, with the help of others, this package will be useful
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
138 ;; in entering in pictographic-like language text using the mouse
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
139 ;; (i.e. Korean). Japanese and Chinese are a bit trickier, but I'm
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
140 ;; sure that with help it can be done. The next version will allow
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
141 ;; the user to enter strokes which "remove the pencil from the paper"
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
142 ;; so to speak, so one character can have multiple strokes.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 ;; You can read more about strokes at:
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 ;; http://www.mit.edu/people/cadet/strokes-help.html
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 ;; If you're interested in using strokes for writing English into Emacs
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 ;; using strokes, then you'll want to read about it on the web page above
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 ;; or just download from http://www.mit.edu/people/cadet/strokes-abc.el,
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 ;; which is nothing but a file with some helper commands for inserting
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 ;; alphanumerics and punctuation.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
154 ;; Great thanks to Rob Ristroph for his generosity in letting me use
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
155 ;; his PC to develop this, Jason Johnson for his help in algorithms,
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
156 ;; Euna Kim for her help in Korean, and massive thanks to the helpful
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
157 ;; guys on the help instance on athena (zeno, jered, amu, gsstark,
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
158 ;; ghudson, etc) Special thanks to Steve Baur, Kyle Jones, and Hrvoje
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
159 ;; Niksic for all their help. And special thanks to Dave Gillespie
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
160 ;; for all the elisp help--he is responsible for helping me use the cl
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
161 ;; macros at (near) max speed.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 ;; Tasks: (what I'm getting ready for future version)...
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
164 ;; 2) use 'strokes-read-complex-stroke for Korean, etc.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 ;; 4) buffer-local 'strokes-local-map, and mode-stroke-maps would be nice
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 ;; 6) add some hooks, like `strokes-read-stroke-hook'
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 ;; 7) See what people think of the factory settings. Should I change
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 ;; them? They're all pretty arbitrary in a way. I guess they
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 ;; should be minimal, but computers are getting lots faster, and
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 ;; if I choose the defaults too conservatively, then strokes will
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
171 ;; surely disappoint some people on decent machines (until they
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 ;; figure out M-x customize). I need feedback.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 ;; Other: I always have the most beta version of strokes, so if you
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 ;; want it just let me know.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175
52778
7558bb6529f9 Comment.
Dave Love <fx@gnu.org>
parents: 52401
diff changeset
176 ;; Fixme: Use pbm instead of xpm for pixmaps to work generally.
7558bb6529f9 Comment.
Dave Love <fx@gnu.org>
parents: 52401
diff changeset
177
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 ;;; Code:
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 ;;; Requirements and provisions...
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 (autoload 'mail-position-on-field "sendmail")
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
183 (eval-when-compile (require 'cl))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 ;;; Constants...
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
187 (defconst strokes-lift :strokes-lift
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
188 "Symbol representing a stroke lift event for complex strokes.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
189 Complex strokes are those which contain two or more simple strokes.")
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
191 (defconst strokes-xpm-header "/* XPM */
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
192 static char * stroke_xpm[] = {
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
193 /* width height ncolors cpp [x_hot y_hot] */
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
194 \"33 33 9 1 26 23\",
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
195 /* colors */
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
196 \" c none s none\",
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
197 \"* c #000000 s foreground\",
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
198 \"R c #FFFF00000000\",
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
199 \"O c #FFFF80000000\",
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
200 \"Y c #FFFFFFFF0000\",
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
201 \"G c #0000FFFF0000\",
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
202 \"B c #00000000FFFF\",
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
203 \"P c #FFFF0000FFFF\",
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
204 \". c #45458B8B0000\",
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
205 /* pixels */\n"
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
206 "The header to all xpm buffers created by strokes.")
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 ;;; user variables...
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 (defgroup strokes nil
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 "Control Emacs through mouse strokes"
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
212 :link '(emacs-commentary-link "strokes")
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
213 :link '(url-link "http://www.mit.edu/people/cadet/strokes-help.html")
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 :group 'mouse)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 (defcustom strokes-modeline-string " Strokes"
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
217 "*Modeline identification when Strokes mode is on \(default is \" Strokes\"\)."
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 :type 'string
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 :group 'strokes)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 (defcustom strokes-character ?@
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 "*Character used when drawing strokes in the strokes buffer.
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
223 \(The default is `@', which works well.\)"
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 :type 'character
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 :group 'strokes)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 (defcustom strokes-minimum-match-score 1000
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 "*Minimum score for a stroke to be considered a possible match.
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
229 Setting this variable to 0 would require a perfectly precise match.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 The default value is 1000, but it's mostly dependent on how precisely
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 you manage to replicate your user-defined strokes. It also depends on
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 the value of `strokes-grid-resolution', since a higher grid resolution
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 will correspond to more sample points, and thus more distance
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 measurements. Usually, this is not a problem since you first set
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 `strokes-grid-resolution' based on what your computer seems to be able
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
236 to handle (though the defaults are usually more than sufficient), and
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 then you can set `strokes-minimum-match-score' to something that works
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 for you. The only purpose of this variable is to insure that if you
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 do a bogus stroke that really doesn't match any of the predefined
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 ones, then strokes should NOT pick the one that came closest."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 :type 'integer
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 :group 'strokes)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 (defcustom strokes-grid-resolution 9
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 "*Integer defining dimensions of the stroke grid.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 The grid is a square grid, where STROKES-GRID-RESOLUTION defaults to
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 `9', making a 9x9 grid whose coordinates go from (0 . 0) on the top
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 left to ((STROKES-GRID-RESOLUTION - 1) . (STROKES-GRID-RESOLUTION - 1))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 on the bottom right. The greater the resolution, the more intricate
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 your strokes can be.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 NOTE: This variable should be odd and MUST NOT be less than 3 and need
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 not be greater than 33, which is the resolution of the pixmaps.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 WARNING: Changing the value of this variable will gravely affect the
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 strokes you have already programmed in. You should try to
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 figure out what it should be based on your needs and on how
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 quick the particular platform(s) you're operating on, and
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 only then start programming in your custom strokes."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 :type 'integer
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 :group 'strokes)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260
30540
ed5f60298be9 (strokes-file): Run the file name through
Eli Zaretskii <eliz@gnu.org>
parents: 27975
diff changeset
261 (defcustom strokes-file (convert-standard-filename "~/.strokes")
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 "*File containing saved strokes for stroke-mode (default is ~/.strokes)."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 :type 'file
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 :group 'strokes)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
266 (defvar strokes-buffer-name " *strokes*"
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
267 "The name of the buffer that the strokes take place in.")
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 (defcustom strokes-use-strokes-buffer t
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 "*If non-nil, the strokes buffer is used and strokes are displayed.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 If nil, strokes will be read the same, however the user will not be
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 able to see the strokes. This be helpful for people who don't like
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 the delay in switching to the strokes buffer."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 :type 'boolean
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 :group 'strokes)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 ;;; internal variables...
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 (defvar strokes-window-configuration nil
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 "The special window configuration used when entering strokes.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 This is set properly in the function `strokes-update-window-configuration'.")
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 (defvar strokes-last-stroke nil
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 "Last stroke entered by the user.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 Its value gets set every time the function
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 `strokes-fill-stroke' gets called,
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 since that is the best time to set the variable")
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (defvar strokes-global-map '()
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 "Association list of strokes and their definitions.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 Each entry is (STROKE . COMMAND) where STROKE is itself a list of
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 coordinates (X . Y) where X and Y are lists of positions on the
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 normalized stroke grid, with the top left at (0 . 0). COMMAND is the
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 corresponding interactive function")
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 (defvar strokes-load-hook nil
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 "Function or functions to be called when `strokes' is loaded.")
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
299 ;;; ### NOT IMPLEMENTED YET ###
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
300 ;;(defvar edit-strokes-menu
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
301 ;; '("Edit-Strokes"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
302 ;; ["Add stroke..." strokes-global-set-stroke t]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
303 ;; ["Delete stroke..." strokes-edit-delete-stroke t]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
304 ;; ["Change stroke" strokes-smaller t]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
305 ;; ["Change definition" strokes-larger t]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
306 ;; ["[Re]List Strokes chronologically" strokes-list-strokes t]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
307 ;; ["[Re]List Strokes alphabetically" strokes-list-strokes t]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
308 ;; ["Quit" strokes-edit-quit t]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
309 ;; ))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
310
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 ;;; Macros...
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
313 ;; unused
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
314 ;; (defmacro strokes-while-inhibiting-garbage-collector (&rest forms)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
315 ;; "Execute FORMS without interference from the garbage collector."
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
316 ;; `(let ((gc-cons-threshold 134217727))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
317 ;; ,@forms))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
318
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 (defsubst strokes-click-p (stroke)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 "Non-nil if STROKE is really click."
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
321 (< (length stroke) 2))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 ;;; old, but worked pretty good (just in case)...
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 ;;(defmacro strokes-define-stroke (stroke-map stroke def)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 ;; "Add STROKE to STROKE-MAP alist with given command DEF"
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
326 ;; (list 'if (list '< (list 'length stroke) 2)
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 ;; (list 'error
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 ;; "That's a click, not a stroke. See `strokes-click-command'")
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 ;; (list 'setq stroke-map (list 'cons (list 'cons stroke def)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 ;; (list 'remassoc stroke stroke-map)))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 (defsubst strokes-remassoc (key list)
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
333 (let (elt)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
334 (while (setq elt (assoc key list))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
335 (setq list (delete elt list))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
336 list)
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 (defmacro strokes-define-stroke (stroke-map stroke def)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 "Add STROKE to STROKE-MAP alist with given command DEF."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 `(if (strokes-click-p ,stroke)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
341 (error "That's a click, not a stroke")
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 (setq ,stroke-map (cons (cons ,stroke ,def)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 (strokes-remassoc ,stroke ,stroke-map)))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 (defsubst strokes-square (x)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
346 "Return the square of the number X."
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 (* x x))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 (defsubst strokes-distance-squared (p1 p2)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 "Gets the distance (squared) between to points P1 and P2.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 P1 and P2 are cons cells in the form (X . Y)."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 (let ((x1 (car p1))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 (y1 (cdr p1))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 (x2 (car p2))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 (y2 (cdr p2)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (+ (strokes-square (- x2 x1))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 (strokes-square (- y2 y1)))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 ;;; Functions...
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 (defsubst strokes-mouse-event-p (event)
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
362 (and (consp event) (symbolp (car event))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
363 (or (eq (car event) 'mouse-movement)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
364 (memq 'click (get (car event) 'event-symbol-elements))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
365 (memq 'down (get (car event) 'event-symbol-elements))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
366 (memq 'drag (get (car event) 'event-symbol-elements)))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
367
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
368 (defsubst strokes-button-press-event-p (event)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
369 (and (consp event) (symbolp (car event))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
370 (memq 'down (get (car event) 'event-symbol-elements))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
371
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
372 (defsubst strokes-button-release-event-p (event)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
373 (and (consp event) (symbolp (car event))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
374 (or (memq 'click (get (car event) 'event-symbol-elements))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
375 (memq 'drag (get (car event) 'event-symbol-elements)))))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 (defun strokes-event-closest-point-1 (window &optional line)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 "Return position of start of line LINE in WINDOW.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 If LINE is nil, return the last position visible in WINDOW."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 (let* ((total (- (window-height window)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 (if (window-minibuffer-p window)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 0 1)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 (distance (or line total)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 (save-excursion
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 (goto-char (window-start window))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 (if (= (vertical-motion distance) distance)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 (if (not line)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 (forward-char -1)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 (point))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 (defun strokes-event-closest-point (event &optional start-window)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 "Return the nearest position to where EVENT ended its motion.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 This is computed for the window where EVENT's motion started,
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
394 or for window START-WINDOW if that is specified."
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 (or start-window (setq start-window (posn-window (event-start event))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 (if (eq start-window (posn-window (event-end event)))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
397 (if (eq (posn-point (event-end event)) 'vertical-line)
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 (strokes-event-closest-point-1 start-window
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 (cdr (posn-col-row (event-end event))))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
400 (if (eq (posn-point (event-end event)) 'mode-line)
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 (strokes-event-closest-point-1 start-window)
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
402 (posn-point (event-end event))))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 ;; EVENT ended in some other window.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 (let* ((end-w (posn-window (event-end event)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 (end-w-top)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 (w-top (nth 1 (window-edges start-window))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 (setq end-w-top
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 (if (windowp end-w)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 (nth 1 (window-edges end-w))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 (/ (cdr (posn-x-y (event-end event)))
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
411 (frame-char-height end-w))))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 (if (>= end-w-top w-top)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 (strokes-event-closest-point-1 start-window)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 (window-start start-window)))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 (defun strokes-lift-p (object)
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
417 "Return non-nil if OBJECT is a stroke-lift."
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 (eq object strokes-lift))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 (defun strokes-unset-last-stroke ()
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 "Undo the last stroke definition."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 (interactive)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 (let ((command (cdar strokes-global-map)))
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
424 (if (y-or-n-p
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
425 (format "Really delete last stroke definition, defined to `%s'? "
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 command))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 (progn
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 (setq strokes-global-map (cdr strokes-global-map))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 (message "That stroke has been deleted"))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 (message "Nothing done"))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 ;;;###autoload
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 (defun strokes-global-set-stroke (stroke command)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 "Interactively give STROKE the global binding as COMMAND.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 Operated just like `global-set-key', except for strokes.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 COMMAND is a symbol naming an interactively-callable function. STROKE
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 is a list of sampled positions on the stroke grid as described in the
54598
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
438 documentation for the `strokes-define-stroke' function.
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
439
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
440 See also `strokes-global-set-stroke-string'."
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 (interactive
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 (list
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 (and (or strokes-mode (strokes-mode t))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 (strokes-read-complex-stroke
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
445 "Draw with mouse button 1 (or 2). End with button 3..."))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
446 (read-command "Command to map stroke to: ")))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 (strokes-define-stroke strokes-global-map stroke command))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448
54598
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
449 (defun strokes-global-set-stroke-string (stroke string)
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
450 "Interactively give STROKE the global binding as STRING.
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
451 Operated just like `global-set-key', except for strokes. STRING
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
452 is a string to be inserted by the stroke. STROKE is a list of
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
453 sampled positions on the stroke grid as described in the
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
454 documentation for the `strokes-define-stroke' function.
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
455
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
456 Compare `strokes-global-set-stroke'."
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
457 (interactive
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
458 (list
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
459 (and (or strokes-mode (strokes-mode t))
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
460 (strokes-read-complex-stroke
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
461 "Draw with mouse button 1 (or 2). End with button 3..."))
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
462 (read-string "String to map stroke to: ")))
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
463 (strokes-define-stroke strokes-global-map stroke string))
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
464
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 ;;(defun global-unset-stroke (stroke); FINISH THIS DEFUN!
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 ;; "delete all strokes matching STROKE from `strokes-global-map',
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 ;; letting the user input
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 ;; the stroke with the mouse"
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 ;; (interactive
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 ;; (list
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 ;; (strokes-read-stroke "Enter the stroke you want to delete...")))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 ;; (strokes-define-stroke 'strokes-global-map stroke command))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 (defun strokes-get-grid-position (stroke-extent position &optional grid-resolution)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
475 "Map POSITION to a new grid position.
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
476 Do so based on its STROKE-EXTENT and GRID-RESOLUTION.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 STROKE-EXTENT as a list \(\(XMIN . YMIN\) \(XMAX . YMAX\)\).
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 If POSITION is a `strokes-lift', then it is itself returned.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 Optional GRID-RESOLUTION may be used in place of STROKES-GRID-RESOLUTION.
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
480 The grid is a square whose dimension is [0,GRID-RESOLUTION)."
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 (cond ((consp position) ; actual pixel location
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 (let ((grid-resolution (or grid-resolution strokes-grid-resolution))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 (x (car position))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 (y (cdr position))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 (xmin (caar stroke-extent))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 (ymin (cdar stroke-extent))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 ;; the `1+' is there to insure that the
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 ;; formula evaluates correctly at the boundaries
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
489 (xmax (1+ (car (cadr stroke-extent))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
490 (ymax (1+ (cdr (cadr stroke-extent)))))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 (cons (floor (* grid-resolution
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 (/ (float (- x xmin))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 (- xmax xmin))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 (floor (* grid-resolution
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 (/ (float (- y ymin))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 (- ymax ymin)))))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 ((strokes-lift-p position) ; stroke lift
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 strokes-lift)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 (defun strokes-get-stroke-extent (pixel-positions)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
501 "From a list of absolute PIXEL-POSITIONS, return absolute spatial extent.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 The return value is a list ((XMIN . YMIN) (XMAX . YMAX))."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 (if pixel-positions
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 (let ((xmin (caar pixel-positions))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 (xmax (caar pixel-positions))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 (ymin (cdar pixel-positions))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 (ymax (cdar pixel-positions))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 (rest (cdr pixel-positions)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 (while rest
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 (if (consp (car rest))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 (let ((x (caar rest))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 (y (cdar rest)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 (if (< x xmin)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 (setq xmin x))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 (if (> x xmax)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 (setq xmax x))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 (if (< y ymin)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 (setq ymin y))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 (if (> y ymax)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 (setq ymax y))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 (setq rest (cdr rest)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 (let ((delta-x (- xmax xmin))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 (delta-y (- ymax ymin)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 (if (> delta-x delta-y)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 (setq ymin (- ymin
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 (/ (- delta-x delta-y)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 2))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 ymax (+ ymax
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 (/ (- delta-x delta-y)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 2)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 (setq xmin (- xmin
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 (/ (- delta-y delta-x)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 2))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 xmax (+ xmax
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 (/ (- delta-y delta-x)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 2))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 (list (cons xmin ymin)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 (cons xmax ymax))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 nil))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 (defun strokes-eliminate-consecutive-redundancies (entries)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
542 "Return a list with no consecutive redundant entries."
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 ;; defun a grande vitesse grace a Dave G.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 (loop for element on entries
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 if (not (equal (car element) (cadr element)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 collect (car element)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 ;; (loop for element on entries
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 ;; nconc (if (not (equal (car el) (cadr el)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 ;; (list (car el)))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 ;; yet another (orig) way of doing it...
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 ;; (if entries
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 ;; (let* ((current (car entries))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 ;; (rest (cdr entries))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 ;; (non-redundant-list (list current))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 ;; (next nil))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 ;; (while rest
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 ;; (setq next (car rest))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 ;; (if (equal current next)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 ;; (setq rest (cdr rest))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 ;; (setq non-redundant-list (cons next non-redundant-list)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 ;; current next
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 ;; rest (cdr rest))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 ;; (nreverse non-redundant-list))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 ;; nil))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 (defun strokes-renormalize-to-grid (positions &optional grid-resolution)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 "Map POSITIONS to a new grid whose dimensions are based on GRID-RESOLUTION.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 POSITIONS is a list of positions and stroke-lifts.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 Optional GRID-RESOLUTION may be used in place of STROKES-GRID-RESOLUTION.
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
570 The grid is a square whose dimension is [0,GRID-RESOLUTION)."
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 (or grid-resolution (setq grid-resolution strokes-grid-resolution))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 (let ((stroke-extent (strokes-get-stroke-extent positions)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 (mapcar (function
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 (lambda (pos)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 (strokes-get-grid-position stroke-extent pos grid-resolution)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 positions)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (defun strokes-fill-stroke (unfilled-stroke &optional force)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 "Fill in missing grid locations in the list of UNFILLED-STROKE.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 If FORCE is non-nil, then fill the stroke even if it's `stroke-click'.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 NOTE: This is where the global variable `strokes-last-stroke' is set."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 (setq strokes-last-stroke ; this is global
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 (if (and (strokes-click-p unfilled-stroke)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 (not force))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 unfilled-stroke
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 (loop for grid-locs on unfilled-stroke
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 nconc (let* ((current (car grid-locs))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 (current-is-a-point-p (consp current))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 (next (cadr grid-locs))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 (next-is-a-point-p (consp next))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 (both-are-points-p (and current-is-a-point-p
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 next-is-a-point-p))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 (x1 (and current-is-a-point-p
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 (car current)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 (y1 (and current-is-a-point-p
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 (cdr current)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 (x2 (and next-is-a-point-p
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 (car next)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 (y2 (and next-is-a-point-p
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 (cdr next)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 (delta-x (and both-are-points-p
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 (- x2 x1)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 (delta-y (and both-are-points-p
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 (- y2 y1)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 (slope (and both-are-points-p
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 (if (zerop delta-x)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 nil ; undefined vertical slope
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 (/ (float delta-y)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 delta-x)))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 (cond ((not both-are-points-p)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 (list current))
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
612 ((null slope) ; undefined vertical slope
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 (if (>= delta-y 0)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 (loop for y from y1 below y2
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 collect (cons x1 y))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 (loop for y from y1 above y2
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 collect (cons x1 y))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 ((zerop slope) ; (= y1 y2)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 (if (>= delta-x 0)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 (loop for x from x1 below x2
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 collect (cons x y1))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 (loop for x from x1 above x2
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 collect (cons x y1))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 ((>= (abs delta-x) (abs delta-y))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 (if (> delta-x 0)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 (loop for x from x1 below x2
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 collect (cons x
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 (+ y1
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 (round (* slope
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 (- x x1))))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 (loop for x from x1 above x2
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 collect (cons x
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 (+ y1
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 (round (* slope
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 (- x x1))))))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 (t ; (< (abs delta-x) (abs delta-y))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 (if (> delta-y 0)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 (loop for y from y1 below y2
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 collect (cons (+ x1
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 (round (/ (- y y1)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 slope)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 y))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 (loop for y from y1 above y2
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 collect (cons (+ x1
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 (round (/ (- y y1)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 slope)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 y))))))))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 (defun strokes-rate-stroke (stroke1 stroke2)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
650 "Rates STROKE1 with STROKE2 and return a score based on a distance metric.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 Note: the rating is an error rating, and therefore, a return of 0
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 represents a perfect match. Also note that the order of stroke
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 arguments is order-independent for the algorithm used here."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 (if (and stroke1 stroke2)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 (let ((rest1 (cdr stroke1))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 (rest2 (cdr stroke2))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 (err (strokes-distance-squared (car stroke1)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 (car stroke2))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 (while (and rest1 rest2)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 (while (and (consp (car rest1))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 (consp (car rest2)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 (setq err (+ err
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 (strokes-distance-squared (car rest1)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 (car rest2)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 stroke1 rest1
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 stroke2 rest2
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 rest1 (cdr stroke1)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 rest2 (cdr stroke2)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 (cond ((and (strokes-lift-p (car rest1))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 (strokes-lift-p (car rest2)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 (setq rest1 (cdr rest1)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 rest2 (cdr rest2)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 ((strokes-lift-p (car rest2))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 (while (consp (car rest1))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 (setq err (+ err
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 (strokes-distance-squared (car rest1)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 (car stroke2)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 rest1 (cdr rest1))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 ((strokes-lift-p (car rest1))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 (while (consp (car rest2))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 (setq err (+ err
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 (strokes-distance-squared (car stroke1)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 (car rest2)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 rest2 (cdr rest2))))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 (if (null rest2)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 (while (consp (car rest1))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 (setq err (+ err
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 (strokes-distance-squared (car rest1)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 (car stroke2)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 rest1 (cdr rest1))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 (if (null rest1)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 (while (consp (car rest2))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 (setq err (+ err
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 (strokes-distance-squared (car stroke1)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 (car rest2)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 rest2 (cdr rest2))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 (if (or (strokes-lift-p (car rest1))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 (strokes-lift-p (car rest2)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 (setq err nil)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 err))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 nil))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 (defun strokes-match-stroke (stroke stroke-map)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
704 "Find the best matching command of STROKE in STROKE-MAP.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 Returns the corresponding match as (COMMAND . SCORE)."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 (if (and stroke stroke-map)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 (let ((score (strokes-rate-stroke stroke (caar stroke-map)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 (command (cdar stroke-map))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 (map (cdr stroke-map)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 (while map
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 (let ((newscore (strokes-rate-stroke stroke (caar map))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 (if (or (and newscore score (< newscore score))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 (and newscore (null score)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 (setq score newscore
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 command (cdar map)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 (setq map (cdr map))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 (if score
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 (cons command score)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 nil))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 nil))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 ;;;###autoload
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 (defun strokes-read-stroke (&optional prompt event)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 "Read a simple stroke (interactively) and return the stroke.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 Optional PROMPT in minibuffer displays before and during stroke reading.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 This function will display the stroke interactively as it is being
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 entered in the strokes buffer if the variable
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 `strokes-use-strokes-buffer' is non-nil.
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
729 Optional EVENT is acceptable as the starting event of the stroke"
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 (save-excursion
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
731 (let ((pix-locs nil)
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
732 (grid-locs nil)
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
733 (safe-to-draw-p nil))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
734 (if strokes-use-strokes-buffer
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
735 ;; switch to the strokes buffer and
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
736 ;; display the stroke as it's being read
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
737 (save-window-excursion
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
738 (set-window-configuration strokes-window-configuration)
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
739 (when prompt
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
740 (message prompt)
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
741 (setq event (read-event))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
742 (or (strokes-button-press-event-p event)
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
743 (error "You must draw with the mouse")))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
744 (unwind-protect
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
745 (track-mouse
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
746 (or event (setq event (read-event)
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
747 safe-to-draw-p t))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
748 (while (not (strokes-button-release-event-p event))
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
749 (if (strokes-mouse-event-p event)
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
750 (let ((point (strokes-event-closest-point event)))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
751 (if (and point safe-to-draw-p)
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
752 ;; we can draw that point
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
753 (progn
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
754 (goto-char point)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
755 (subst-char-in-region point (1+ point)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
756 ?\ strokes-character))
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
757 ;; otherwise, we can start drawing the next time...
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
758 (setq safe-to-draw-p t))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
759 (push (cdr (mouse-pixel-position))
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
760 pix-locs)))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
761 (setq event (read-event)))))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
762 ;; protected
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
763 ;; clean up strokes buffer and then bury it.
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
764 (when (equal (buffer-name) strokes-buffer-name)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
765 (subst-char-in-region (point-min) (point-max)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
766 strokes-character ?\ )
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
767 (goto-char (point-min))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
768 (bury-buffer))))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
769 ;; Otherwise, don't use strokes buffer and read stroke silently
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
770 (when prompt
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
771 (message prompt)
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
772 (setq event (read-event))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
773 (or (strokes-button-press-event-p event)
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
774 (error "You must draw with the mouse")))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
775 (track-mouse
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
776 (or event (setq event (read-event)))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
777 (while (not (strokes-button-release-event-p event))
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
778 (if (strokes-mouse-event-p event)
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
779 (push (cdr (mouse-pixel-position))
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
780 pix-locs))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
781 (setq event (read-event))))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
782 (setq grid-locs (strokes-renormalize-to-grid (nreverse pix-locs)))
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
783 (strokes-fill-stroke
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
784 (strokes-eliminate-consecutive-redundancies grid-locs)))))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 ;;;###autoload
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 (defun strokes-read-complex-stroke (&optional prompt event)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 "Read a complex stroke (interactively) and return the stroke.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 Optional PROMPT in minibuffer displays before and during stroke reading.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 Note that a complex stroke allows the user to pen-up and pen-down. This
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
791 is implemented by allowing the user to paint with button 1 or button 2 and
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
792 then complete the stroke with button 3.
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
793 Optional EVENT is acceptable as the starting event of the stroke"
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 (save-excursion
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 (save-window-excursion
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
796 (set-window-configuration strokes-window-configuration)
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
797 (let ((pix-locs nil)
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
798 (grid-locs nil))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
799 (if prompt
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
800 (while (not (strokes-button-press-event-p event))
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
801 (message prompt)
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
802 (setq event (read-event))))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
803 (unwind-protect
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
804 (track-mouse
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
805 (or event (setq event (read-event)))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
806 (while (not (and (strokes-button-press-event-p event)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
807 (eq 'mouse-3
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
808 (car (get (car event)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
809 'event-symbol-elements)))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
810 (while (not (strokes-button-release-event-p event))
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
811 (if (strokes-mouse-event-p event)
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
812 (let ((point (strokes-event-closest-point event)))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
813 (when point
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
814 (goto-char point)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
815 (subst-char-in-region point (1+ point)
49785
25477ff93766 (strokes-read-complex-stroke): Fix use of character constant.
Juanma Barranquero <lekktu@gmail.com>
parents: 49597
diff changeset
816 ?\ strokes-character))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
817 (push (cdr (mouse-pixel-position))
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
818 pix-locs)))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
819 (setq event (read-event)))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
820 (push strokes-lift pix-locs)
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
821 (while (not (strokes-button-press-event-p event))
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
822 (setq event (read-event))))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
823 ;; ### KLUDGE! ### sit and wait
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
824 ;; for some useless event to
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
825 ;; happen to fix the minibuffer bug.
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
826 (while (not (strokes-button-release-event-p (read-event))))
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
827 (setq pix-locs (nreverse (cdr pix-locs))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
828 grid-locs (strokes-renormalize-to-grid pix-locs))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
829 (strokes-fill-stroke
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
830 (strokes-eliminate-consecutive-redundancies grid-locs)))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
831 ;; protected
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
832 (when (equal (buffer-name) strokes-buffer-name)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
833 (subst-char-in-region (point-min) (point-max)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
834 strokes-character ?\ )
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
835 (goto-char (point-min))
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
836 (bury-buffer)))))))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 (defun strokes-execute-stroke (stroke)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 "Given STROKE, execute the command which corresponds to it.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 The command will be executed provided one exists for that stroke,
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 based on the variable `strokes-minimum-match-score'.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 If no stroke matches, nothing is done and return value is nil."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 (let* ((match (strokes-match-stroke stroke strokes-global-map))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 (command (car match))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 (score (cdr match)))
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
846 (cond ((and match (<= score strokes-minimum-match-score))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 (message "%s" command)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 (command-execute command))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 ((null strokes-global-map)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 (if (file-exists-p strokes-file)
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
851 (and (y-or-n-p
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 (format "No strokes loaded. Load `%s'? "
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 strokes-file))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 (strokes-load-user-strokes))
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
855 (error "No strokes defined; use `strokes-global-set-stroke'")))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 (t
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 (error
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 "No stroke matches; see variable `strokes-minimum-match-score'")
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 nil))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 ;;;###autoload
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 (defun strokes-do-stroke (event)
43233
ae3e8c9e9b87 (strokes-do-stroke, strokes-do-complex-stroke): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41603
diff changeset
863 "Read a simple stroke from the user and then execute its command.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 This must be bound to a mouse event."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 (interactive "e")
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 (or strokes-mode (strokes-mode t))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 (strokes-execute-stroke (strokes-read-stroke nil event)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869 ;;;###autoload
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 (defun strokes-do-complex-stroke (event)
43233
ae3e8c9e9b87 (strokes-do-stroke, strokes-do-complex-stroke): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41603
diff changeset
871 "Read a complex stroke from the user and then execute its command.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 This must be bound to a mouse event."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 (interactive "e")
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 (or strokes-mode (strokes-mode t))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875 (strokes-execute-stroke (strokes-read-complex-stroke nil event)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 ;;;###autoload
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 (defun strokes-describe-stroke (stroke)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 "Displays the command which STROKE maps to, reading STROKE interactively."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 (interactive
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 (list
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 (strokes-read-complex-stroke
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
883 "Enter stroke to describe; end with button 3...")))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 (let* ((match (strokes-match-stroke stroke strokes-global-map))
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
885 (command (car match))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 (score (cdr match)))
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
887 (if (and match
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
888 (<= score strokes-minimum-match-score))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 (message "That stroke maps to `%s'" command)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 (message "That stroke is undefined"))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 (sleep-for 1))) ; helpful for recursive edits
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 ;;;###autoload
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
894 (defun strokes-help ()
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
895 "Get instruction on using the `strokes' package."
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
896 (interactive)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
897 (with-output-to-temp-buffer "*Help with Strokes*"
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
898 (princ
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
899 "This is help for the strokes package.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
901 ------------------------------------------------------------
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
903 ** Strokes...
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
905 The strokes package allows you to define strokes, made with
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
906 the mouse or other pointer device, that Emacs can interpret as
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
907 corresponding to commands, and then executes the commands. It does
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
908 character recognition, so you don't have to worry about getting it
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
909 right every time.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
911 Strokes also allows you to compose documents graphically. You can
43233
ae3e8c9e9b87 (strokes-do-stroke, strokes-do-complex-stroke): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41603
diff changeset
912 fully edit documents in Chinese, Japanese, etc. based on Emacs
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
913 strokes. Once you've done so, you can ASCII compress-and-encode them
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
914 and then safely save them for later use, send letters to friends
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
915 \(using Emacs, of course). Strokes will later decode these documents,
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
916 extracting the strokes for editing use once again, so the editing
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
917 cycle can continue.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
918
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
919 Strokes are easy to program and fun to use. To start strokes going,
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
920 you'll want to put the following line in your .emacs file as mentioned
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
921 in the commentary to strokes.el.
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
922
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
923 This will load strokes when and only when you start Emacs on a window
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
924 system, with a mouse or other pointer device defined.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
926 To toggle strokes-mode, you just do
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
927
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
928 > M-x strokes-mode
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
930 ** Strokes for controlling the behavior of Emacs...
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
932 When you're ready to start defining strokes, just use the command
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
934 > M-x strokes-global-set-stroke
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
936 You will see a ` *strokes*' buffer which is waiting for you to enter in
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
937 your stroke. When you enter in the stroke, you draw with button 1 or
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
938 button 2, and then end with button 3. Next, you enter in the command
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
939 which will be executed when that stroke is invoked. Simple as that.
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
940 For now, try to define a stroke to copy a region. This is a popular
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
941 edit command, so type
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
943 > M-x strokes-global-set-stroke
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
945 Then, in the ` *strokes*' buffer, draw the letter `C' (for `copy')
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
946 and then, when it asks you to enter the command to map that to, type
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
947
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
948 > copy-region-as-kill
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
950 That's about as hard as it gets.
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
951 Remember: paint with button 1 or button 2 and then end with button 3.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
953 If ever you want to know what a certain strokes maps to, then do
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
955 > M-x strokes-describe-stroke
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
957 and you can enter in any arbitrary stroke. Remember: The strokes
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
958 package lets you program in simple and complex (multi-lift) strokes.
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
959 The only difference is how you *invoke* the two. You will most likely
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
960 use simple strokes, as complex strokes were developed for
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
961 Chinese/Japanese/Korean. So the shifted middle mouse button (S-mouse-2) will
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
962 invoke the command `strokes-do-stroke'.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
964 If ever you define a stroke which you don't like, then you can unset
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
965 it with the command
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
967 > M-x strokes-unset-last-stroke
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
969 You can always get an idea of what your current strokes look like with
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
970 the command
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
971
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
972 > M-x strokes-list-strokes
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
973
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
974 Your strokes will be displayed in alphabetical order (based on command
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
975 names) and the beginning of each simple stroke will be marked by a
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
976 color dot. Since you may have several simple strokes in a complex
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
977 stroke, the dot colors are arranged in the rainbow color sequence,
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
978 `ROYGBIV'. If you want a listing of your strokes from most recent
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
979 down, then use a prefix argument:
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
980
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
981 > C-u M-x strokes-list-strokes
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
982
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
983 Your strokes are stored as you enter them. They get saved in a file
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
984 called ~/.strokes, along with other strokes configuration variables.
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
985 You can change this location by setting the variable `strokes-file'.
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
986 You will be prompted to save them when you exit Emacs, or you can save
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
987 them with
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
989 > M-x strokes-save-strokes
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
991 Your strokes get loaded automatically when you enable `strokes-mode'.
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
992 You can also load in your user-defined strokes with
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
994 > M-x strokes-load-user-strokes
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
996 ** Strokes for pictographic editing...
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
997
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
998 If you'd like to create graphical files with strokes, you'll have to
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
999 be running a version of Emacs with XPM support. You use the binding
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1000 to `strokes-compose-complex-stroke' to start drawing your strokes.
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1001 These are just complex strokes, and thus continue drawing with mouse-1
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1002 or mouse-2 and end with mouse-3. Then the stroke image gets inserted
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1003 into the buffer. You treat it somewhat like any other character,
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1004 which you can copy, paste, delete, move, etc. When all is done, you
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1005 may want to send the file, or save it. This is done with
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1006
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1007 > M-x strokes-encode-buffer
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1008
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1009 Likewise, to decode the strokes from a strokes-encoded buffer you do
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1010
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1011 > M-x strokes-decode-buffer
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1012
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
1013 ** A few more important things...
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1015 o The command `strokes-do-complex-stroke' is invoked with M-mouse-2,
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1016 so that you can execute complex strokes (i.e. with more than one lift)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1017 if preferred.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
1019 o Strokes are a bit computer-dependent in that they depend somewhat on
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
1020 the speed of the computer you're working on. This means that you
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
1021 may have to tweak some variables. You can read about them in the
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1022 commentary of `strokes.el'. Better to just use \\[apropos] and read their
19347
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
1023 docstrings. All variables/functions start with `strokes'. The one
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
1024 variable which many people wanted to see was
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
1025 `strokes-use-strokes-buffer' which allows the user to use strokes
bdac48dda163 Many changes.
Richard M. Stallman <rms@gnu.org>
parents: 19345
diff changeset
1026 silently--without displaying the strokes. All variables can be set
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1027 by customizing the group `strokes' via \[customize-group].")
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1028 (set-buffer standard-output)
46327
4d662e939eab (strokes-help): Call print-help-return-message
Richard M. Stallman <rms@gnu.org>
parents: 46116
diff changeset
1029 (help-mode)
4d662e939eab (strokes-help): Call print-help-return-message
Richard M. Stallman <rms@gnu.org>
parents: 46116
diff changeset
1030 (print-help-return-message)))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1032 (defalias 'strokes-report-bug 'report-emacs-bug)
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 (defsubst strokes-fill-current-buffer-with-whitespace ()
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1035 "Erase the contents of the current buffer and fill it with whitespace."
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 (erase-buffer)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037 (loop repeat (frame-height) do
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038 (insert-char ?\ (1- (frame-width)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 (newline))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 (goto-char (point-min)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1042 (defun strokes-window-configuration-changed-p ()
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1043 "Non-nil if the `strokes-window-configuration' frame properties changed.
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1044 This is based on the last time `strokes-window-configuration' was updated."
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1045 (compare-window-configurations (current-window-configuration)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1046 strokes-window-configuration))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1047
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 (defun strokes-update-window-configuration ()
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1049 "Ensure that `strokes-window-configuration' is up-to-date."
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 (interactive)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 (let ((current-window (selected-window)))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 (cond ((or (window-minibuffer-p current-window)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053 (window-dedicated-p current-window))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054 ;; don't try to update strokes window configuration
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 ;; if window is dedicated or a minibuffer
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 nil)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 ((or (interactive-p)
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1058 (not (buffer-live-p (get-buffer strokes-buffer-name)))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 (null strokes-window-configuration))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 ;; create `strokes-window-configuration' from scratch...
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 (save-excursion
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 (save-window-excursion
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 (get-buffer-create strokes-buffer-name)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 (set-window-buffer current-window strokes-buffer-name)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 (delete-other-windows)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 (fundamental-mode)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 (auto-save-mode 0)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 (if (featurep 'font-lock)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 (font-lock-mode 0))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 (abbrev-mode 0)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 (buffer-disable-undo (current-buffer))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 (setq truncate-lines nil)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 (strokes-fill-current-buffer-with-whitespace)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 (setq strokes-window-configuration (current-window-configuration))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 (bury-buffer))))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1076 ((strokes-window-configuration-changed-p) ; simple update
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1077 ;; update the strokes-window-configuration for this
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1078 ;; specific frame...
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 (save-excursion
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 (save-window-excursion
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081 (set-window-buffer current-window strokes-buffer-name)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 (delete-other-windows)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 (strokes-fill-current-buffer-with-whitespace)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 (setq strokes-window-configuration (current-window-configuration))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 (bury-buffer)))))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087 ;;;###autoload
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 (defun strokes-load-user-strokes ()
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089 "Load user-defined strokes from file named by `strokes-file'."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 (interactive)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 (cond ((and (file-exists-p strokes-file)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 (file-readable-p strokes-file))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 (load-file strokes-file))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 ((interactive-p)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 (error "Trouble loading user-defined strokes; nothing done"))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 (t
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 (message "No user-defined strokes, sorry"))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 (defun strokes-prompt-user-save-strokes ()
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 "Save user-defined strokes to file named by `strokes-file'."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 (interactive)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 (save-excursion
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103 (let ((current strokes-global-map))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 (unwind-protect
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 (progn
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 (setq strokes-global-map nil)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 (strokes-load-user-strokes)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 (if (and (not (equal current strokes-global-map))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 (or (interactive-p)
43233
ae3e8c9e9b87 (strokes-do-stroke, strokes-do-complex-stroke): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41603
diff changeset
1110 (yes-or-no-p "Save your strokes? ")))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 (progn
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 (require 'pp) ; pretty-print variables
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 (message "Saving strokes in %s..." strokes-file)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 (get-buffer-create "*saved-strokes*")
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 (set-buffer "*saved-strokes*")
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 (erase-buffer)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 (emacs-lisp-mode)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 (goto-char (point-min))
41570
7456b3a795c4 (strokes-prompt-user-save-strokes): Use insert instead of insert-string.
Pavel Janík <Pavel@Janik.cz>
parents: 31640
diff changeset
1119 (insert
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1120 ";; -*- emacs-lisp -*-\n")
41570
7456b3a795c4 (strokes-prompt-user-save-strokes): Use insert instead of insert-string.
Pavel Janík <Pavel@Janik.cz>
parents: 31640
diff changeset
1121 (insert (format ";;; saved strokes for %s, as of %s\n\n"
41603
4c61a8ae179d Fix indentation of previous change.
Richard M. Stallman <rms@gnu.org>
parents: 41570
diff changeset
1122 (user-full-name)
4c61a8ae179d Fix indentation of previous change.
Richard M. Stallman <rms@gnu.org>
parents: 41570
diff changeset
1123 (format-time-string "%B %e, %Y" nil)))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 (message "Saving strokes in %s..." strokes-file)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1125 (insert (format "(setq strokes-global-map\n'%s)"
41603
4c61a8ae179d Fix indentation of previous change.
Richard M. Stallman <rms@gnu.org>
parents: 41570
diff changeset
1126 (pp current)))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 (message "Saving strokes in %s..." strokes-file)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 (indent-region (point-min) (point-max) nil)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129 (write-region (point-min)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 (point-max)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 strokes-file))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 (message "(no changes need to be saved)")))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 ;; protected
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 (if (get-buffer "*saved-strokes*")
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 (kill-buffer (get-buffer "*saved-strokes*")))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136 (setq strokes-global-map current)))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 (defun strokes-toggle-strokes-buffer (&optional arg)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 "Toggle the use of the strokes buffer.
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1140 In other words, toggle the variable `strokes-use-strokes-buffer'.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 With ARG, use strokes buffer if and only if ARG is positive or true.
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 Returns value of `strokes-use-strokes-buffer'."
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143 (interactive "P")
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 (setq strokes-use-strokes-buffer
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 (if arg (> (prefix-numeric-value arg) 0)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 (not strokes-use-strokes-buffer))))
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1148 (defun strokes-xpm-for-stroke (&optional stroke bufname b/w-only)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1149 "Create an XPM pixmap for the given STROKE in buffer ` *strokes-xpm*'.
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1150 If STROKE is not supplied, then `strokes-last-stroke' will be used.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1151 Optional BUFNAME to name something else.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1152 The pixmap will contain time information via rainbow dot colors
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1153 where each individual strokes begins.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1154 Optional B/W-ONLY non-nil will create a mono pixmap, not intended
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1155 for trying to figure out the order of strokes, but rather for reading
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1156 the stroke as a character in some language."
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1157 (interactive)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1158 (save-excursion
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1159 (let ((buf (get-buffer-create (or bufname " *strokes-xpm*")))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1160 (stroke (strokes-eliminate-consecutive-redundancies
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1161 (strokes-fill-stroke
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1162 (strokes-renormalize-to-grid (or stroke
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1163 strokes-last-stroke)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1164 31))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1165 (lift-flag t)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1166 (rainbow-chars (list ?R ?O ?Y ?G ?B ?P))) ; ROYGBIV w/o indigo
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1167 (set-buffer buf)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1168 (erase-buffer)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1169 (insert strokes-xpm-header)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1170 (loop repeat 33 do
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1171 (insert ?\")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1172 (insert-char ?\ 33)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1173 (insert "\",")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1174 (newline)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1175 finally
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1176 (forward-line -1)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1177 (end-of-line)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1178 (insert "}\n"))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1179 (loop for point in stroke
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1180 for x = (car-safe point)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1181 for y = (cdr-safe point) do
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1182 (cond ((consp point)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1183 ;; draw a point, and possibly a starting-point
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1184 (if (and lift-flag (not b/w-only))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1185 ;; mark starting point with the appropriate color
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1186 (let ((char (or (car rainbow-chars) ?\.)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1187 (loop for i from 0 to 2 do
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1188 (loop for j from 0 to 2 do
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1189 (goto-line (+ 16 i y))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1190 (forward-char (+ 1 j x))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1191 (delete-char 1)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1192 (insert char)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1193 (setq rainbow-chars (cdr rainbow-chars)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1194 lift-flag nil))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1195 ;; Otherwise, just plot the point...
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1196 (goto-line (+ 17 y))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1197 (forward-char (+ 2 x))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1198 (subst-char-in-region (point) (1+ (point)) ?\ ?\*)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1199 ((strokes-lift-p point)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1200 ;; a lift--tell the loop to X out the next point...
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1201 (setq lift-flag t))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1202 (when (interactive-p)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1203 (pop-to-buffer " *strokes-xpm*")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1204 ;; (xpm-mode 1)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1205 (goto-char (point-min))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1206 (put-image (create-image (buffer-string) 'xpm t :ascent 100)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1207 (line-end-position))))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1208
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1209 ;;; Strokes Edit stuff... ### NOT IMPLEMENTED YET ###
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1210
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1211 ;;(defun strokes-edit-quit ()
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1212 ;; (interactive)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1213 ;; (or (one-window-p t 0)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1214 ;; (delete-window))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1215 ;; (kill-buffer "*Strokes List*"))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1216
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1217 ;;(define-derived-mode edit-strokes-mode list-mode
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1218 ;; "Edit-Strokes"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1219 ;; "Major mode for `edit-strokes' and `list-strokes' buffers.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1220
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1221 ;;Editing commands:
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1222
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1223 ;;\\{edit-strokes-mode-map}"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1224 ;; (setq truncate-lines nil
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1225 ;; auto-show-mode nil ; don't want problems here either
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1226 ;; mode-popup-menu edit-strokes-menu) ; what about extent-specific stuff?
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1227 ;; (and (featurep 'menubar)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1228 ;; current-menubar
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1229 ;; (set (make-local-variable 'current-menubar)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1230 ;; (copy-sequence current-menubar))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1231 ;; (add-submenu nil edit-strokes-menu)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1232
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1233 ;;(let ((map edit-strokes-mode-map))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1234 ;; (define-key map "<" 'beginning-of-buffer)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1235 ;; (define-key map ">" 'end-of-buffer)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1236 ;; ;; (define-key map "c" 'strokes-copy-other-face)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1237 ;; ;; (define-key map "C" 'strokes-copy-this-face)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1238 ;; ;; (define-key map "s" 'strokes-smaller)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1239 ;; ;; (define-key map "l" 'strokes-larger)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1240 ;; ;; (define-key map "b" 'strokes-bold)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1241 ;; ;; (define-key map "i" 'strokes-italic)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1242 ;; (define-key map "e" 'strokes-list-edit)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1243 ;; ;; (define-key map "f" 'strokes-font)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1244 ;; ;; (define-key map "u" 'strokes-underline)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1245 ;; ;; (define-key map "t" 'strokes-truefont)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1246 ;; ;; (define-key map "F" 'strokes-foreground)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1247 ;; ;; (define-key map "B" 'strokes-background)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1248 ;; ;; (define-key map "D" 'strokes-doc-string)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1249 ;; (define-key map "a" 'strokes-global-set-stroke)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1250 ;; (define-key map "d" 'strokes-list-delete-stroke)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1251 ;; ;; (define-key map "n" 'strokes-list-next)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1252 ;; ;; (define-key map "p" 'strokes-list-prev)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1253 ;; ;; (define-key map " " 'strokes-list-next)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1254 ;; ;; (define-key map "\C-?" 'strokes-list-prev)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1255 ;; (define-key map "g" 'strokes-list-strokes) ; refresh display
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1256 ;; (define-key map "q" 'strokes-edit-quit)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1257 ;; (define-key map [(control c) (control c)] 'bury-buffer))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1258
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1259 ;;;;;###autoload
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1260 ;;(defun strokes-edit-strokes (&optional chronological strokes-map)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1261 ;; ;; ### DEAL WITH THE 2nd ARGUMENT ISSUE! ###
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1262 ;; "Edit strokes in a pop-up buffer containing strokes and their definitions.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1263 ;;If STROKES-MAP is not given, `strokes-global-map' will be used instead.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1264
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1265 ;;Editing commands:
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1266
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1267 ;;\\{edit-faces-mode-map}"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1268 ;; (interactive "P")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1269 ;; (pop-to-buffer (get-buffer-create "*Strokes List*"))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1270 ;; (reset-buffer (current-buffer)) ; handy function from minibuf.el
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1271 ;; (setq strokes-map (or strokes-map
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1272 ;; strokes-global-map
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1273 ;; (progn
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1274 ;; (strokes-load-user-strokes)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1275 ;; strokes-global-map)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1276 ;; (or chronological
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1277 ;; (setq strokes-map (sort (copy-sequence strokes-map)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1278 ;; 'strokes-alphabetic-lessp)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1279 ;; ;; (push-window-configuration)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1280 ;; (insert
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1281 ;; "Command Stroke\n"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1282 ;; "------- ------")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1283 ;; (loop for def in strokes-map
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1284 ;; for i from 0 to (1- (length strokes-map)) do
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1285 ;; (let ((stroke (car def))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1286 ;; (command-name (symbol-name (cdr def))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1287 ;; (strokes-xpm-for-stroke stroke " *strokes-xpm*")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1288 ;; (newline 2)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1289 ;; (insert-char ?\ 45)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1290 ;; (beginning-of-line)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1291 ;; (insert command-name)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1292 ;; (beginning-of-line)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1293 ;; (forward-char 45)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1294 ;; (set (intern (format "strokes-list-annotation-%d" i))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1295 ;; (make-annotation (make-glyph
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1296 ;; (list
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1297 ;; (vector 'xpm
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1298 ;; :data (buffer-substring
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1299 ;; (point-min " *strokes-xpm*")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1300 ;; (point-max " *strokes-xpm*")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1301 ;; " *strokes-xpm*"))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1302 ;; [string :data "[Stroke]"]))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1303 ;; (point) 'text))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1304 ;; (set-annotation-data (symbol-value (intern (format "strokes-list-annotation-%d" i)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1305 ;; def))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1306 ;; finally do (kill-region (1+ (point)) (point-max)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1307 ;; (edit-strokes-mode)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1308 ;; (goto-char (point-min)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1309
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1310 ;;;;;###autoload
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1311 ;;(defalias 'edit-strokes 'strokes-edit-strokes)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1312
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1313 (eval-when-compile (defvar view-mode-map))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1314
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1315 ;;;###autoload
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1316 (defun strokes-list-strokes (&optional chronological strokes-map)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1317 "Pop up a buffer containing an alphabetical listing of strokes in STROKES-MAP.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1318 With CHRONOLOGICAL prefix arg \(\\[universal-argument]\) list strokes
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1319 chronologically by command name.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1320 If STROKES-MAP is not given, `strokes-global-map' will be used instead."
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1321 (interactive "P")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1322 (setq strokes-map (or strokes-map
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1323 strokes-global-map
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1324 (progn
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1325 (strokes-load-user-strokes)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1326 strokes-global-map)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1327 (if (not chronological)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1328 ;; then alphabetize the strokes based on command names...
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1329 (setq strokes-map (sort (copy-sequence strokes-map)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1330 (function strokes-alphabetic-lessp))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1331 (let ((config (current-window-configuration)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1332 (set-buffer (get-buffer-create "*Strokes List*"))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1333 (setq buffer-read-only nil)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1334 (erase-buffer)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1335 (insert
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1336 "Command Stroke\n"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1337 "------- ------")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1338 (loop for def in strokes-map do
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1339 (let ((stroke (car def))
54598
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
1340 (command-name (if (symbolp (cdr def))
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
1341 (symbol-name (cdr def))
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
1342 (prin1-to-string (cdr def)))))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1343 (strokes-xpm-for-stroke stroke " *strokes-xpm*")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1344 (newline 2)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1345 (insert-char ?\ 45)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1346 (beginning-of-line)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1347 (insert command-name)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1348 (beginning-of-line)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1349 (forward-char 45)
54598
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
1350 (insert-image
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
1351 (create-image (with-current-buffer " *strokes-xpm*"
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
1352 (buffer-string))
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
1353 'xpm t
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
1354 :color-symbols
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
1355 `(("foreground"
4ca4b1218e81 (strokes-global-set-stroke-string): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 52778
diff changeset
1356 . ,(frame-parameter nil 'foreground-color))))))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1357 finally do (kill-region (1+ (point)) (point-max)))
43233
ae3e8c9e9b87 (strokes-do-stroke, strokes-do-complex-stroke): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41603
diff changeset
1358 (view-buffer "*Strokes List*" nil)
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1359 (set (make-local-variable 'view-mode-map)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1360 (let ((map (copy-keymap view-mode-map)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1361 (define-key map "q" `(lambda ()
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1362 (interactive)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1363 (View-quit)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1364 (set-window-configuration ,config)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1365 map))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1366 (goto-char (point-min))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1367
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1368 (defun strokes-alphabetic-lessp (stroke1 stroke2)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1369 "T iff command name for STROKE1 is less than STROKE2's in lexicographic order."
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1370 (let ((command-name-1 (symbol-name (cdr stroke1)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1371 (command-name-2 (symbol-name (cdr stroke2))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1372 (string-lessp command-name-1 command-name-2)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1373
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1374 (defvar strokes-mode-map
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1375 (let ((map (make-sparse-keymap)))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1376 (define-key map [(shift down-mouse-2)] 'strokes-do-stroke)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1377 (define-key map [(meta down-mouse-2)] 'strokes-do-complex-stroke)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1378 map))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1379
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380 ;;;###autoload
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1381 (define-minor-mode strokes-mode
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1382 "Toggle Strokes global minor mode.\\<strokes-mode-map>
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1383 With ARG, turn strokes on if and only if ARG is positive.
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1384 Strokes are pictographic mouse gestures which invoke commands.
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1385 Strokes are invoked with \\[strokes-do-stroke]. You can define
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1386 new strokes with \\[strokes-global-set-stroke]. See also
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1387 \\[strokes-do-complex-stroke] for `complex' strokes.
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 To use strokes for pictographic editing, such as Chinese/Japanese, use
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1390 \\[strokes-compose-complex-stroke], which draws strokes and inserts them.
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1391 Encode/decode your strokes with \\[strokes-encode-buffer],
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1392 \\[strokes-decode-buffer].
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1394 \\{strokes-mode-map}"
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1395 nil strokes-modeline-string strokes-mode-map
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1396 :group 'strokes :global t
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1397 (cond ((not (display-mouse-p))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1398 (error "Can't use Strokes without a mouse"))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1399 (strokes-mode ; turn on strokes
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1400 (and (file-exists-p strokes-file)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1401 (null strokes-global-map)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1402 (strokes-load-user-strokes))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1403 (add-hook 'kill-emacs-query-functions
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1404 'strokes-prompt-user-save-strokes)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1405 (add-hook 'select-frame-hook
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1406 'strokes-update-window-configuration)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1407 (strokes-update-window-configuration))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1408 (t ; turn off strokes
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1409 (if (get-buffer strokes-buffer-name)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1410 (kill-buffer (get-buffer strokes-buffer-name)))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1411 (remove-hook 'select-frame-hook
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1412 'strokes-update-window-configuration))))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1413
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1415 ;;;; strokes-xpm stuff (later may be separate)...
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1416
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1417 ;; This is the stuff that will eventually be used for composing letters in
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1418 ;; any language, compression, decompression, graphics, editing, etc.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1419
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1420 (defface strokes-char-face '((t (:background "lightgray")))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1421 "Face for strokes characters."
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1422 :version "21.1"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1423 :group 'strokes)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1424
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1425 (put 'strokes 'char-table-extra-slots 0)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1426 (defconst strokes-char-table (make-char-table 'strokes) ;
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1427 "The table which stores values for the character keys.")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1428 (aset strokes-char-table ?0 0)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1429 (aset strokes-char-table ?1 1)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1430 (aset strokes-char-table ?2 2)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1431 (aset strokes-char-table ?3 3)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1432 (aset strokes-char-table ?4 4)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1433 (aset strokes-char-table ?5 5)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1434 (aset strokes-char-table ?6 6)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1435 (aset strokes-char-table ?7 7)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1436 (aset strokes-char-table ?8 8)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1437 (aset strokes-char-table ?9 9)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1438 (aset strokes-char-table ?a 10)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1439 (aset strokes-char-table ?b 11)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1440 (aset strokes-char-table ?c 12)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1441 (aset strokes-char-table ?d 13)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1442 (aset strokes-char-table ?e 14)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1443 (aset strokes-char-table ?f 15)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1444 (aset strokes-char-table ?g 16)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1445 (aset strokes-char-table ?h 17)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1446 (aset strokes-char-table ?i 18)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1447 (aset strokes-char-table ?j 19)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1448 (aset strokes-char-table ?k 20)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1449 (aset strokes-char-table ?l 21)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1450 (aset strokes-char-table ?m 22)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1451 (aset strokes-char-table ?n 23)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1452 (aset strokes-char-table ?o 24)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1453 (aset strokes-char-table ?p 25)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1454 (aset strokes-char-table ?q 26)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1455 (aset strokes-char-table ?r 27)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1456 (aset strokes-char-table ?s 28)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1457 (aset strokes-char-table ?t 29)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1458 (aset strokes-char-table ?u 30)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1459 (aset strokes-char-table ?v 31)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1460 (aset strokes-char-table ?w 32)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1461 (aset strokes-char-table ?x 33)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1462 (aset strokes-char-table ?y 34)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1463 (aset strokes-char-table ?z 35)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1464 (aset strokes-char-table ?A 36)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1465 (aset strokes-char-table ?B 37)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1466 (aset strokes-char-table ?C 38)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1467 (aset strokes-char-table ?D 39)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1468 (aset strokes-char-table ?E 40)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1469 (aset strokes-char-table ?F 41)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1470 (aset strokes-char-table ?G 42)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1471 (aset strokes-char-table ?H 43)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1472 (aset strokes-char-table ?I 44)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1473 (aset strokes-char-table ?J 45)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1474 (aset strokes-char-table ?K 46)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1475 (aset strokes-char-table ?L 47)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1476 (aset strokes-char-table ?M 48)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1477 (aset strokes-char-table ?N 49)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1478 (aset strokes-char-table ?O 50)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1479 (aset strokes-char-table ?P 51)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1480 (aset strokes-char-table ?Q 52)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1481 (aset strokes-char-table ?R 53)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1482 (aset strokes-char-table ?S 54)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1483 (aset strokes-char-table ?T 55)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1484 (aset strokes-char-table ?U 56)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1485 (aset strokes-char-table ?V 57)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1486 (aset strokes-char-table ?W 58)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1487 (aset strokes-char-table ?X 59)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1488 (aset strokes-char-table ?Y 60)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1489 (aset strokes-char-table ?Z 61)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1490
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1491 (defconst strokes-base64-chars
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1492 ;; I wanted to make this a vector of individual like (vector ?0
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1493 ;; ?1 ?2 ...), but `concat' refuses to accept single
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1494 ;; characters.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1495 (vector "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1496 "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1497 "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" "A" "B" "C" "D"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1498 "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1499 "T" "U" "V" "W" "X" "Y" "Z")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1500 ;; (vector [?0] [?1] [?2] [?3] [?4] [?5] [?6] [?7] [?8] [?9]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1501 ;; [?a] [?b] [?c] [?d] [?e] [?f] [?g] [?h] [?i] [?j]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1502 ;; [?k] [?l] [?m] [?n] [?o] [?p] [?q] [?r] [?s] [?t]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1503 ;; [?u] [?v] [?w] [?x] [?y] [?z]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1504 ;; [?A] [?B] [?C] [?D] [?E] [?F] [?G] [?H] [?I] [?J]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1505 ;; [?K] [?L] [?M] [?N] [?O] [?P] [?Q] [?R] [?S] [?T]
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1506 ;; [?U] [?V] [?W] [?X] [?Y] [?Z])
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1507 "Character vector for fast lookup of base-64 encoding of numbers in [0,61].")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1508
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1509 (defsubst strokes-xpm-char-on-p (char)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1510 "Non-nil if CHAR represents an `on' bit in the XPM."
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1511 (eq char ?*))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1512
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1513 (defsubst strokes-xpm-char-bit-p (char)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1514 "Non-nil if CHAR represents an `on' or `off' bit in the XPM."
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1515 (or (eq char ?\ )
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1516 (eq char ?*)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1517
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1518 ;;(defsubst strokes-xor (a b) ### Should I make this an inline function? ###
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1519 ;; "T iff one and only one of A and B is non-nil; otherwise, returns nil.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1520 ;;NOTE: Don't use this as a numeric xor since it treats all non-nil
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1521 ;; values as t including `0' (zero)."
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1522 ;; (eq (null a) (not (null b))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1523
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1524 (defsubst strokes-xpm-encode-length-as-string (length)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1525 "Given some LENGTH in [0,62) do a fast lookup of its encoding."
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1526 (aref strokes-base64-chars length))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46327
diff changeset
1527
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1528 (defsubst strokes-xpm-decode-char (character)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1529 "Given a CHARACTER, do a fast lookup to find its corresponding integer value."
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1530 (aref strokes-char-table character))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46327
diff changeset
1531
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1532 (defun strokes-xpm-to-compressed-string (&optional xpm-buffer)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1533 "Convert XPM in XPM-BUFFER to compressed string representing the stroke.
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1534 XPM-BUFFER defaults to ` *strokes-xpm*'."
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1535 (save-excursion
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1536 (set-buffer (setq xpm-buffer (or xpm-buffer " *strokes-xpm*")))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1537 (goto-char (point-min))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1538 (search-forward "/* pixels */") ; skip past header junk
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1539 (forward-char 2)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1540 ;; a note for below:
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1541 ;; the `current-char' is the char being counted -- NOT the char at (point)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1542 ;; which happens to be called `char-at-point'
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1543 (let ((compressed-string "+/") ; initialize the output
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1544 (count 0) ; keep a current count of
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1545 ; `current-char'
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1546 (last-char-was-on-p t) ; last entered stream
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1547 ; represented `on' bits
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1548 (current-char-is-on-p nil) ; current stream represents `on' bits
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1549 (char-at-point (char-after))) ; read the first char
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1550 (while (not (eq char-at-point ?})) ; a `}' denotes the
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1551 ; end of the pixmap
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1552 (cond ((zerop count) ; must restart counting
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1553 ;; check to see if the `char-at-point' is an actual pixmap bit
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1554 (when (strokes-xpm-char-bit-p char-at-point)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1555 (setq count 1
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1556 current-char-is-on-p (strokes-xpm-char-on-p char-at-point)))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1557 (forward-char 1))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1558 ((= count 61) ; maximum single char's
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1559 ; encoding length
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1560 (setq compressed-string
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1561 (concat compressed-string
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1562 ;; add a zero-length encoding when
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1563 ;; necessary
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1564 (when (eq last-char-was-on-p
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1565 current-char-is-on-p)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1566 ;; "0"
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1567 (strokes-xpm-encode-length-as-string 0))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1568 (strokes-xpm-encode-length-as-string 61))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1569 last-char-was-on-p current-char-is-on-p
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1570 count 0)) ; note that we just set
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1571 ; count=0 and *don't* advance
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1572 ; (point)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1573 ((strokes-xpm-char-bit-p char-at-point) ; an actual xpm bit
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1574 (if (eq current-char-is-on-p
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1575 (strokes-xpm-char-on-p char-at-point))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1576 ;; yet another of the same bit-type, so we continue
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1577 ;; counting...
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1578 (progn
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1579 (incf count)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1580 (forward-char 1))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1581 ;; otherwise, it's the opposite bit-type, so we do a
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1582 ;; write and then restart count ### NOTE (for myself
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1583 ;; to be aware of) ### I really should advance
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1584 ;; (point) in this case instead of letting another
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1585 ;; iteration go through and letting the case: count=0
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1586 ;; take care of this stuff for me. That's why
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1587 ;; there's no (forward-char 1) below.
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1588 (setq compressed-string
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1589 (concat compressed-string
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1590 ;; add a zero-length encoding when
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1591 ;; necessary
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1592 (when (eq last-char-was-on-p
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1593 current-char-is-on-p)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1594 ;; "0"
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1595 (strokes-xpm-encode-length-as-string 0))
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1596 (strokes-xpm-encode-length-as-string count))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1597 count 0
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1598 last-char-was-on-p current-char-is-on-p)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1599 (t ; ELSE it's some other useless
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1600 ; char, like `"' or `,'
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1601 (forward-char 1)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1602 (setq char-at-point (char-after)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1603 (concat compressed-string
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1604 (when (> count 0)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1605 (concat (when (eq last-char-was-on-p
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1606 current-char-is-on-p)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1607 ;; "0"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1608 (strokes-xpm-encode-length-as-string 0))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1609 (strokes-xpm-encode-length-as-string count)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1610 "/"))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1611
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1612 ;;;###autoload
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1613 (defun strokes-decode-buffer (&optional buffer force)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1614 "Decode stroke strings in BUFFER and display their corresponding glyphs.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1615 Optional BUFFER defaults to the current buffer.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1616 Optional FORCE non-nil will ignore the buffer's read-only status."
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1617 (interactive)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1618 ;; (interactive "*bStrokify buffer: ")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1619 (save-excursion
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1620 (set-buffer (setq buffer (get-buffer (or buffer (current-buffer)))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1621 (when (or (not buffer-read-only)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1622 force
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1623 inhibit-read-only
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1624 (y-or-n-p
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1625 (format "Buffer %s is read-only. Strokify anyway? " buffer)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1626 (let ((inhibit-read-only t))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1627 (message "Strokifying %s..." buffer)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1628 (goto-char (point-min))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1629 (let (ext string image)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1630 ;; The comment below is what I'd have to do if I wanted to
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1631 ;; deal with random newlines in the midst of the compressed
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1632 ;; strings. If I do this, I'll also have to change
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1633 ;; `strokes-xpm-to-compress-string' to deal with the newline,
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1634 ;; and possibly other whitespace stuff. YUCK!
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1635 ;; (while (re-search-forward "\\+/\\(\\w\\|\\)+/" nil t nil (get-buffer buffer))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1636 (while (with-current-buffer buffer
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1637 (when (re-search-forward "\\+/\\(\\w+\\)/" nil t nil)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1638 (setq string (match-string 1))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1639 (goto-char (match-end 0))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1640 (replace-match " ")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1641 t))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1642 (strokes-xpm-for-compressed-string string " *strokes-xpm*")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1643 (setq image (create-image (with-current-buffer " *strokes-xpm*"
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1644 (buffer-string))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1645 'xpm t))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1646 (insert-image image
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1647 (propertize " "
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1648 'type 'stroke-glyph
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1649 'stroke-glyph image
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1650 'data string))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1651 (message "Strokifying %s...done" buffer)))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1652
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1653 (defun strokes-encode-buffer (&optional buffer force)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1654 "Convert the glyphs in BUFFER to their base-64 ASCII representations.
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1655 Optional BUFFER defaults to the current buffer.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1656 Optional FORCE non-nil will ignore the buffer's read-only status."
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1657 ;; ### NOTE !!! ### (for me)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1658 ;; For later on, you can/should make the inserted strings atomic
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1659 ;; extents, so that the users have a clue that they shouldn't be
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1660 ;; editing inside them. Plus, if you make them extents, you can
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1661 ;; very easily just hide the glyphs, so if you unstrokify, and the
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1662 ;; restrokify, then those that already are glyphed don't need to be
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1663 ;; re-calculated, etc. It's just nicer that way. The only things
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1664 ;; to worry about is cleanup (i.e. do the glyphs get gc'd when the
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1665 ;; buffer is killed?
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1666 ;; (interactive "*bUnstrokify buffer: ")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1667 (interactive)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1668 (save-excursion
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1669 (set-buffer (setq buffer (or buffer (current-buffer))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1670 (when (or (not buffer-read-only)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1671 force
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1672 inhibit-read-only
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1673 (y-or-n-p
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1674 (format "Buffer %s is read-only. Encode anyway? " buffer)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1675 (message "Encoding strokes in %s..." buffer)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1676 ;; (map-extents
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1677 ;; (lambda (ext buf)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1678 ;; (when (eq (extent-property ext 'type) 'stroke-glyph)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1679 ;; (goto-char (extent-start-position ext))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1680 ;; (delete-char 1) ; ### What the hell do I do here? ###
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1681 ;; (insert "+/" (extent-property ext 'data) "/")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1682 ;; (delete-extent ext))))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1683 (let ((inhibit-read-only t)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1684 (start nil)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1685 glyph)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1686 (while (or (and (bobp)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1687 (get-text-property (point) 'type))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1688 (setq start (next-single-property-change (point) 'type)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1689 (when (eq 'stroke-glyph (get-text-property (point) 'type))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1690 (goto-char start)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1691 (setq start (point-marker)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1692 glyph (get-text-property start 'display))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1693 (insert "+/" (get-text-property (point) 'data) ?/)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1694 (delete-char 1)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1695 (add-text-properties start (point)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1696 (list 'type 'stroke-string
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1697 'face 'strokes-char-face
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1698 'stroke-glyph glyph
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1699 'display nil))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1700 (message "Encoding strokes in %s...done" buffer)))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1701
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1702 (defun strokes-xpm-for-compressed-string (compressed-string &optional bufname)
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1703 "Convert the stroke represented by COMPRESSED-STRING into an XPM.
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1704 Store XPM in buffer BUFNAME if supplied \(default is ` *strokes-xpm*'\)"
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1705 (save-excursion
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1706 (or bufname (setq bufname " *strokes-xpm*"))
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1707 (set-buffer (get-buffer-create bufname))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1708 (erase-buffer)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1709 (insert compressed-string)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1710 (goto-char (point-min))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1711 (let ((current-char-is-on-p nil))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1712 (while (not (eobp))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1713 (insert-char
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1714 (if current-char-is-on-p
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1715 ?*
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1716 ?\ )
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1717 (strokes-xpm-decode-char (char-after)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1718 (delete-char 1)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1719 (setq current-char-is-on-p (not current-char-is-on-p)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1720 (goto-char (point-min))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1721 (loop repeat 33 do
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1722 (insert ?\")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1723 (forward-char 33)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1724 (insert "\",\n"))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1725 (goto-char (point-min))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1726 (insert strokes-xpm-header))))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1727
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1728 ;;;###autoload
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1729 (defun strokes-compose-complex-stroke ()
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1730 ;; ### NOTE !!! ###
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1731 ;; Even though we don't have lexical scoping, it's somewhat ugly how I
31640
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1732 ;; pass around variables in the global name space. I can/should
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1733 ;; change this.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1734 "Read a complex stroke and insert its glyph into the current buffer."
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1735 (interactive "*")
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1736 (let ((strokes-grid-resolution 33))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1737 (strokes-read-complex-stroke)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1738 (strokes-xpm-for-stroke nil " *strokes-xpm*" t)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1739 (insert (strokes-xpm-to-compressed-string " *strokes-xpm*"))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1740 (strokes-decode-buffer)
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1741 ;; strokes-decode-buffer does a save-excursion.
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1742 (forward-char)))
27d41d6ec45d Sync with maintainer's current version with changes
Dave Love <fx@gnu.org>
parents: 30540
diff changeset
1743
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1744 (defun strokes-unload-hook ()
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1745 (strokes-mode -1)
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1746 (remove-hook 'kill-emacs-query-functions 'strokes-prompt-user-save-strokes))
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1747
46116
60730a9af92e Doc fixes.
Dave Love <fx@gnu.org>
parents: 45103
diff changeset
1748 (run-hooks 'strokes-load-hook)
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1749 (provide 'strokes)
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1750
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49785
diff changeset
1751 ;;; arch-tag: 8377f60e-43fb-467a-bbcd-2774f91f833e
19345
eaec3bec7dea Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1752 ;;; strokes.el ends here