рдХреНрдпрд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдереА?
рдкрд░рд┐рдгрд╛рдо рдЦрдВрдб рдореЗрдВ рд╕реНрд░реЛрдд рдмреНрд▓реЙрдХ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреЗрдВ
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛?
рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдЙрдЯрдкреБрдЯ-рдПрд╕рд┐рдВрдХреНрд╕ рдХреЛрдб рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ
рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░рд┐рдпрд╛:
рдкрд╢реНрд╡-рдЕрдиреБрд░реЗрдЦрди:
Debugger entered--Lisp error: (file-missing "Cannot open load file" "No such file or directory" "ob-jupyter-python")
signal(file-missing ("Cannot open load file" "No such file or directory" "ob-jupyter-python"))
async-handle-result((lambda (result) (with-current-buffer #<buffer google_maps.org> (let ((default-directory "/home/pim/git/myMinsait/smartwaste/sprint20/")) (save-excursion (cond ((member "none" ...) (message "result silenced")) ((member "silent" ...) (message ...)) (t (goto-char #<marker at 692 in google_maps.org>) (let ... ... ... ...))) (run-hooks 'org-babel-after-execute-hook))))) (async-signal (file-missing "Cannot open load file" "No such file or directory" "ob-jupyter-python")) #<buffer *emacs*>)
async-when-done(#<process emacs> "finished\n")
рдкреНрд░рдЬрдирди рдХрд░рдиреЗ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛:
(package! jupyter)
#+begin_src jupyter-python :session py :results raw drawer
%matplotlib inline
import numpy as np
import pandas as pd
x = np.linspace(1,100, 10)
y = np.random.normal(size=10)*x
df = pd.DataFrame({'x':x, 'y':y})
df.plot(x='x', y='y')
#+end_src
рдкреНрд░рдгрд╛рд▓реА рдХреА рдЬрд╛рдирдХрд╛рд░реА:
Compiling your literate config...
Tangled 0 code blocks from config.org
Done!
((emacs
(version . "27.0.50")
(features . "XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GLIB NOTIFY INOTIFY ACL GNUTLS LIBXML2 FREETYPE HARFBUZZ LIBOTF ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON PDUMPER LCMS2 GMP")
(build . "dic 05, 2019")
(buildopts "--prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib --localstatedir=/var --mandir=/usr/share/man --with-gameuser=:games --with-sound=alsa --with-modules --without-gconf --without-gsettings --enable-link-time-optimization --with-x-toolkit=gtk3 --without-xaw3d --without-m17n-flt --with-cairo --without-compress-install 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt -flto -fuse-linker-plugin -flto -fuse-linker-plugin -fuse-ld=gold' CPPFLAGS=-D_FORTIFY_SOURCE=2 LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now")
(windowsys . batch)
(daemonp . server-running))
(doom
(version . "2.0.9")
(build . "HEAD -> develop 207ce02a3 2019-12-16 05:45:27 -0500"))
(system
(type . gnu/linux)
(config . "x86_64-pc-linux-gnu")
(shell . "/usr/bin/zsh")
(uname . "Linux 4.19.88-1-MANJARO #1 SMP PREEMPT Thu Dec 5 11:04:44 UTC 2019 x86_64")
(path "~/anaconda3/envs/waste/bin" "~/anaconda3/condabin" "~/.local/bin" "/usr/local/bin" "/usr/local/sbin" "/usr/bin" "/usr/lib/jvm/default/bin" "/usr/bin/site_perl" "/usr/bin/vendor_perl" "/usr/bin/core_perl" "/usr/lib/emacs/27.0.50/x86_64-pc-linux-gnu"))
(config
(envfile . envvar-file)
(elc-files . 0)
(modules :completion company ivy :ui doom doom-dashboard doom-quit hl-todo modeline nav-flash ophints (popup +all +defaults) treemacs vc-gutter vi-tilde-fringe window-select workspaces :editor (evil +everywhere) file-templates fold multiple-cursors rotate-text snippets word-wrap :emacs dired electric ibuffer vc :term eshell :tools docker (eval +overlay) flycheck (lookup +docsets) lsp magit :lang data emacs-lisp markdown (org +dragndrop +ipython +pandoc +present) (python +lsp +conda) sh :config literate (default +bindings +smartparens))
(packages jupyter)
(elpa "n/a")))
рдЗрд╕реЗ рдЕрдкрдиреЗ рдирд┐рдЬреА config.el рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
(add-hook! '+org-babel-load-functions
(defun +org-babel-load-jupyter-h (lang)
(and (string-prefix-p "jupyter-" (symbol-name lang))
(require lang nil t))))
рдЬрд▓реНрджреА рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХрд╛ рд╢реБрдХреНрд░рд┐рдпрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рд╕рд░рд▓ рдХреЛрдб рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:
#+begin_src jupyter-python :session py :results raw drawer
print('test')
#+end_src
#+RESULTS:
: test
#+begin_src jupyter-python :session py :results raw drawer
print('test')
#+end_src
#+RESULTS:
: c172bf02f62c4210de534c8e3147198b
рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ ("рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛"):
;;; .doom.d/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here
(def-package! org
:config
;; (setq python-shell-interpreter "/home/pim/anaconda3/bin/python3")
;; (setq org-babel-python-command "/home/pim/anaconda3/bin/python3")
(setq python-shell-interpreter-args "-m IPython --simple-prompt -i")
(org-babel-do-load-languages
'org-babel-load-languages
'((latex . t)
(python . t)
(shell . t)
(sql . t)
(jupyter . t))))
(add-hook! '+org-babel-load-functions
(defun +org-babel-load-jupyter-h (lang)
(and (string-prefix-p "jupyter-" (symbol-name lang))
(require lang nil t))))
org-babel-do-load-languages
рдХреЙрд▓ рдирд┐рдХрд╛рд▓реЗрдВред рдпрд╣ рдмреЗрдореЗрд▓ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП Doom рдХреЗ рдЕрдкрдиреЗ рдЖрд▓рд╕реА-рд▓реЛрдбрд┐рдВрдЧ рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдмреЗрдорд╛рдиреА рд╣реИред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдиреНрдпрдерд╛, рдЬреНрдпреВрдкрд┐рдЯрд░ рдкреИрдХреЗрдЬ рд╕реЗ :lang (org +ipython)
рдмрджрд▓реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЬреНрдпреВрдкрд┐рдЯрд░ рдИрдореИрдХ рдкреИрдХреЗрдЬ рдХреБрдЫ рдЧреИрд░-рдорд╛рдирдХ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрдиреЗ src рдмреНрд▓реЙрдХ рдореЗрдВ :async yes
рдпрд╛ :async no
рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИред
Ob-ipython рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ + conda рдХреЗ рд╕рд╛рде рд╕рдХреНрд░рд┐рдп рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ ob-ipython рд╕рдорд░реНрдерди рдЦреЛ рд░рд╣рд╛ рд╣реИред
рдореИрдВ emacs-jupyter рдХреЛ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрдВрдбрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдкрд┐рдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдФрд░ рдЗрд╕рдореЗрдВ рдЖрд░ рдФрд░ рд░рд┐рдореЛрдЯ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдХреНрд╖рдорддрд╛ рд╣реИред
рдЕрдЧрд░ org-babel-do-load-languages
рд╕рд╛рде рдирд╣реАрдВ рддреЛ рдореБрдЭреЗ jupyter рдХреЛ org babel рдореЗрдВ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛?
emacs-jupyter
ob-async
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЬреНрдпреВрдкрд┐рдЯрд░ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
(setq ob-async-no-async-languages-alist
'("jupyter-python"))
рдореИрдВрдиреЗ +jupyter
рд╕реБрд╡рд┐рдзрд╛ рдХреЛ :lang org
рдЬреЛрдбрд╝рд╛ рд╣реИ рдЬреЛ ob-async-no-async-languages-alist
рдФрд░ +org-babel-load-functions
ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЕрдкрдиреЗ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП @randomizedthinking рдФрд░ @Hissner рдХреЛ рдзрдиреНрдпрд╡рд╛рджред
+jupyter
рдХреЛ рдСрд░реНрдЧрди рдХреЙрдиреНрдлрд┐рдЧрд░ рдореЗрдВ .doom.d/init.el, it seems babel does not pick up that language:
рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, +jupyter
рдСрд░реНрдЧрди-рдмреИрдмреЗрд▓-рдПрдХреНрдЬрд╝рд┐рдХреНрдпреВрдЯ-src-block: рдЬреНрдпреВрдкрд┐рдЯрд░-рдкрд╛рдЗрдерди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдСрд░реНрдЧреЗрди-рдмреИрдмреЗрд▓-рдлрдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ! '
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, emacs-jupyter рдХреЛ рдЕрдЬрдЧрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдзрд╛ рдЙрддреНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдУрдЖрд░-рдЖрдЗрдкреАрдереЙрди рдХреА рддрд░рд╣ рдУрдЖрд░рдЬреА-рдореЛрдб рдХреЗ рд╕рд╛рде рд╕рд┐рд░реНрдл рдПрдХ рдПрдХреАрдХрд░рдг рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рд╕рдЪреНрдЪрд╛рдИ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрдпрд╛рдордд / emacs рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ рдФрд░ рдмрдореБрд╢реНрдХрд┐рд▓ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП emacs-jupyter, рд▓реЗрдХрд┐рди рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ emacs-jupyter рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрддреНрддрд░ рдХрд╛рдлреА рдмреЗрд╣рддрд░ рд╣реИ, рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдСрдЯреЛ-рдкреВрд░реНрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрди-рдмрдлрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рдЖрджрд┐ред ред
рдпрд╣ рд╕рдм рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ emacs-jupyter рдЗрд╕рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ?
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореБрдЭреЗ рдмрд╣реБрдд рд╕реАрдорд┐рдд рдЬреНрдЮрд╛рди рд╣реИ, рдлрд┐рд░ рднреА рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдорджрдж рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдБред
рдЗрд╕ рдмреАрдЪ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреА рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛:
(use-package! jupyter
:defer t
:init
(map! :after python
:map python-mode-map
:localleader
(:prefix ("j" . "jupyter")
:desc "Run REPL" "o" #'jupyter-run-repl
:desc "Eval funciton" "f" #'jupyter-eval-defun
:desc "Eval buffer" "b" #'jupyter-eval-buffer
:desc "Eval region" "r" #'jupyter-eval-region
:desc "Restart REPL" "R" #'jupyter-repl-restart-kernel
:desc "Interrupt REPL" "i" #'jupyter-repl-interrup-kernel
:desc "Scratch buffer" "s" #'jupyter-repl-scratch-buffer
:desc "Remove overlays" "O" #'jupyter-eval-remove-overlays
:desc "Eval string" "w" #'jupyter-eval-string
:desc "Inspect at point" "d" #'jupyter-inspect-at-point
)))
рдлрд┐рд▓рд╣рд╛рд▓, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХреЗрд╡рд▓ рдСрд░реНрдЧрдореЛрдб рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдЯреВрдЯрд╛ рд╣реБрдЖ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред
@pmercatoris рдСрд░реНрдЧрди-рдмрд╛рдмреЗрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреНрдпреВрдкрд┐рдЯрд░ рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рд╕реЗрдЯрд┐рдВрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИред Emacs-jupyter рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рднрд╛рд╖рд╛ python
(рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдЬреЛ рд╣рдо jupyter рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ) рдХреЛ jupyter
рд╕реЗ рдкрд╣рд▓реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
(org-babel-do-load-languages
'org-babel-load-languages
'((shell . t)
(emacs-lisp . t)
(python . t)
(jupyter . t)))
рдореИрдВ рджреВрд╕рд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ emacs-jupyter рдХреЛ doom emacs рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдХреАрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдзрдиреНрдпрд╡рд╛рджред рд╕рднреА рдореВрд▓реНрдпрд╛рдВрдХрди рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд░реНрддрдорд╛рди рдХрдпрд╛рдордд gr
рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рдХреНрд░реЙрд╕ рдХрдпрд╛рдордд рдЙрддреНрддрд░ рд╣реЛрдЧрд╛ред
@pmercatoris рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ 17d0833 рдЖрдкрдХрд╛ рдореБрджреНрджрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рдЕрдЧрд░ рд╡рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рджреЗрдЦреЗрдВ рдХрд┐ +org-babel-load-jupyter-h
рдЬреНрдпрд╛рджрд╛ рд╣реЛ рддреЛ рдорджрдж рдорд┐рд▓рддреА рд╣реИ:
(defun +org-babel-load-jupyter-h (lang)
(and (string-prefix-p "jupyter-" (symbol-name lang))
(require 'ob-python)
(require lang nil t)))
@randomizedthinking рдХреГрдкрдпрд╛ org-babel-do-load-languages
рдмрд┐рдирд╛ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдБред рдЗрд╕реЗ 3b2a37d9a рдореЗрдВ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдбреВрдо рдХреЗ рдЖрд▓рд╕реА рд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддрд╛ рд╣реИред
@ рд╣рд┐рд▓рд╕рдирд░ рдХреЛ рди рддреЛ 17d0833 рдФрд░ рди рд╣реА рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХрд╛рдо рд▓рдЧрддреА рд╣реИред
рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ: рд╕реНрд░реЛрдд рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде org-babel-execute-src-block: No org-babel-execute function for jupyter-python!
рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ .doom.d / config.el рдореЗрдВ рдЬреЛрдбрд╝рд╛, рдФрд░ рдЕрдм рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! :)
(add-hook! '+org-babel-load-functions
(defun +org-babel-load-jupyter-h (lang)
(and (string-prefix-p "jupyter-" (symbol-name lang))
(require 'ob-jupyter)
(require lang nil t))))
рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрд░реЛрдд рдмреНрд▓реЙрдХ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкрд╣рд▓реА рдмрд╛рд░ рдлрд╛рдЗрд▓ рдХрд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдПрдХ рд╕реНрд░реЛрдд рдмреНрд▓реЙрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЗрд░рд╛рджрд╛ рд╣реИ?
рдорд╣рд╛рди, рдореИрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ + рдЬреНрдпреВрдкрд┐рдЯрд░ рд╕рдмрдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рдж рдЬрдм рд╣рдо рдЖрдкрдХреЗ рдмреНрд▓реЙрдХ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдЗрд╢реВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ (рдЬрд┐рд╕рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреНрд▓реЙрдХ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд▓рд╕реА рд▓реЛрдбрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреНрдпреВрдкрд┐рдЯрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдмреЗрдмреАрдмреЛрд░реНрдб рдкреНрд▓рдЧрдЗрди рд╣реИ)ред
рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрдкрдиреЗ config.el рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ:
(after! org
(defadvice! +org--src-lazy-load-library-a (lang)
"Lazy load a babel package to ensure syntax highlighting."
:before #'org-src--get-lang-mode
(unless (cdr (assoc lang org-src-lang-modes))
(or (run-hook-with-args-until-success '+org-babel-load-functions lang)
(require (intern-soft (format "ob-%s" lang)) nil t)
(require lang nil t)))))
рдареАрдХред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд░рдЦрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреА рдкрд╣рд▓реА рдпрд╛рддреНрд░рд╛ рдкрд░ рдХреИрд╕реЗ рд╣реИ
рд╕реЗрд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдлрд┐рд░ рд╕реЗ рднреЗрдЬреЗрдВ:
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рдЖрдЬрд╝рдорд╛рдпрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рд╣реА рд╕рдордп рдмрд╛рдж рдЗрд╕реЗ рд╕реБрдзрд╛рд░ рд▓рд┐рдпрд╛ред
рд╣рд╛рдБ, рдЕрджреНрдпрддрди рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд╕рд╛рдеред рдпрд╣рд╛рдБ рдореЗрд░рд╛ config.el рд╣реИ:
;;; .doom.d/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here
;;
(setq python-shell-interpreter "ipython"
python-shell-interpreter-args "--simple-prompt -i")
(after! org
(defadvice! +org--src-lazy-load-library-a (lang)
"Lazy load a babel package to ensure syntax highlighting."
:before #'org-src--get-lang-mode
(unless (cdr (assoc lang org-src-lang-modes))
(or (run-hook-with-args-until-success '+org-babel-load-functions lang)
(require (intern-soft (format "ob-%s" lang)) nil t)
(require lang nil t)))))
(add-hook! '+org-babel-load-functions
(defun +org-babel-load-jupyter-h (lang)
(and (string-prefix-p "jupyter-" (symbol-name lang))
(require 'ob-jupyter)
(require lang nil t))))
;; Select window between frames
(after! ace-window
(setq aw-scope 'global))
;;;
;;; Keybinds
(setq doom-localleader-key ",")
(use-package! jupyter
:defer t
:init
(map! :after python
:map python-mode-map
:localleader
(:prefix ("j" . "jupyter")
:desc "Run REPL" "o" #'jupyter-run-repl
:desc "Eval funciton" "f" #'jupyter-eval-defun
:desc "Eval buffer" "b" #'jupyter-eval-buffer
:desc "Eval region" "r" #'jupyter-eval-region
:desc "Restart REPL" "R" #'jupyter-repl-restart-kernel
:desc "Interrupt REPL" "i" #'jupyter-repl-interrupt-kernel
:desc "Scratch buffer" "s" #'jupyter-repl-scratch-buffer
:desc "Remove overlays" "O" #'jupyter-eval-remove-overlays
:desc "Eval string" "w" #'jupyter-eval-string-command
:desc "Inspect at point" "d" #'jupyter-inspect-at-point
:desc "Associate buffer REPL" "B" #'jupyter-repl-associate-buffer
)))
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде, +org-babel-load-jupyter-h
рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
(defun +org-babel-load-jupyter-h (lang)
(and (string-prefix-p "jupyter-" (symbol-name lang))
(require (intern
(format "ob-%s"
(string-remove-prefix "jupyter-" (symbol-name lang))))
nil t)
(require 'ob-jupyter nil t)
(require lang nil t)))
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЬреБрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрд░реЛрдд рдмреНрд▓реЙрдХ рдХреЗрд╡рд▓ 2 x Cc, Cc рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ
рдкрд╣рд▓реА рдмрд╛рд░ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ:
executing Jupyter-Python code block...
org-babel-jupyter-session-key: Need a valid session and a kernel to form a key
рдФрд░ рджреВрд╕рд░реА рдмрд╛рд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
executing Jupyter-Python code block...
Starting python3 kernel process...done
Requesting kernel info...done
Code block evaluation complete. [2 times]
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ред
рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл a948ca рдореЗрдВ рдЬреНрдпреВрдкрд┐рдЯрд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрдзрд╛рд░ рд▓рд┐рдЦреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдореИрдВрдиреЗ рдЕрдм рддрдХ +org-babel-load-functions
рдФрд░ +org--src-lazy-load-library-a
рд╕реБрдЭрд╛рд╡ рджрд┐рдП рд╣реИрдВ)ред
рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА, рдЗрд╕рд▓рд┐рдП рд╕реНрд░реЛрдд рдмреНрд▓реЙрдХ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЕрдм config.el рдкрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрд╢реЛрдзрди рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд░рд╣рддреА рд╣реИред
рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЬреНрдпреВрдкрд┐рдЯрд░ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ _one_ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдФрд░ рдХрдмред рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдЬреБрдкрд┐рдЯрд░ рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реЛрддрд╛ рддреЛ рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реЛрддрд╛ред рд╢рд╛рдпрдж рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдХреНрд╕ рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдХрд┐рд╕реА рднреА рддрд░рд╣, рдЖрдк рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
(defadvice! oh-god-please-fix-jupyter-please-oh-please (lang)
:override #'+org-babel-load-jupyter-h
(when (string-prefix-p "jupyter-" (symbol-name lang))
(let ((lang (string-remove-prefix "jupyter-" (symbol-name lang))))
(unless (assoc lang org-src-lang-modes)
(require (intern (format "ob-%s" lang))
nil t)))
(with-demoted-errors "Jupyter: %s"
(require 'jupyter nil t)
(require lang nil t)
(require 'ob-jupyter nil t))))
oh-god-please-fix-jupyter-please-oh-please
haha doesn't рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрдЧрддрд┐ рд▓рдЧрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ :-(
рдирд┐рдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдкрддрд╛, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЗрд╕реЗ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдзреНрдпрд╛рди рджреЗрдВ, рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЬреБрдкрд┐рдЯрд░ рдХреЛ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЪрд░ рдЬреИрд╕реЗ рдХрд┐ org-src-lang-mode рдФрд░ org-babel-tangle-lang-exts рдЬреИрд╕реЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред Ob-jupyter рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, jupyter-LANG рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдирдП рд╕реНрд░реЛрдд рдХреЛрдб рдмреНрд▓реЙрдХ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗред LANG рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкрд╛рдИ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд░реНрдиреЗрд▓ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред рджреЗрдЦреЗрдВ
рдХреНрдпрд╛ рдЗрд╕реЗ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдпрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ +org-babel-load-jupyter-h
рд╕рд╛рде рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рдФрд░ рдХреЛрд╢рд┐рд╢ рджреЗрддреЗ рд╣реИрдВ:
(defadvice! oh-god-please-fix-jupyter-please-oh-please (lang)
:override #'+org-babel-load-jupyter-h
(when (string-prefix-p "jupyter-" (symbol-name lang))
(let* ((lang-name (symbol-name lang))
(lang-tail (string-remove-prefix "jupyter-" lang-name)))
(and (not (assoc lang-tail org-src-lang-modes))
(require (intern (format "ob-%s" lang-tail))
nil t)
(add-to-list 'org-src-lang-modes (cons lang-name (intern lang-tail)))))
(with-demoted-errors "Jupyter: %s"
(require lang nil t)
(require 'ob-jupyter nil t))))
рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХреЗрд╡рд▓ рдЧреВрдВрдЧрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдВрдЧреЗ:
(after! ob-jupyter
(dolist (lang '(python julia R))
(cl-pushnew (cons (format "jupyter-%s" lang) lang)
org-src-lang-modes :key #'car)))
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдкрдбрд╝реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЬреНрдпреВрдкрд┐рдЯрд░ рдЕрдзрд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЧреВрдВрдЧрд╛ рд╕рдорд╛рдзрд╛рди рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ org-edit-special
рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ:
org-edit-src-code: No such language mode: jupyter-python-mode
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдореИрдВ рдХрдпрд╛рдордд рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдирдпрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рдж doom refresh
рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
рдУрд╣, рдЙрдлрд╝ред рддреБрдо рдореЗрд░реЗ рдЧреВрдВрдЧрд╛ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрд╛ (after! org-src ...)
рдХреЗ рдмрдЬрд╛рдп (after! ob-jupyter ...)
?
рдореИрдВ рдХреНрдпрд╛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБ рд╕реЗ рд╕рднреА рдХрд╛рдо !! : рдбреА
рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ, рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдкрд╛рджрдиред рддреЛ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ :)
рдзрдиреНрдпрд╡рд╛рдж!!
рдирдорд╕реНрддреЗ! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдХреБрдЫ рдиреЗ Jupyter рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд░-рдСрд░реНрдЧрди рдореЛрдб рдореЗрдВ R рд╕рдкреЛрд░реНрдЯ рдХреЛ рддреЛрдбрд╝рд╛ рд╣реЛрдЧрд╛ред рдЬреНрдпреВрдкрд┐рдЯрд░-рдкрд╛рдЗрдерди рдмреНрд▓реЙрдХ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рд▓реЗрдХрд┐рди рдЬреБрдкрд┐рдЯрд░-рдЖрд░ рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:
рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд▓рд╛рд╣?
@mbosley https://github.com/hlissner/doom-emacs/pull/2477 рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЗ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░ рджреЗрдЧрд╛ред
рдЗрд╕ рдмреАрдЪ, рдореИрдВ рдУрдкреА рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ред