Emacs org-babel с ob-julia.el больше не работает с Julia V1.0

Я использую ob-julia.el для создания своих ноутбуков Julia под Emacs. Однако с новым выпуском Julia v1.0 он больше не работает.

Например, базовый документ в режиме org:

#+BEGIN_SRC julia :exports both :session mySession
1+2
#+END_SRC

теперь возвращается пустой #+RESULT

Если я смотрю на буфер mySession, я вижу это сообщение об ошибке

julia> ERROR: UndefVarError: writecsv not defined
Stacktrace:
 [1] top-level scope at none:0

2 ответа

Причина в том, что пакет Emacs ob-julia.el не был обновлен для поддержки самого последнего выпуска v1.0 Julia.

В этой версии v1.0 readcsv а также writecsv функции больше не существуют. Они были заменены функциями DelimitedFiles.readdlm и DelimitedFiles.writedlm.

Однако ob-julia.el все еще использует их:

(defvar org-babel-julia-write-object-command "writecsv(\"%s\",%s)")

а также

 (format "%s = readcsv(\"%s\")" name file)
    (format "%s = readcsv(\"%s\")"
        name file))))

Я представил вопрос ob-julia.el. Однако есть возможность быстрого и грязного исправления, если вы все еще хотите использовать ob-julia.el прямо сейчас. Просто добавьте эти строки в свой ~/.julia/config/startup.jl файл:

import DelimitedFiles

function writecsv(filename::AbstractString,ans)
    DelimitedFiles.writedlm(filename,ans,',')
end

function readcsv(filename::AbstractString)
    DelimitedFiles.readdlm(filename,',')
end 

Это переопределит readcsv а также writecsv функции и заставить ob-julia.el работать снова.

С этим исправлением я получаю сейчас:

#+BEGIN_SRC julia
1+2
#+END_SRC

#+RESULTS:
: 3

#+BEGIN_SRC julia :session mySession
1+2
#+END_SRC

#+RESULTS:
: 3

как и ожидалось.

Это нарушает сборку нескольких пакетов Джулии для меня. В качестве обходного пути я переместил код Пикадо в ~/.julia/config/startup-babel.jl, Тогда я настроил Ess Julia"s Inferior Julia Args переменная к

-e include("$(ENV["HOME"])/.julia/config/startup-babel.jl") -i

Другие вопросы по тегам