Karim Belabas on Wed, 10 Mar 1999 17:21:12 +0100 (MET)


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

pari.el-2.24 patch


Here is a patch for pari.el which I received from Olivier Ramare. It
should address the problems that he and Paul van Wamelen mentioned lately
(pari-dev-460 && 462). It applies to the emacs files distributed in
pari-2.0.14, and none of the previous ones.

I did not test it (don't use Emacs...), but it looks ok.

  Karim.

*** emacs/pari.el.in.orig	Wed Mar 10 17:13:52 1999
--- emacs/pari.el.in	Wed Mar 10 16:54:36 1999
***************
*** 6,12 ****
  
  ;; All functions of gp are preserved.
  
! ;; Version 2.24 (28-January-1999)
  ;; The original pari.el was written by Annette Hoffman.
  ;; Modified by David Carlisle (JANET: carlisle@uk.ac.man.cs).
  ;; Modified by Karim Belabas (belabas@math.u-bordeaux.fr) for gp 2.xxx.
--- 6,12 ----
  
  ;; All functions of gp are preserved.
  
! ;; Version 2.25 (10-March-1999)
  ;; The original pari.el was written by Annette Hoffman.
  ;; Modified by David Carlisle (JANET: carlisle@uk.ac.man.cs).
  ;; Modified by Karim Belabas (belabas@math.u-bordeaux.fr) for gp 2.xxx.
***************
*** 48,57 ****
  ;; to work properly with macro, they *should* be defined before
  ;; they are called.
  
- ;; Weirdies : Comparison and \idx{boolean operators
- ;;            +$/$- 
- 
- 
  (provide 'pari)
  
  ;;--------------------------
--- 48,53 ----
***************
*** 289,294 ****
--- 285,330 ----
  (defvar gp-color-menu-list nil
    "List containing the color menu.")
  
+ (defvar gp-syntax-table nil
+   "Syntax table in use in gp-mode and gp-script-mode buffers.")
+ 
+ (if gp-syntax-table
+     ()
+   (setq gp-syntax-table (make-syntax-table))
+   (modify-syntax-entry ?( "()"  gp-syntax-table)  
+   (modify-syntax-entry ?) ")("  gp-syntax-table)
+   (modify-syntax-entry ?[ "(]"  gp-syntax-table)  
+   (modify-syntax-entry ?] ")["  gp-syntax-table)
+   (modify-syntax-entry ?{ "(}"  gp-syntax-table)  
+   (modify-syntax-entry ?} "){"  gp-syntax-table)
+   (modify-syntax-entry ?# "."   gp-syntax-table)
+   (modify-syntax-entry ?~ "_"   gp-syntax-table)  ; symbols
+   (modify-syntax-entry ?! "_"   gp-syntax-table)  ; symbols
+   (modify-syntax-entry ?+ "."   gp-syntax-table)
+   (modify-syntax-entry ?- "."    gp-syntax-table)
+   ;(modify-syntax-entry ?/  ". 1456" gp-syntax-table) ; XEmacs?
+   (modify-syntax-entry ?/  ". 14" gp-syntax-table)
+   (modify-syntax-entry ?*  ". 23"   gp-syntax-table)
+   (modify-syntax-entry ?\\ ". 12b" gp-syntax-table)
+ 
+   (if (string-match "XEmacs" emacs-version)
+       (progn
+       (modify-syntax-entry ?\n ">b"  gp-syntax-table)
+       ;; Give CR the same syntax as newline, for selective-display
+       (modify-syntax-entry ?\^m ">b" gp-syntax-table)
+       )
+     (modify-syntax-entry ?\n "> b"  gp-syntax-table)
+     ;; Give CR the same syntax as newline, for selective-display
+     (modify-syntax-entry ?\^m "> b" gp-syntax-table)
+     )
+   (modify-syntax-entry ?= "."    gp-syntax-table)
+   (modify-syntax-entry ?% "."    gp-syntax-table)
+   (modify-syntax-entry ?< "."    gp-syntax-table)
+   (modify-syntax-entry ?> "."    gp-syntax-table)
+   (modify-syntax-entry ?$ "."    gp-syntax-table)
+   (modify-syntax-entry ?| "."    gp-syntax-table)
+   (modify-syntax-entry ?_ "w"    gp-syntax-table))
+ 
  (defvar gp-map nil
    "Local keymap used in buffer *PARI*.")
  
***************
*** 366,372 ****
  
  (define-key completion-list-mode-map [mouse-2] (function gp-mouse-2))
  
! (define-key minibuffer-local-completion-map " " 'self-insert-command)
  ;; It is usually 'minibuffer-complete-word, but C-i does that.
  
  ;; Maps used for the menu-bar.
--- 402,408 ----
  
  (define-key completion-list-mode-map [mouse-2] (function gp-mouse-2))
  
! ;; (define-key minibuffer-local-completion-map " " 'self-insert-command)
  ;; It is usually 'minibuffer-complete-word, but C-i does that.
  
  ;; Maps used for the menu-bar.
***************
*** 396,404 ****
               ("\\*\\*\\*.*"            nil  gp-error)
               ("\\<\\(buffersize\\|colors\\|compatible\\|debug\\|debugmem\\|echo\\|format\\|help\\|histsize\\|logfile\\|output\\|parisize\\|path\\|primelimit\\|prompt\\|psfile\\|realprecision\\|seriesprecision\\|simplify\\|strictmatch\\|timer\\)\\>" nil gp-default-keywords)
               ;; In the next one, we avoid `log(10)' and `"pari.log"':
!              ("[\\<\\.]\\(log\\)[^a-zA-Z0-9_\\.(\"]" 1 gp-default-keywords)
               ("^ *\\\\[a-z].*$"  nil gp-default-set)
!              ("\\(\\`\\|[^a-zA-Z0-9_]\\)\\(default\\)(" 2 gp-default-set)
  
               ("^ *%[0-9]* = \\(.*$\\)"  1   gp-output))))))
  
--- 432,440 ----
               ("\\*\\*\\*.*"            nil  gp-error)
               ("\\<\\(buffersize\\|colors\\|compatible\\|debug\\|debugmem\\|echo\\|format\\|help\\|histsize\\|logfile\\|output\\|parisize\\|path\\|primelimit\\|prompt\\|psfile\\|realprecision\\|seriesprecision\\|simplify\\|strictmatch\\|timer\\)\\>" nil gp-default-keywords)
               ;; In the next one, we avoid `log(10)' and `"pari.log"':
!              ("[\\<\\.]\\(log\\)[^\\w\\.(\"]" 1 gp-default-keywords)
               ("^ *\\\\[a-z].*$"  nil gp-default-set)
!              ("\\<\\(default\\)(" 2 gp-default-set)
  
               ("^ *%[0-9]* = \\(.*$\\)"  1   gp-output))))))
  
