X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/bd339239fb5e2e097f45444c476964bb11080608..af5a17495f80e22dae84f22f2b8b4b1105ca102b:/packages/quarter-plane/quarter-plane.el diff --git a/packages/quarter-plane/quarter-plane.el b/packages/quarter-plane/quarter-plane.el index dbde4238a..f73fd4e4e 100644 --- a/packages/quarter-plane/quarter-plane.el +++ b/packages/quarter-plane/quarter-plane.el @@ -1,4 +1,4 @@ -;;; quarter-plane.el --- editing using quarter-plane screen model +;;; quarter-plane.el --- Minor mode for quarter-plane style editing ;; Copyright (C) 2011 Free Software Foundation, Inc. @@ -21,10 +21,17 @@ ;;; Commentary: -;; This code provides a minor mode to enable the some of picture-mode -;; commands documented in the Emacs manual in order to treat the -;; screen as a semi-infinite quarter-plane, without changing the -;; buffer's major mode. +;; This package provides Quarter Plane mode, a minor mode which +;; provides Picture mode style editing (treating the screen as a +;; semi-infinite quarter-plane). Unlike Picture mode, it is a minor +;; modes (see the Emacs manual for the documentation of Picture mode). +;; Type M-x quarter-plane-mode to enable Quarter Plane mode in the +;; current buffer, and M-x global-quarter-plane-mode to enable it +;; globally. + +;; In Quarter Plane mode, the commands `right-char', `forward-char', +;; `previous-line', `next-line', and `mouse-set-point' are rebound to +;; Quarter Plane commands. ;; Known issues: @@ -53,15 +60,8 @@ (define-key map [remap mouse-set-point] 'picture-mouse-set-point) map)) -(defconst quarter-plane-saved-symbols - '(truncate-lines show-trailing-whitespace) - "Buffer-local variables whose modified by `quarter-plane-mode`. -Their values are saved when `quarter-plane-mode` is enabled and restored -when it's disabled.") - -(defvar quarter-plane-saved-values) +(defvar quarter-plane-saved-values nil) (make-variable-buffer-local 'quarter-plane-saved-values) -(put 'quarter-plane-saved-values 'permanent-local t) ;;;###autoload (define-minor-mode quarter-plane-mode @@ -75,29 +75,30 @@ infinitely down and to the right, inserting spaces as necessary. Excess whitespace is trimmed when saving or exiting Quarter-Plane mode. Because it works by inserting spaces, Quarter-Plane mode won't work in -read-only buffers +read-only buffers. \\{quarter-plane-mode-map}" :lighter " Plane" :group 'picture :keymap quarter-plane-mode-map - (cond - (quarter-plane-mode + (remove-hook 'before-save-hook 'quarter-plane-delete-whitespace t) + (dolist (symval (prog1 quarter-plane-saved-values + (setq quarter-plane-saved-values nil))) + (set (car symval) (cdr symval))) + (when quarter-plane-mode (add-hook 'before-save-hook 'quarter-plane-delete-whitespace nil t) - (setq quarter-plane-saved-values nil) - (dolist (sym quarter-plane-saved-symbols) - (push (symbol-value sym) quarter-plane-saved-values)) - (setq quarter-plane-saved-values (nreverse quarter-plane-saved-values)) - (setq truncate-lines t) - (setq show-trailing-whitespace nil)) - (t - (remove-hook 'before-save-hook 'quarter-plane-delete-whitespace t) - (dolist (sym quarter-plane-saved-symbols) - (set sym (pop quarter-plane-saved-values)))))) + ;; Since quarter-plane-mode is not permanent-local, it should turn itself + ;; off cleanly. + (add-hook 'change-major-mode-hook (lambda () (quarter-plane-mode -1)) nil t) + (dolist (symval '((truncate-lines . t) + (show-trailing-whitespace . nil))) + (push (cons (car symval) (symbol-value (car symval))) + quarter-plane-saved-values) + (set (car symval) (cdr symval))))) ;;;###autoload (define-global-minor-mode global-quarter-plane-mode quarter-plane-mode - turn-on-quarter-plane-mode + quarter-plane-mode :group 'picture) (defun quarter-plane-delete-whitespace ()