emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/calc/calc-prog.el


From: Jay Belanger
Subject: [Emacs-diffs] Changes to emacs/lisp/calc/calc-prog.el
Date: Sun, 02 Jan 2005 00:02:43 -0500

Index: emacs/lisp/calc/calc-prog.el
diff -c emacs/lisp/calc/calc-prog.el:1.16 emacs/lisp/calc/calc-prog.el:1.17
*** emacs/lisp/calc/calc-prog.el:1.16   Fri Dec 31 03:30:46 2004
--- emacs/lisp/calc/calc-prog.el        Sun Jan  2 04:51:06 2005
***************
*** 660,666 ****
                                 (list '\? (list (car last)) '("$$"))))))))
      part))
  
- 
  (defun calc-user-define-invocation ()
    (interactive)
    (or last-kbd-macro
--- 660,665 ----
***************
*** 668,676 ****
    (setq calc-invocation-macro last-kbd-macro)
    (message "Use `M-# Z' to invoke this macro"))
  
! 
! (defun calc-user-define-edit (prefix)
!   (interactive "P")  ; but no calc-wrapper!
    (message "Edit definition of command: z-")
    (let* ((key (read-char))
         (def (or (assq key (calc-user-key-map))
--- 667,674 ----
    (setq calc-invocation-macro last-kbd-macro)
    (message "Use `M-# Z' to invoke this macro"))
  
! (defun calc-user-define-edit ()
!   (interactive)  ; but no calc-wrapper!
    (message "Edit definition of command: z-")
    (let* ((key (read-char))
         (def (or (assq key (calc-user-key-map))
***************
*** 678,760 ****
                  (assq (downcase key) (calc-user-key-map))
                  (error "No command defined for that key")))
         (cmd (cdr def)))
!     (if (symbolp cmd)
!       (setq cmd (symbol-function cmd)))
      (cond ((or (stringp cmd)
               (and (consp cmd)
                    (eq (car-safe (nth 3 cmd)) 'calc-execute-kbd-macro)))
!          (if (and (>= (prefix-numeric-value prefix) 0)
!                   (fboundp 'edit-kbd-macro)
!                   (symbolp (cdr def))
!                   (eq major-mode 'calc-mode))
!              (progn
!                (if (and (< (window-width) (frame-width))
!                         calc-display-trail)
!                    (let ((win (get-buffer-window (calc-trail-buffer))))
!                      (if win
!                          (delete-window win))))
!                (edit-kbd-macro (cdr def) prefix nil
!                                (function
!                                 (lambda (x)
!                                   (and calc-display-trail
!                                        (calc-wrapper
!                                         (calc-trail-display 1 t)))))
!                                (function
!                                 (lambda (cmd)
!                                   (if (stringp (symbol-function cmd))
!                                       (symbol-function cmd)
!                                     (let ((mac (nth 1 (nth 3 (symbol-function
!                                                               cmd)))))
!                                       (if (vectorp mac)
!                                           (aref mac 1)
!                                         mac)))))
!                                (function
!                                 (lambda (new cmd)
!                                   (if (stringp (symbol-function cmd))
!                                       (fset cmd new)
!                                     (let ((mac (cdr (nth 3 (symbol-function
!                                                             cmd)))))
!                                       (if (vectorp (car mac))
!                                           (progn
!                                             (aset (car mac) 0
!                                                   (key-description new))
!                                             (aset (car mac) 1 new))
!                                         (setcar mac new))))))))
!            (let ((keys (progn (and (fboundp 'edit-kbd-macro)
!                                    (edit-kbd-macro nil))
!                               (fboundp 'edmacro-parse-keys))))
!              (calc-wrapper
!               (calc-edit-mode (list 'calc-finish-macro-edit
!                                     (list 'quote def)
!                                     keys)
!                               t)
!               (if keys
!                   (let (top
!                         (fill-column 70)
!                         (fill-prefix nil))
!                     (insert "Notations: RET, SPC, TAB, DEL, LFD, NUL"
!                             ", C-xxx, M-xxx.\n\n")
!                     (setq top (point))
!                     (insert (if (stringp cmd)
!                                 (key-description cmd)
!                               (if (vectorp (nth 1 (nth 3 cmd)))
!                                   (aref (nth 1 (nth 3 cmd)) 0)
!                                 (key-description (nth 1 (nth 3 cmd)))))
!                             "\n")
!                     (if (>= (prog2 (forward-char -1)
!                                    (current-column)
!                                    (forward-char 1))
!                             (frame-width))
!                         (fill-region top (point))))
!                 (insert "Press C-q to quote control characters like RET"
!                         " and TAB.\n"
!                         (if (stringp cmd)
!                             cmd
!                           (if (vectorp (nth 1 (nth 3 cmd)))
!                               (aref (nth 1 (nth 3 cmd)) 1)
!                             (nth 1 (nth 3 cmd)))))))
!              (calc-show-edit-buffer)
!              (forward-line (if keys 2 1)))))
          (t (let* ((func (calc-stack-command-p cmd))
                    (defn (and func
                               (symbolp func)
--- 676,702 ----
                  (assq (downcase key) (calc-user-key-map))
                  (error "No command defined for that key")))
         (cmd (cdr def)))
!     (when (symbolp cmd)
!       (setq cmdname (symbol-name cmd))
!       (setq cmd (symbol-function cmd)))
      (cond ((or (stringp cmd)
               (and (consp cmd)
                    (eq (car-safe (nth 3 cmd)) 'calc-execute-kbd-macro)))
!            (let* ((mac (elt (nth 1 (nth 3 cmd)) 1))
!                   (str (edmacro-format-keys mac t))
!                   (macbeg))
!              (calc-edit-mode 
!               (list 'calc-edit-macro-finish-edit cmdname (nth 3 (nth 3 cmd)))
!               t "Calc Macro Edit Mode")
!              (goto-char (point-max))
!              (insert "Original keys: " (elt (nth 1 (nth 3 cmd)) 0)  "\n" )
!              (setq macbeg (point))
!              (insert str "\n")
!              (calc-edit-format-macro-buffer)
!              (calc-show-edit-buffer)
!              (goto-char (point-min))
!              (search-forward "Original")
!              (forward-line 2)))
          (t (let* ((func (calc-stack-command-p cmd))
                    (defn (and func
                               (symbolp func)
***************
*** 770,791 ****
                     (calc-show-edit-buffer))
                 (error "That command's definition cannot be edited")))))))
  
! (defun calc-finish-macro-edit (def keys)
    (forward-line 1)
!   (if (and keys (looking-at "\n")) (forward-line 1))
!   (let* ((true-str (buffer-substring (point) (point-max)))
!        (str true-str))
!     (if keys (setq str (edmacro-parse-keys str)))
!     (if (symbolp (cdr def))
!       (if (stringp (symbol-function (cdr def)))
!           (fset (cdr def) str)
!         (let ((mac (cdr (nth 3 (symbol-function (cdr def))))))
!           (if (vectorp (car mac))
!               (progn
!                 (aset (car mac) 0 (if keys true-str (key-description str)))
!                 (aset (car mac) 1 str))
!             (setcar mac str))))
!       (setcdr def str))))
  
  (defun calc-finish-formula-edit (func)
    (let ((buf (current-buffer))
--- 712,939 ----
                     (calc-show-edit-buffer))
                 (error "That command's definition cannot be edited")))))))
  
! ;; Formatting the macro buffer
! 
! (defun calc-edit-macro-repeats ()
!   (goto-char (point-min))
!   (while
!       (re-search-forward "^\\([0-9]+\\)\\*" nil t)
!     (setq num (string-to-int (match-string 1)))
!     (setq line (buffer-substring (point) (line-end-position)))
!     (goto-char (line-beginning-position))
!     (kill-line 1)
!     (while (> num 0)
!       (insert line "\n")
!       (setq num (1- num)))))
! 
! (defun calc-edit-macro-adjust-buffer ()
!   (calc-edit-macro-repeats)
!   (goto-char (point-min))
!   (while (re-search-forward "^RET$" nil t)
!     (delete-char 1))
!   (goto-char (point-min))
!   (while (and (re-search-forward "^$" nil t)
!               (not (= (point) (point-max))))
!     (delete-char 1)))
! 
! (defun calc-edit-macro-command ()
!   "Return the command on the current line in a Calc macro editing buffer."
!   (let ((beg (line-beginning-position))
!         (end (save-excursion
!                (if (search-forward ";;" (line-end-position) 1)
!                    (forward-char -2))
!                (skip-chars-backward " \t")
!                (point))))
!     (buffer-substring beg end)))
! 
! (defun calc-edit-macro-command-type ()
!   "Return the type of command on the current line in a Calc macro editing 
buffer."
!   (let ((beg (save-excursion
!                (if (search-forward ";;" (line-end-position) t)
!                    (progn
!                      (skip-chars-forward " \t")
!                      (point)))))
!         (end (save-excursion
!                (goto-char (line-end-position))
!                (skip-chars-backward " \t")
!                (point))))
!     (if beg
!         (buffer-substring beg end)
!       "")))
! 
! (defun calc-edit-macro-combine-alg-ent ()
!   "Put an entire algebraic entry on a single line."
!   (let ((line (calc-edit-macro-command))
!         (type (calc-edit-macro-command-type))
!         curline
!         match)
!     (goto-char (line-beginning-position))
!     (kill-line 1)
!     (setq curline (calc-edit-macro-command))
!     (while (and curline
!                 (not (string-equal "RET" curline))
!                 (not (setq match (string-match "<return>" curline))))
!       (setq line (concat line curline))
!       (kill-line 1)
!       (setq curline (calc-edit-macro-command)))
!     (when match
!       (kill-line 1)
!       (setq line (concat line (substring curline 0 match))))
!     (setq line (replace-regexp-in-string "SPC" " SPC " 
!                   (replace-regexp-in-string " " "" line)))
!     (insert line "\t\t\t")
!     (if (> (current-column) 24)
!         (delete-char -1))
!     (insert ";; " type "\n")
!     (if match
!         (insert "RET\t\t\t;; calc-enter\n"))))
! 
! (defun calc-edit-macro-combine-ext-command ()
!   "Put an entire extended command on a single line."
!   (let ((cmdbeg (calc-edit-macro-command))
!         (line "")
!         (type (calc-edit-macro-command-type))
!         curline
!         match)
!     (goto-char (line-beginning-position))
!     (kill-line 1)
!     (setq curline (calc-edit-macro-command))
!     (while (and curline
!                 (not (string-equal "RET" curline))
!                 (not (setq match (string-match "<return>" curline))))
!       (setq line (concat line curline))
!       (kill-line 1)
!       (setq curline (calc-edit-macro-command)))
!     (when match 
!       (kill-line 1)
!       (setq line (concat line (substring curline 0 match))))
!     (setq line (replace-regexp-in-string " " "" line))
!     (insert cmdbeg " " line "\t\t\t")
!     (if (> (current-column) 24)
!         (delete-char -1))
!     (insert ";; " type "\n")
!     (if match
!         (insert "RET\t\t\t;; calc-enter\n"))))
! 
! (defun calc-edit-macro-combine-var-name ()
!   "Put an entire variable name on a single line."
!   (let ((line (calc-edit-macro-command))
!         curline
!         match)
!     (goto-char (line-beginning-position))
!     (kill-line 1)
!     (if (string-equal line "1")
!           (insert line "\t\t\t;; calc quick variable\n")
!       (setq curline (calc-edit-macro-command))
!       (while (and curline
!                   (not (string-equal "RET" curline))
!                   (not (setq match (string-match "<return>" curline))))
!         (setq line (concat line curline))
!         (kill-line 1)
!         (setq curline (calc-edit-macro-command)))
!       (when match 
!         (kill-line 1)
!         (setq line (concat line (substring curline 0 match))))
!       (setq line (replace-regexp-in-string " " "" line))
!       (insert line "\t\t\t")
!       (if (> (current-column) 24)
!           (delete-char -1))
!       (insert ";; calc variable\n")
!       (if match
!           (insert "RET\t\t\t;; calc-enter\n")))))
! 
! (defun calc-edit-macro-combine-digits ()
!   "Put an entire sequence of digits on a single line."
!   (let ((line (calc-edit-macro-command))
!         curline)
!     (goto-char (line-beginning-position))
!     (kill-line 1)
!     (while (string-equal (calc-edit-macro-command-type) "calcDigit-start")
!       (setq line (concat line (calc-edit-macro-command)))
!       (kill-line 1))
!     (insert line "\t\t\t")
!     (if (> (current-column) 24)
!         (delete-char -1))
!     (insert ";; calc digits\n")))
! 
! (defun calc-edit-format-macro-buffer ()
!   "Rewrite the Calc macro editing buffer."
!   (calc-edit-macro-adjust-buffer)
!   (goto-char (point-min))
!   (search-forward "Original keys:")
    (forward-line 1)
!   (insert "\n")
!   (skip-chars-forward " \t\n")
!   (let ((type (calc-edit-macro-command-type)))
!     (while (not (string-equal type ""))
!       (cond
!        ((or
!          (string-equal type "calc-algebraic-entry")
!          (string-equal type "calc-auto-algebraic-entry"))
!         (calc-edit-macro-combine-alg-ent))
!        ((string-equal type "calc-execute-extended-command")
!         (calc-edit-macro-combine-ext-command))
!        ((string-equal type "calcDigit-start")
!         (calc-edit-macro-combine-digits))
!        ((or
!          (string-equal type "calc-store")
!          (string-equal type "calc-store-into")
!          (string-equal type "calc-store-neg")
!          (string-equal type "calc-store-plus")
!          (string-equal type "calc-store-minus")
!          (string-equal type "calc-store-div")
!          (string-equal type "calc-store-times")
!          (string-equal type "calc-store-power")
!          (string-equal type "calc-store-concat")
!          (string-equal type "calc-store-inv")
!          (string-equal type "calc-store-dec")
!          (string-equal type "calc-store-incr")
!          (string-equal type "calc-store-exchange")
!          (string-equal type "calc-unstore")
!          (string-equal type "calc-recall")
!          (string-equal type "calc-let")
!          (string-equal type "calc-permanent-variable"))
!         (forward-line 1)
!         (calc-edit-macro-combine-var-name))
!        ((or
!          (string-equal type "calc-copy-variable")
!          (string-equal type "calc-declare-variable"))
!         (forward-line 1)
!         (calc-edit-macro-combine-var-name)
!         (calc-edit-macro-combine-var-name))
!        (t (forward-line 1)))
!       (setq type (calc-edit-macro-command-type))))
!   (goto-char (point-min)))
! 
! ;; Finish editing the macro
! 
! (defun calc-edit-macro-pre-finish-edit ()
!   (goto-char (point-min))
!   (while (re-search-forward "\\(^\\| \\)RET\\($\\|\t\\| \\)" nil t)
!     (search-backward "RET")
!     (delete-char 3)
!     (insert "<return>")))
! 
! (defun calc-edit-macro-finish-edit (cmdname key)
!   "Finish editing a Calc macro.
! Redefine the corresponding command."
!   (interactive)
!   (let ((cmd (intern cmdname)))
!     (calc-edit-macro-pre-finish-edit)
!     (goto-char (point-max))
!     (re-search-backward "^Original keys:")
!     (forward-line 1)
!     (let* ((str (buffer-substring (point) (point-max)))
!            (mac (edmacro-parse-keys str t)))
!       (if (= (length mac) 0)
!           (fmakunbound cmd)
!         (fset cmd
!               (list 'lambda '(arg)
!                     '(interactive "P")
!                     (list 'calc-execute-kbd-macro
!                           (vector (key-description mac)
!                                   mac)
!                           'arg key)))))))
  
  (defun calc-finish-formula-edit (func)
    (let ((buf (current-buffer))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]