***************
*** 419,431 ****
        'gp-script-mode
        '(  (gp-find-comment nil gp-comment)
  
!           ("\\(\\`\\|[^a-zA-Z0-9_]\\)\\(return\\|next\\|if\\|until\\|while\\|\\|fordiv\\|forprime\\|forstep\\|forvec\\|for\\) *(" 2 gp-control-statement)
  
!           ("\\(\\`\\|[^a-zA-Z0-9_]\\)\\(break\\)[^a-zA-Z0-9_]" 2 gp-control-statement)
  
!           ("\\(\\`\\|[^a-zA-Z0-9_]\\)\\(default\\)("  2 gp-default-set)
!           ("\\(\\`\\|[^a-zA-Z0-9_]\\)\\(read\\)[^a-zA-Z0-9_]"  2 gp-input-cmd)
!           ("\\(\\`\\|[^a-zA-Z0-9_]\\)\\(local\\)\\([ \t\n]*(\\)"  2 gp-input-cmd)
  
  
            (hilit-string-find ?\\ gp-string)
--- 455,467 ----
        'gp-script-mode
        '(  (gp-find-comment nil gp-comment)
  
!           ("\\<\\(return\\|next\\|if\\|until\\|while\\|\\|fordiv\\|forprime\\|forstep\\|forvec\\|for\\) *(" 1 gp-control-statement)
  
!           ("\\<\\(break\\)[^a-zA-Z0-9_]" 1 gp-control-statement)
  
!           ("\\<\\(default\\)("  1 gp-default-set)
!           ("\\<read\\>[^a-zA-Z0-9_]"  0 gp-input-cmd)
!           ("\\<\\(local\\)\\([ \t\n]*(\\)"  1 gp-input-cmd)
  
  
            (hilit-string-find ?\\ gp-string)
***************
*** 506,512 ****
    (if (file-really-exists-p gp-additional-completion-file)
       ;; Add this file to the usual completion array.
        (gp-completion-file gp-additional-completion-file))
!   (gp-learn-sexp))
  
  ;;;###autoload
  (defun gp-script-mode ()
--- 542,549 ----
    (if (file-really-exists-p gp-additional-completion-file)
       ;; Add this file to the usual completion array.
        (gp-completion-file gp-additional-completion-file))
!   (gp-learn-sexp)
!   (set-syntax-table gp-syntax-table))
  
  ;;;###autoload
  (defun gp-script-mode ()
***************
*** 600,606 ****
  	(progn (message "done") (setq notdone nil))
    ;; Else flush the buffer and wait a bit longer.
  	(progn (message "Waiting for gp output ...")
!                (goto-char p) (sit-for 0)))
        (goto-char p))))
      (sit-for 0))
  
