]> code.delx.au - gnu-emacs/blobdiff - lisp/textmodes/artist.el
Un-revert changes mistakenly dropped by f9fabb2b
[gnu-emacs] / lisp / textmodes / artist.el
index 89faf720a77c63135fdc13410c05771cc57150d4..14cf402a971622e4e8d9e58c1b1831ff04e50811 100644 (file)
@@ -1,7 +1,6 @@
 ;;; artist.el --- draw ascii graphics with your mouse
 
-;; Copyright (C) 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2015 Free Software Foundation, Inc.
 
 ;; Author:       Tomas Abrahamsson <tab@lysator.liu.se>
 ;; Maintainer:   Tomas Abrahamsson <tab@lysator.liu.se>
 ;; Variables
 
 (defconst artist-version "1.2.6")
-(defconst artist-maintainer-address "tab@lysator.liu.se")
+(defconst artist-maintainer-address "tab@lysator.liu.se, bug-gnu-emacs@gnu.org")
 
 (defvar x-pointer-crosshair)
 
@@ -299,7 +298,7 @@ during the flood-fill."
 (defcustom artist-ellipse-right-char ?\)
   "Character to use at the rightmost position when drawing narrow ellipses.
 
-In this figure, it is the right parenthesis (the ``)'' character):
+In this figure, it is the right parenthesis (the \")\" character):
              -----
             (     )
              -----"
@@ -310,7 +309,7 @@ In this figure, it is the right parenthesis (the ``)'' character):
 (defcustom artist-ellipse-left-char ?\(
   "Character to use at the leftmost position when drawing narrow ellipses.
 
-In this figure, it is the left parenthesis (the ``('' character):
+In this figure, it is the left parenthesis (the \"(\" character):
              -----
             (     )
              -----"
@@ -332,7 +331,7 @@ Accept this many characters cutting off a line and still treat
 it as one line.
 Example:
  If `artist-vaporize-fuzziness' is 2, then those will be recognized as
- lines from A to B (provided you start vaporizing them at the ``*''):
+ lines from A to B (provided you start vaporizing them at the \"*\"):
                          /
             A----*------/-----------B
                       \\/
@@ -343,14 +342,14 @@ Example:
                       \\/ /
             A----*----/\\/----------B
                      / /\\
- (in fact, only the left part [between the A and the leftmost ``/''
+ (in fact, only the left part [between the A and the leftmost \"/\"
  crossing the line] will be vaporized)."
   :group 'artist
   :type 'integer)
 
 
 (defvar artist-pointer-shape (if (eq window-system 'x) x-pointer-crosshair nil)
-  "*If in X Windows, use this pointer shape while drawing with the mouse.")
+  "If in X Windows, use this pointer shape while drawing with the mouse.")
 
 
 (defcustom artist-text-renderer-function 'artist-figlet
@@ -398,13 +397,13 @@ Example:
   ;; This is a defvar, not a defcustom, since the custom
   ;; package shows lists of characters as a lists of integers,
   ;; which is confusing
-  "*Characters (``color'') to use when spraying.
-They should be ordered from the ``lightest'' to the ``heaviest''
+  "Characters (\"color\") to use when spraying.
+They should be ordered from the \"lightest\" to the \"heaviest\"
 since spraying replaces a light character with the next heavier one.")
 
 
 (defvar artist-spray-new-char ?.
-  "*Initial character to use when spraying.
+  "Initial character to use when spraying.
 This character is used if spraying upon a character that is not in
 `artist-spray-chars'.  The character defined by this variable should
 be in `artist-spray-chars', or spraying will behave strangely.")
@@ -423,7 +422,7 @@ be in `artist-spray-chars', or spraying will behave strangely.")
 (defvar artist-mode-name " Artist"
   "Name of Artist mode beginning with a space (appears in the mode-line).")
 
-(defvar artist-curr-go 'pen-char
+(defvar artist-curr-go 'pen-line
   "Current selected graphics operation.")
 (make-variable-buffer-local 'artist-curr-go)
 
@@ -503,6 +502,50 @@ This variable is initialized by the `artist-make-prev-next-op-alist' function.")
 (defvar artist-arrow-point-1 nil)
 (defvar artist-arrow-point-2 nil)
 \f
+(defvar artist-menu-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [spray-chars]
+      '(menu-item "Characters for Spray" artist-select-spray-chars
+                 :help "Choose characters for sprayed by the spray-can"))
+    (define-key map [borders]
+      '(menu-item "Draw Shape Borders" artist-toggle-borderless-shapes
+                 :help "Toggle whether shapes are drawn with borders"
+                 :button (:toggle . (not artist-borderless-shapes))))
+    (define-key map [trimming]
+      '(menu-item "Trim Line Endings" artist-toggle-trim-line-endings
+                 :help "Toggle trimming of line-endings"
+                 :button (:toggle . artist-trim-line-endings)))
+    (define-key map [rubber-band]
+      '(menu-item "Rubber-banding" artist-toggle-rubber-banding
+                 :help "Toggle rubber-banding"
+                 :button (:toggle . artist-rubber-banding)))
+    (define-key map [set-erase]
+      '(menu-item "Character to Erase..." artist-select-erase-char
+                 :help "Choose a specific character to erase"))
+    (define-key map [set-line]
+      '(menu-item "Character for Line..." artist-select-line-char
+                 :help "Choose the character to insert when drawing lines"))
+    (define-key map [set-fill]
+      '(menu-item "Character for Fill..." artist-select-fill-char
+                 :help "Choose the character to insert when filling in shapes"))
+    (define-key map [artist-separator] '(menu-item "--"))
+    (dolist (op '(("Vaporize" artist-select-op-vaporize-lines vaporize-lines)
+                 ("Erase" artist-select-op-erase-rectangle erase-rect)
+                 ("Spray-can" artist-select-op-spray-set-size spray-get-size)
+                 ("Text" artist-select-op-text-overwrite text-ovwrt)
+                 ("Ellipse" artist-select-op-circle circle)
+                 ("Poly-line" artist-select-op-straight-poly-line spolyline)
+                 ("Square" artist-select-op-square square)
+                 ("Rectangle" artist-select-op-rectangle rectangle)
+                 ("Line" artist-select-op-straight-line s-line)
+                 ("Pen" artist-select-op-pen-line pen-line)))
+      (define-key map (vector (nth 2 op))
+       `(menu-item ,(nth 0 op)
+                   ,(nth 1 op)
+                   :help ,(format "Draw using the %s style" (nth 0 op))
+                   :button (:radio . (eq artist-curr-go ',(nth 2 op))))))
+    map))
+
 (defvar artist-mode-map
   (let ((map (make-sparse-keymap)))
     (setq artist-mode-map (make-sparse-keymap))
@@ -555,6 +598,7 @@ This variable is initialized by the `artist-make-prev-next-op-alist' function.")
     (define-key map "\C-c\C-a\C-y" 'artist-select-op-paste)
     (define-key map "\C-c\C-af"    'artist-select-op-flood-fill)
     (define-key map "\C-c\C-a\C-b" 'artist-submit-bug-report)
+    (define-key map [menu-bar artist] (cons "Artist" artist-menu-map))
     map)
   "Keymap for `artist-minor-mode'.")
 
@@ -1153,9 +1197,9 @@ PREV-OP-ARG are used when invoked recursively during the build-up."
 ;;; ---------------------------------
 
 ;;;###autoload
-(defun artist-mode (&optional state)
+(define-minor-mode artist-mode
   "Toggle Artist mode.
-With argument STATE, turn Artist mode on if STATE is positive.
+With argument ARG, turn Artist mode on if ARG is positive.
 Artist lets you draw lines, squares, rectangles and poly-lines,
 ellipses and circles with your mouse and/or keyboard.
 
@@ -1231,7 +1275,7 @@ Drawing with the mouse:
                * Cut copies, then clears the rectangle/square.
 
                * When drawing lines or poly-lines, you can set arrows.
-                 See below under ``Arrows'' for more info.
+                 See below under \"Arrows\" for more info.
 
                * The mode line shows the currently selected drawing operation.
                  In addition, if it has an asterisk (*) at the end, you
@@ -1339,41 +1383,29 @@ Variables
  artist-vaporize-fuzziness      Tolerance when recognizing lines
  artist-spray-interval          Seconds between repeated sprayings
  artist-spray-radius            Size of the spray-area
- artist-spray-chars             The spray-``color''
- artist-spray-new-chars         Initial spray-``color''
+ artist-spray-chars             The spray-\"color\"
+ artist-spray-new-chars         Initial spray-\"color\"
 
 Hooks
 
- When entering artist-mode, the hook `artist-mode-init-hook' is called.
- When quitting artist-mode, the hook `artist-mode-exit-hook' is called.
+ Turning the mode on or off runs `artist-mode-hook'.
 
 
 Keymap summary
 
 \\{artist-mode-map}"
-  (interactive)
-  (if (setq artist-mode
-           (if (null state) (not artist-mode)
-             (> (prefix-numeric-value state) 0)))
-      (artist-mode-init)
-    (artist-mode-exit)))
-
-;; insert our minor mode string
-(or (assq 'artist-mode minor-mode-alist)
-    (setq minor-mode-alist
-         (cons '(artist-mode artist-mode-name)
-               minor-mode-alist)))
-
-;; insert our minor mode keymap
-(or (assq 'artist-mode minor-mode-map-alist)
-    (setq minor-mode-map-alist
-         (cons (cons 'artist-mode artist-mode-map)
-               minor-mode-map-alist)))
-
+  :init-value nil :group 'artist :lighter artist-mode-name
+  :keymap artist-mode-map
+  (cond ((null artist-mode)
+        ;; Turn mode off
+        (artist-mode-exit))
+       (t
+        ;; Turn mode on
+        (artist-mode-init))))
 
 ;; Init and exit
 (defun artist-mode-init ()
-  "Init Artist mode.  This will call the hook `artist-mode-init-hook'."
+  "Init Artist mode.  This will call the hook `artist-mode-hook'."
   ;; Set up a conversion table for mapping tabs and new-lines to spaces.
   ;; the last case, 0, is for the last position in buffer/region, where
   ;; the `following-char' function returns 0.
@@ -1415,15 +1447,15 @@ Keymap summary
       (progn
        (picture-mode)
        (message "")))
-  (run-hooks 'artist-mode-init-hook)
   (artist-mode-line-show-curr-operation artist-key-is-drawing))
 
+(declare-function picture-mode-exit "picture" (&optional nostrip))
+
 (defun artist-mode-exit ()
-  "Exit Artist mode.  This will call the hook `artist-mode-exit-hook'."
+  "Exit Artist mode.  This will call the hook `artist-mode-hook'."
   (if (and artist-picture-compatibility (eq major-mode 'picture-mode))
       (picture-mode-exit))
-  (kill-local-variable 'next-line-add-newlines)
-  (run-hooks 'artist-mode-exit-hook))
+  (kill-local-variable 'next-line-add-newlines))
 
 (defun artist-mode-off ()
   "Turn Artist mode off."
@@ -1760,7 +1792,7 @@ info-variant-part."
 ;;
 (defmacro artist-funcall (fn &rest args)
   "Call function FN with ARGS, if FN is not nil."
-  (list 'if fn (cons 'funcall (cons fn args))))
+  `(if ,fn (funcall ,fn ,@args)))
 
 (defun artist-uniq (l)
   "Remove consecutive duplicates in list L.  Comparison is done with `equal'."
@@ -1899,7 +1931,7 @@ Return a list (RETURN-CODE STDOUT STDERR)."
   ;;
   ;;   Example: In the figure below, the `X' is the very last
   ;;            character in the buffer ("a non-empty line at the
-  ;;             end"). Suppose point is at at P. Then (forward-line 1)
+  ;;             end"). Suppose point is at P. Then (forward-line 1)
   ;;             returns 0 and puts point after the `X'.
   ;;
   ;;                   --------top of buffer--------
@@ -1942,7 +1974,7 @@ Also updates the variables `artist-draw-min-y' and `artist-draw-max-y'."
   "Retrieve a replacement for character C from `artist-replacement-table'.
 The replacement is used to convert tabs and new-lines to spaces."
   ;; Characters may be outside the range of the `artist-replacement-table',
-  ;; for example if they are unicode code points >= 256.
+  ;; for example if they are Unicode code points >= 256.
   ;; Check so we don't attempt to access the array out of its bounds,
   ;; assuming no such character needs to be replaced.
   (if (< c (length artist-replacement-table))
@@ -1957,24 +1989,11 @@ The replacement is used to convert tabs and new-lines to spaces."
 
 (defun artist-replace-char (new-char)
   "Replace the character at point with NEW-CHAR."
-  ;; Check that the variable exists first. The doc says it was added in 19.23.
-  (if (and (and (boundp 'emacs-major-version) (= emacs-major-version 20))
-          (and (boundp 'emacs-minor-version) (<= emacs-minor-version 3)))
-      ;; This is a bug workaround for Emacs 20, versions up to 20.3:
-      ;; The self-insert-command doesn't care about the overwrite-mode,
-      ;; so the insertion is done in the same way as in picture mode.
-      ;; This seems to be a little bit slower.
-      (progn
-       (artist-move-to-xy (1+ (artist-current-column))
-                          (artist-current-line))
-       (delete-char -1)
-       (insert (artist-get-replacement-char new-char)))
-    ;; In emacs-19, the self-insert-command works better and faster
-    (let ((overwrite-mode 'overwrite-mode-textual)
-         (fill-column 32765)           ; Large :-)
-         (blink-matching-paren nil))
-      (setq last-command-event (artist-get-replacement-char new-char))
-      (self-insert-command 1))))
+  (let ((overwrite-mode 'overwrite-mode-textual)
+       (fill-column 32765)             ; Large :-)
+       (blink-matching-paren nil))
+    (setq last-command-event (artist-get-replacement-char new-char))
+    (self-insert-command 1)))
 
 (defun artist-replace-chars (new-char count)
   "Replace characters at point with NEW-CHAR.  COUNT chars are replaced."
@@ -2001,7 +2020,7 @@ The replacement is used to convert tabs and new-lines to spaces."
 (defsubst artist-replace-string (string &optional see-thru)
   "Replace contents at point with STRING.
 With optional argument SEE-THRU set to non-nil, text in the buffer
-``shines thru'' blanks in the STRING."
+\"shines thru\" blanks in the STRING."
   (let ((char-list (append string nil))        ; convert the string to a list
        (overwrite-mode 'overwrite-mode-textual)
        (fill-column 32765)             ; Large :-)
@@ -2233,7 +2252,7 @@ Returns a DIRECTION, a number 0--7, coded as follows:
 
 
 ;; Things for drawing lines in all directions.
-;; The line drawing engine is the eight-point alrogithm.
+;; The line drawing engine is the eight-point algorithm.
 ;;
 ;; A line is here a list of (x y saved-char new-char)s.
 ;;
@@ -2308,7 +2327,7 @@ Octant are numbered 1--8, anti-clockwise as:
          5
        6))))
 
-;; Some inline funtions for creating, setting and reading
+;; Some inline functions for creating, setting and reading
 ;; members of a coordinate
 ;;
 
@@ -2366,9 +2385,9 @@ in the coord."
 ;; Pretend we are plotting a pixel. Instead we just list it
 ;;
 (defmacro artist-put-pixel (point-list x y)
-  "In POINT-LIST, store a ``pixel'' at coord X,Y."
-  (list 'setq point-list
-       (list 'append point-list (list 'list (list 'artist-new-coord x y)))))
+  "In POINT-LIST, store a \"pixel\" at coord X,Y."
+  `(setq ,point-list
+        (append ,point-list (list (artist-new-coord ,x ,y)))))
 
 ;; Calculate list of points using eight point algorithm
 ;; return a list of coords
@@ -2407,7 +2426,7 @@ in the coord."
     point-list))
 
 ;; artist-save-chars-under-point-list
-;; Remebers the chars that were there before we did draw the line.
+;; Remembers the chars that were there before we did draw the line.
 ;; Returns point-list.
 ;;
 (defun artist-save-chars-under-point-list (point-list)
@@ -2484,7 +2503,7 @@ This function returns a point-list."
 
 
 ;;
-;; functions for accessing endoints and elements in object requiring
+;; functions for accessing endpoints and elements in object requiring
 ;; 2 endpoints
 ;;
 
@@ -2909,7 +2928,7 @@ This is done by calling the function specified by
 `artist-text-renderer-function', which must return a list of strings,
 to be inserted in the buffer.
 
-Text already in the buffer ``shines thru'' blanks in the rendered text."
+Text already in the buffer \"shines thru\" blanks in the rendered text."
   (let* ((input-text (read-string "Type text to render: "))
         (rendered-text (artist-funcall artist-text-renderer-function input-text)))
     (artist-text-insert-see-thru x y rendered-text)))
@@ -2939,7 +2958,7 @@ Blanks in the rendered text overwrite any text in the buffer."
 Returns a list of points.  Each point is on the form (X1 . Y1)."
   (let ((points))
     (while (> n 0)
-      (let* ((angle (* (random 359) (/ float-pi 180)))
+      (let* ((angle (degrees-to-radians (random 359)))
             (dist  (random radius))
             (point (cons (round (* dist (cos angle)))
                          (round (* dist (sin angle))))))
@@ -3185,7 +3204,7 @@ X1, Y1.  An endpoint is a cons pair, (ENDPOINT-X . ENDPOINT-Y)."
 ;;         2|     |
 ;;         3+-----+
 ;;
-;;   We will then pop (0,0) and remove the left-most vertival line while
+;;   We will then pop (0,0) and remove the left-most vertical line while
 ;;   pushing the lower left corner (0,3) on the stack, and so on until
 ;;   the entire rectangle is vaporized.
 ;;
@@ -3353,7 +3372,7 @@ The POINT-LIST is expected to cover the first quadrant."
     ;; Create the other half by mirroring the first half.
     (setq both-halves
          (append first-half
-                 (mapc
+                 (mapcar
                   (lambda (i)
                     (artist-new-fill-item (artist-fill-item-get-x i)
                                           (- (artist-fill-item-get-y i))
@@ -3552,7 +3571,7 @@ FILL-INFO is a list of vectors on the form [X Y ELLIPSE-WIDTH-ON-THIS-LINE]."
          (width (abs (- x2 x1)))
         (height (abs (- y2 y1)))
         ;; When drawing our circle, we want it to through the cursor
-        ;; just as when drawing the ellispe, but we have to take
+        ;; just as when drawing the ellipse, but we have to take
         ;; care for the aspect-ratio.
         ;; The equation for the ellipse  (where a is the x-radius and
         ;; b is the y-radius):
@@ -3930,11 +3949,11 @@ The 2-point shape SHAPE is drawn from X1, Y1 to X2, Y2."
 ;; Implementation note: This really should honor the interval-fn entry
 ;; in the master table, `artist-mt', which would mean leaving a timer
 ;; that calls `draw-fn' every now and then. That timer would then have
-;; to be cancelled and reinstalled whenever the user moves the cursor.
+;; to be canceled and reinstalled whenever the user moves the cursor.
 ;; This could be done, but what if the user suddenly switches to another
 ;; drawing mode, or even kills the buffer! In the mouse case, it is much
 ;; simpler: when at the end of `artist-mouse-draw-continously', the
-;; user has released the button, so the timer will always be cancelled
+;; user has released the button, so the timer will always be canceled
 ;; at that point.
 (defun artist-key-draw-continously (x y)
   "Draw current continuous shape at X,Y."
@@ -4000,7 +4019,7 @@ The 2-point shape SHAPE is drawn from X1, Y1 to X2, Y2."
 (defun artist-draw-region-trim-line-endings (min-y max-y)
   "Trim lines in current draw-region from MIN-Y to MAX-Y.
 Trimming here means removing white space at end of a line."
-  ;; Safetyc check: switch min-y and max-y if if max-y is smaller
+  ;; Safety check: switch min-y and max-y if max-y is smaller
   (if (< max-y min-y)
       (let ((tmp min-y))
        (setq min-y max-y)
@@ -4425,7 +4444,7 @@ If N is negative, move backward."
   "Set current fill character to be C."
   (interactive "cType fill char (type RET to turn off): ")
   (cond ((eq c ?\r) (setq artist-fill-char-set nil)
-                   (message "Fill cancelled"))
+                   (message "Fill canceled"))
        (t          (setq artist-fill-char-set t)
                    (setq artist-fill-char c)
                    (message "Fill set to \"%c\"" c))))
@@ -4615,6 +4634,10 @@ If optional argument STATE is positive, turn borders on."
 
          (artist-arrow-point-set-state artist-arrow-point-2 new-state)))))
 
+(defun artist-select-op-pen-line ()
+  "Select drawing pen lines."
+  (interactive)
+  (artist-select-operation "Pen Line"))
 
 (defun artist-select-op-line ()
   "Select drawing lines."
@@ -4940,52 +4963,55 @@ The event, EV, is the mouse event."
     (artist-funcall init-fn x1 y1)
     (if (not artist-rubber-banding)
        (artist-no-rb-set-point1 x1 y1))
-    (track-mouse
-      (while (or (mouse-movement-p ev)
-                (member 'down (event-modifiers ev)))
-       (setq ev-start-pos (artist-coord-win-to-buf
-                           (posn-col-row (event-start ev))))
-       (setq x1 (car ev-start-pos))
-       (setq y1 (cdr ev-start-pos))
-
-       ;; Cancel previous timer
-       (if timer
-           (cancel-timer timer))
-
-       (if (not (eq initial-win (posn-window (event-start ev))))
-           ;; If we moved outside the window, do nothing
-           nil
-
-         ;; Still in same window:
-         ;;
-         ;; Check if user presses or releases shift key
-         (if (artist-shift-has-changed shift-state ev)
-
-             ;; First check that the draw-how is the same as we
-             ;; already have. Otherwise, ignore the changed shift-state.
-             (if (not (eq draw-how
-                          (artist-go-get-draw-how-from-symbol
-                           (if (not shift-state) shifted unshifted))))
-                 (message "Cannot switch to shifted operation")
-
-               ;; progn is "implicit" since this is the else-part
-               (setq shift-state (not shift-state))
-               (setq op          (if shift-state shifted unshifted))
-               (setq draw-how    (artist-go-get-draw-how-from-symbol op))
-               (setq draw-fn     (artist-go-get-draw-fn-from-symbol op))))
-
-         ;; Draw the new shape
-         (setq shape (artist-funcall draw-fn x1 y1))
-         (artist-move-to-xy x1 y1)
-
-         ;; Start the timer to call `draw-fn' repeatedly every
-         ;; `interval' second
-         (if (and interval draw-fn)
-             (setq timer (run-at-time interval interval draw-fn x1 y1))))
-
-       ;; Read next event
-       (setq ev (read-event))))
-
+    (unwind-protect
+        (track-mouse
+          (while (or (mouse-movement-p ev)
+                     (member 'down (event-modifiers ev)))
+            (setq ev-start-pos (artist-coord-win-to-buf
+                                (posn-col-row (event-start ev))))
+            (setq x1 (car ev-start-pos))
+            (setq y1 (cdr ev-start-pos))
+
+            ;; Cancel previous timer
+            (if timer
+                (cancel-timer timer))
+
+            (if (not (eq initial-win (posn-window (event-start ev))))
+                ;; If we moved outside the window, do nothing
+                nil
+
+              ;; Still in same window:
+              ;;
+              ;; Check if user presses or releases shift key
+              (if (artist-shift-has-changed shift-state ev)
+
+                  ;; First check that the draw-how is the same as we
+                  ;; already have. Otherwise, ignore the changed shift-state.
+                  (if (not (eq draw-how
+                               (artist-go-get-draw-how-from-symbol
+                                (if (not shift-state) shifted unshifted))))
+                      (message "Cannot switch to shifted operation")
+
+                    ;; progn is "implicit" since this is the else-part
+                    (setq shift-state (not shift-state))
+                    (setq op          (if shift-state shifted unshifted))
+                    (setq draw-how    (artist-go-get-draw-how-from-symbol op))
+                    (setq draw-fn     (artist-go-get-draw-fn-from-symbol op))))
+
+              ;; Draw the new shape
+              (setq shape (artist-funcall draw-fn x1 y1))
+              (artist-move-to-xy x1 y1)
+
+              ;; Start the timer to call `draw-fn' repeatedly every
+              ;; `interval' second
+              (if (and interval draw-fn)
+                  (setq timer (run-at-time interval interval draw-fn x1 y1))))
+
+            ;; Read next event
+            (setq ev (read-event))))
+      ;; Cleanup: get rid of any active timer.
+      (if timer
+          (cancel-timer timer)))
     ;; Cancel any timers
     (if timer
        (cancel-timer timer))
@@ -5555,7 +5581,7 @@ The event, EV, is the mouse event."
 ;;         of drawing mode.
 ;;
 ;;         You should provide these functions. You might think that
-;;         only you is using your type of mode, so noone will be able
+;;         only you is using your type of mode, so no one will be able
 ;;         to switch to another operation of the same type of mode,
 ;;         but someone else might base a new drawing mode upon your
 ;;         work.
@@ -5570,5 +5596,4 @@ The event, EV, is the mouse event."
 ;; Don't hesitate to ask me any questions.
 
 
-;; arch-tag: 3e63b881-aaaa-4b83-a072-220d4661a8a3
 ;;; artist.el ends here