I'm trying to "override" a function

(defun org-babel-ruby-evaluate (buffer body &optional result-type)   

I think it came with org mode, which came with prelude.

As a first step, I paste this unmodified version (found via google) in to Scratch and eval-buffer

(defun org-babel-ruby-evaluate (buffer body &optional result-type)
  "Pass BODY to the Ruby process in BUFFER.  If RESULT-TYPE equals
'output then return a list of the outputs of the statements in
BODY, if RESULT-TYPE equals 'value then return the value of the
last statement in BODY."
  (if (not session)
      ;; external process evaluation
        (case result-type
             (insert body)
             ;; (message "buffer=%s" (buffer-string)) ;; debugging
             (shell-command-on-region (point-min) (point-max) "ruby" 'replace)
           (let ((tmp-file (make-temp-file "ruby-functional-results")))
               (insert (format org-babel-ruby-wrapper-method body tmp-file))
               ;; (message "buffer=%s" (buffer-string)) ;; debugging
               (shell-command-on-region (point-min) (point-max) "ruby"))
             (with-temp-buffer (insert-file-contents tmp-file) (buffer-string))))))
    ;; comint session evaluation
    (message "session evaluation")
    (let* ((full-body (mapconcat #'org-babel-chomp
                                 (list body org-babel-ruby-last-value-eval org-babel-ruby-eoe-indicator) "\n"))
           (raw (org-babel-comint-with-output buffer org-babel-ruby-eoe-indicator t
                  (insert full-body) (comint-send-input nil t)))
           (results (cdr (member org-babel-ruby-eoe-indicator
                                 (reverse (mapcar #'org-babel-ruby-read-string
                                                  (mapcar #'org-babel-trim raw)))))))
      (case result-type
        (output (mapconcat #'identity (reverse (cdr results)) "\n"))
        (value (car results))))))

But I don't think it worked for me, I got

Eager macro-expansion failure: (wrong-type-argument listp buffer)

in minibufffer.

  • You should state what you actually want to do. This looks very much like an XY-question. Normally one uses hooks and advices to modify the behavior of functions pre-defined in packages..
    – Tobias
    Apr 12 '19 at 17:54

I used a emacs feature called M-x find-function which gave me the correct prototype of the function.

That worked. MY guess is that the function I found on the web was outdated, so it didn't fit in well with the rest of the system.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.