emacs

Utilisation de Xcas

Modérateur : xcasadmin

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

emacs

Message par frederic han » sam. mars 02, 2013 1:55 pm

Bonjour a tous,

je trouve le mode mupad trop complique pour moi, et il y avait des choses que je ne savais pas faire:

Ce qui m'interessait etait d'avoir:

dans emacs: Envoyer une ligne ou une region a giac, sans avoir a tout reevaluer.

par exemple:
f(x):={
x+1;
}


ne marche pas en copier/coller dans un terminal.

En glanant des exemples pour le shell j'en suis a quelque chose qui me convient:
(pour moi giac marche mieux sous emacs en mode giac sans le --emacs. par exemple j'ai bien le control fleche haut pour l'historique ...)

Y aurait t'il un truc dans giac pour bloquer les affichages trop long?

Voila

Fred

Code : Tout sélectionner

;;; Giac send line or region
(global-set-key (kbd "<f11>") 'giac-sendcommand)
;
(defun giac ()
  "Run Giac in a buffer."
  (interactive)
  (switch-to-buffer (apply 'make-comint "giac" "giac" nil))
  )
; 
(defun giac-send-line-or-region (&optional step)
  (interactive ())
  (let ((proc (get-process "giac"))
        pbuf min max command)
    (unless proc
      (let ((currbuff (current-buffer)))
        (giac)
        (switch-to-buffer currbuff)
        (setq proc (get-process "giac"))
	(display-buffer (process-buffer proc) t)
	))
    (setq pbuff (process-buffer proc))
    (if (use-region-p)
        (setq min (region-beginning)
              max (region-end))
      (setq min (point-at-bol)
            max (point-at-eol)))
    (setq command (buffer-substring min max) )
    (while (string-match "//.*$" command);remove the inline giac comments
         (setq command (replace-match "" t t command)))
    (while (string-match "\n" command)
         (setq command (replace-match "" t t command)))
    (setq command (concat command "\n"))
    (with-current-buffer pbuff
      (goto-char (process-mark proc))
      (insert command)
      (move-marker (process-mark proc) (point))
      )
    (process-send-string  proc command)
    ;(display-buffer (process-buffer proc) t)
    (when step 
      (next-line))
    ))


(defun giac-sendcommand ()
  (interactive)
  (giac-send-line-or-region t))
(defun giac-switch-to-process-buffer ()
  (interactive)
  (pop-to-buffer (process-buffer (get-process "giac")) t))
;;;Fin Giac

parisse
Messages : 5743
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: emacs

Message par parisse » sam. mars 02, 2013 4:41 pm

Pas mal ton mode, et c'est super simple il suffit de rajouter tes lignes dans ~/.emacs.
Le plus simple pour le blocage, c'est sans doute de faire une modif dans icas.cc et d'appeler la fonction taille sur le résultat de l'évaluation, par exemple

Code : Tout sélectionner

diff icas.cc icas.cc~
911,917c911,912
<       else {
< 	int taillemax=1000;
< 	if (getenv("GIAC_TAILLEMAX"))
< 	  taillemax=atoi(getenv("GIAC_TAILLEMAX"));
< 	string s=taille(ge,taillemax)>taillemax?"Done":ge.print(contextptr);
< 	cout << s;
<       }
---
>       else
> 	cout << ge.print(contextptr);
où export GIAC_TAILLEMAX=valeur permet de changer la taille maximale fixée à 1000 par défaut.

Répondre