On Tue, Nov 17, 2009 at 10:32:33AM +0200, thus spake a...@gursey.gov.tr: > Hello, > > I am using Emacs mode for Gap. > > The only way I know to send the file I work to gap-mode is > > C-u M-x gap > > This sends the whole file to gap-mode and executes it. > > I have used Maple via an emacs mode which I have got from > > http://www.mapleprimes.com/blog/joe-riel/emacs-mode-for-maple > > In this Maple mode, it was possible to send a single line to maple mode, > a region, or a function, or buffer etc. Among the features were > highlighting... > > Does the emacs mode for gap do these? >
No. I think that a modern gap mode that has these features would be a great idea. > Or, does anyone have his version of these features? > Well, I use the following hack. I'm not exactly an elisp expert so I'm sure there is a better way of doing this but you may find the following useful: -- 8< -------- Begin Elisp code (defun nea-send-string-to-gap (string) "Send the the string to an already running gap process. The output is displayed in the process' buffer." (interactive "sString to send to GAP (Include final \`;\')") (set-process-filter (get-process "gap") 'gap-output-filter) (save-window-excursion (set-buffer "*gap*") (goto-char (point-max)) (process-send-string "gap" (concat string "\n")))) ;; The name of the temp file should probably be randomly chosen. ;;; Haven't really used this command much. (defun nea-send-region-to-gap-as-file (begin end) "Have GAP read the contents of the region as a file." (interactive "r") (let ((temp-gap-file "/tmp/tmp.gap")) (write-region begin end temp-gap-file) (send-string-to-gap-normally (concat "Read(\"" temp-gap-file "\");\n")))) (defun nea-send-region-to-gap (begin end &optional arg) "Send region to gap." (interactive "r\nP") (let ((string (buffer-substring begin end))) (save-window-excursion (set-buffer "*gap*") (goto-char (point-max)) (send-string-to-gap string arg)))) (defun nea-send-line-to-gap (&optional arg) "Send current line to GAP." (interactive "P") (send-region-to-gap (line-beginning-position) (line-end-position) arg)) (defun nea-get-last-gap-output () "Scrap the last output from the gap buffer" (interactive) (save-excursion (set-buffer "*gap*") (let ((pt (point)) (pmark (progn (goto-char (process-mark (get-buffer-process "*gap*"))) (forward-line 0) (point-marker))) output) (goto-char pmark) (search-backward-regexp gap-prompt-regexp nil t) (forward-line 1) (setq output (buffer-substring-no-properties (point) pmark)) (goto-char pt) output))) ;; The following is an example of how to use nea-get-last-gap-output (defun nea-ins-gap () "Insert the last output in buffer." (interactive) (end-of-line) (let ((string (nea-get-last-gap-output))) (if (string-match " ." (nea-get-last-gap-output)) (setq string (format "\n#==>\n %s;\n#<==" string)) (setq string (format " #==> %s" string ))) (insert string))) ;; I use the following key bindings: (define-key gap-mode-map "\C-c\C-s" 'nea-send-string-to-gap) (define-key gap-mode-map "\C-c\C-l" 'nea-send-line-to-gap) (define-key gap-mode-map "\C-c\C-r" 'nea-send-region-to-gap) (define-key gap-mode-map "\C-c\C-f" 'nea-send-region-to-gap-as-file) (define-key gap-mode-map "\C-ci" 'nea-ins-gap) -- 8< -------- End Elisp code > Thanks a lot, > > kursat _______________________________________________ Forum mailing list Forum@mail.gap-system.org http://mail.gap-system.org/mailman/listinfo/forum