--- 637,643 ----
  	(progn (message "done") (setq notdone nil))
    ;; Else flush the buffer and wait a bit longer.
  	(progn (message "Waiting for gp output ...")
!                (sit-for 0)))
        (goto-char p))))
      (sit-for 0))
  
***************
*** 829,836 ****
                       (looking-at "\\\\"))))
           (not (looking-at "\\\\")))))
  
- (defun aa nil (interactive) (print (gp-end-of-inputp)))
- 
  (defun gp-find-end-of-input (end)
    "Give the position of next end-of-input and nil if none."
    (save-excursion
--- 866,871 ----
***************
*** 874,888 ****
           (setq gp-complete-expression (gp-end-of-inputp))))
  
      ;; We refine 'gp-complete-expression:
!     (let ((ans (parse-partial-sexp gp-input-start gp-input-end)))
          (setq gp-complete-expression
                (and gp-complete-expression
                     (equal (nth 0 ans) 0)  ;; Depth in parens is 0.
!                    (equal (save-excursion
!                             (goto-char (nth 2 ans))
!                             (forward-sexp)
!                             (point))
!                            gp-input-end)
                     (not (nth 3 ans)) ;; Not inside a string.
                     ;; This one does not work... Why ??
                     (not (nth 4 ans)) ;; Not inside a comment.
--- 909,926 ----
           (setq gp-complete-expression (gp-end-of-inputp))))
  
      ;; We refine 'gp-complete-expression:
!     (let ((ans (parse-partial-sexp gp-input-start gp-input-end)) a-pt)
          (setq gp-complete-expression
                (and gp-complete-expression
                     (equal (nth 0 ans) 0)  ;; Depth in parens is 0.
!                    (or (not (nth 2 ans))
!                        (equal (save-excursion
!                                 (goto-char (nth 2 ans))
!                                 (forward-sexp)
!                                 (setq a-pt (point)))
!                               gp-input-end)
!                        (and (char-equal (preceding-char) ?;)
!                             (equal a-pt (1- gp-input-end))))
                     (not (nth 3 ans)) ;; Not inside a string.
                     ;; This one does not work... Why ??
                     (not (nth 4 ans)) ;; Not inside a comment.
***************
*** 995,1001 ****
    (if (gp-treat-special-inputp)
        nil ;; already treated.
      (gp-copy-input)) ;; does all the work!
!     (if gp-complete-expression
  ;; If it is a complete expression do this:
        (progn
          (insert "\n")
--- 1033,1039 ----
    (if (gp-treat-special-inputp)
        nil ;; already treated.
      (gp-copy-input)) ;; does all the work!
!   (if gp-complete-expression
  ;; If it is a complete expression do this:
        (progn
          (insert "\n")
***************
*** 1152,1169 ****
           (if (or (string= my-buffer-name "*gp-help*")
                   (not (get-buffer "*gp-help*")))
               ;; Exit from help or the gp-menu is alone:
!              (and (buffer-visiblep "*gp-help*")
!                   (gp-restore-wind-conf))
               (if (string= my-buffer-name "*gp-menu*")
               ;; The previous condition should always be verified!
               ;; We should remove the window displaying gp-menu:
                   (progn
!                    (gp-depile-wind-conf)
!                    (if (= (count-windows) 2)
                         (progn
!                          (and (get-buffer "*gp-help*")
!                               (switch-to-buffer "*gp-help*"))
!                          (other-window 1))))))
           ;; We have to kill the buffer (in any case) and select
           ;; a proper buffer for this window in case this killing
           ;; made something weird appear:
--- 1190,1207 ----
           (if (or (string= my-buffer-name "*gp-help*")
                   (not (get-buffer "*gp-help*")))
               ;; Exit from help or the gp-menu is alone:
!              (gp-restore-wind-conf)
               (if (string= my-buffer-name "*gp-menu*")
               ;; The previous condition should always be verified!
               ;; We should remove the window displaying gp-menu:
                   (progn
!                    (if (and (= (count-windows) 2)
!                             (get-buffer "*gp-help*"))
                         (progn
!                          (gp-depile-wind-conf)
!                          (switch-to-buffer "*gp-help*")
!                          (other-window 1))
!                        (gp-restore-wind-conf)))))
           ;; We have to kill the buffer (in any case) and select
           ;; a proper buffer for this window in case this killing
           ;; made something weird appear:
***************
*** 1634,1640 ****
  
  (defun backward-gpword nil
    "Seeks the beginning of a gpword. A gpword is a continuous chain
! of [a-zA-Z_0-9]. Returns point." 
    (if (bobp)
      (point)
      (forward-char -1)
--- 1672,1678 ----
  
  (defun backward-gpword nil
    "Seeks the beginning of a gpword. A gpword is a continuous chain
! of [a-zA-Z_0-9] not starting with a digit. Returns point." 
    (if (bobp)
      (point)
      (forward-char -1)
***************
*** 1658,1667 ****
  (defun forward-gpword nil
    "Seeks the end of a gpword. A gpword is a continuous chain
  of [a-zA-Z_0-9]. Returns point."
!     (re-search-forward "\\([a-zA-Z0-9_]+\\)\\([^a-zA-Z0-9_]\\|\\'\\)"
!                        (point-max) t)
!     (goto-char (match-end 1))
!     (point))
  
  (defun gp-find-word-to-complete nil
    (backward-gpword)
--- 1696,1702 ----
  (defun forward-gpword nil
    "Seeks the end of a gpword. A gpword is a continuous chain
  of [a-zA-Z_0-9]. Returns point."
!     (forward-word 1) (point))
  
  (defun gp-find-word-to-complete nil
    (backward-gpword)
***************
*** 2260,2272 ****
               (word (gp-find-word-to-complete))
  ;; get the argument from the minibuffer into arg
               (arg
!                (completing-read
!                  (concat (, this-type)
!                    (if (intern-soft word gp-c-array)
  ;; If the word before point is a gp function, offer it as default.
!                      (concat " [Default " word "]" )) ": ")
  ;; use gp-c-array as the completion array
!                   gp-c-array)))
        (if (equal arg "")
  ;; If the argument supplied is "", and word is a gp symbol, use it as default.
  ;; (Do not use "" as fn in anycase, so otherwise use " ", which will not
--- 2295,2311 ----
               (word (gp-find-word-to-complete))
  ;; get the argument from the minibuffer into arg
               (arg
!                (progn
!                  (define-key minibuffer-local-completion-map " " 'self-insert-command)
!                   ;; It is usually 'minibuffer-complete-word, but C-i does that.
!                  (completing-read
!                    (concat (, this-type)
!                      (if (intern-soft word gp-c-array)
  ;; If the word before point is a gp function, offer it as default.
!                          (concat " [Default " word "]" )) ": ")
  ;; use gp-c-array as the completion array
!                    gp-c-array))))
!       (define-key minibuffer-local-completion-map " " 'minibuffer-complete-word)
        (if (equal arg "")
  ;; If the argument supplied is "", and word is a gp symbol, use it as default.
  ;; (Do not use "" as fn in anycase, so otherwise use " ", which will not
***************
*** 2280,2287 ****
    (interactive (gp-ask-name-wisely "Function"))
  
      (shell-command
!       (concat gp-gphelp-dir "gphelp " fn)
!       nil)
      (if (buffer-live-p (get-buffer "*Shell Command Output*"))
        (save-excursion
            (set-buffer "*Shell Command Output*")
--- 2319,2325 ----
    (interactive (gp-ask-name-wisely "Function"))
  
      (shell-command
!       (concat gp-gphelp-dir "gphelp \"" fn "\""))
      (if (buffer-live-p (get-buffer "*Shell Command Output*"))
        (save-excursion
            (set-buffer "*Shell Command Output*")
***************
*** 2356,2361 ****
--- 2394,2400 ----
  in whose description the expression EXP appears.
  Similar to \"??? exp\" in gp."
    (interactive (gp-ask-name-wisely "Subject"))
+ 
    (gp-window-manager "*gp-menu*" 'gp-beginning)
    (insert
      (format
***************
*** 2384,2389 ****
--- 2423,2429 ----
        (search-forward "\n###\n")
        (gp-menu-info)))
  
+ 
  ;;------------------------
  ;; PART V : HIGHLIGHTING
  ;;------------------------
***************
*** 2868,2871 ****
          (list ["Previous Setting" gp-restore-wind-conf
                                    gp-registers-list])))))
  
! ;;; pari.el ends here   ----------2873 lines
--- 2908,2911 ----
          (list ["Previous Setting" gp-restore-wind-conf
                                    gp-registers-list])))))
  
! ;;; pari.el ends here   ----------2911 lines


--
Karim Belabas                    email: Karim.Belabas@math.u-psud.fr
Dep. de Mathematiques, Bat. 425
Universite Paris-Sud             Tel: (33 1) 01 69 15 57 48
F-91405 Orsay (France)           Fax: (33 1) 01 69 15 60 19
--
PARI/GP Home Page: http://hasse.mathematik.tu-muenchen.de/ntsw/pari/