λ¬΄μ¨ μΌμ΄ μΌμ΄λκΈ°λ₯Ό κΈ°λ νμ΅λκΉ?
κ²°κ³Ό μΉμ
μμ μμ€ λΈλ‘μ μΆλ ₯μ μ°Έμ‘°νμμμ€.
μ€μ λ‘ λ¬΄μ¨ μΌμ΄ μΌμ΄ λ¬μ΅λκΉ?
μ²μμλ μ¬λ°λ₯΄κ² μΆλ ₯νμ§λ§ ob-async μ½λλ₯Ό μΆλ ₯ν©λλ€.
μΆκ° μΈλΆ μ¬ν:
μ μΆμ :
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)
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μ μ체 μ§μ° λ‘λ© λ©μ»€λμ¦κ³Ό μ€λ³΅λ©λλ€. λ¬Έμ λ₯Ό ν΄κ²°ν μ μλμ§ νμ€νμ§ μμ§λ§ κ·Έλ΄ μλ μμ΅λλ€.
κ·Έλ μ§ μμΌλ©΄ jupyter ν¨ν€μ§μμ :lang (org +ipython)
λμ μ ν ν΄λ³΄μμμ€. jupyter emacs ν¨ν€μ§κ° λΉνμ€μ μΈ μμ
μ μννκ³ μμ κ°λ₯μ±μ΄ μμ΅λλ€.
λν :async yes
λλ :async no
λ₯Ό src λΈλ‘μ μΆκ°νκ³ μ°¨μ΄κ° μλμ§ νμΈνμμμ€.
ob-ipythonμ λ¬Έμ λ + condaλ‘ νμ±ν λ νκ²½μ μ¬μ©ν μ μλ€λ κ²μ λλ€. λν ob-ipythonμ μ§μμ μμ΄λ²λ¦° κ² κ°μ΅λλ€.
κΈ°λ³Έμ μΌλ‘ conda νκ²½μ μ νν μ μκ³ R λ° μ격 컀λμ μ¬μ©ν κ°λ₯μ±λ μμΌλ―λ‘ emacs-jupyterλ₯Ό μ¬μ©ν΄λ³΄κ³ μΆμμ΅λλ€.
org-babel-do-load-languages
κ° μλ κ²½μ° jupyterλ₯Ό org babelμ μΆκ°νλ €λ©΄ μ΄λ»κ²ν΄μΌν©λκΉ?
emacs-jupyter
λ ob-async
μ¬μ©νμ§ μμ΅λλ€. jupyterκ° μ λλ‘ μλνλ €λ©΄ λ€μ μ€μ μ΄ νμν©λλ€.
(setq ob-async-no-async-languages-alist
'("jupyter-python"))
ob-async-no-async-languages-alist
λ° +org-babel-load-functions
λ₯Ό) μ€μ νλ :lang org
+jupyter
κΈ°λ₯μ μΆκ°νμ΅λλ€. λ¬Έμ κ° ν΄κ²°λλμ§ μλ €μ£ΌμΈμ.
λμμ μ£Όμ @randomizedthinking κ³Ό @hlissner μκ² κ°μ¬λ립λλ€.
.doom.d/init.el, it seems babel does not pick up that language:
org-babel-execute-src-blockμ μ‘°μ§ κ΅¬μ±μ +jupyter
μ μΆκ° ν ν : jupyter-pythonμ λν org-babel-execute ν¨μκ° μμ΅λλ€!`
λν emacs-jupyterλ νμ΄μ¬ νμΌμ μ§μ 볡μ λ‘ μ¬μ©ν μ μμ΅λλ€. ob-ipythonκ³Ό κ°μ μ‘°μ§ λͺ¨λμμ ν΅ν©μ΄ μλλλ€. μ¬μ€μ λ§μ λ리면 μ λ doom / emacsλ₯Ό μ²μ μ νκ³ emacs-jupyterλ₯Ό κ±°μ μ¬μ©νμ§ μμμ§λ§ emacs-jupyterκ° μ 곡νλ replμ΄ λ§€μ° μ°μνμ¬ κ°λ ₯ν μλ μμ±, λ²νΌ λ΄ μ΄λ―Έμ§ μ§μ λ±μ μ 곡νλ€λ κ²μ μ μμμμ΅λλ€. .
μ΄ λͺ¨λ μ§λ¬Έμ λν΄ 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
)))
νμ¬λ‘μλ μ μλνλ κ² κ°μ΅λλ€.
orgmodeμμ ν΅ν© λ§ μμλ κ² κ°μ΅λλ€.
@pmercatoris jupyterκ° org-babelμμ μλνλλ‘νλ €λ©΄ νμ¬ μ€μ μ λ€μκ³Ό κ°μ΅λλ€. 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 νλ μ μν¬μ ν΅ν©λλ©΄ μ’μ κ²μ λλ€.
λν ν€ λ°μΈλ©μ 곡μ ν΄ μ£Όμ
μ κ°μ¬ν©λλ€. λͺ¨λ νκ° κΈ°λ₯μ λν΄ νμ¬ doom gr
μ°μ°μλ₯Ό μ¬μ©ν μ μμ΅λλ€. μ΄λ μΌκ΄λ cross doom replμ
λλ€.
@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μμλ μ΄λ€ κ²½μ°μλ Doomμ μ§μ° λ‘λλ₯Ό λ°©ν΄νκΈ° λλ¬Έμ λΉνμ±νλμμ΅λλ€.
@hlissner 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))))
μ μΌν κ²μ νμΌμ μ²μ λ°©λ¬Έ ν λ μμ€ λΈλ‘ κ°μ‘° νμκ°λ‘λλμ§ μλλ€λ κ²μ λλ€. μμ€ λΈλ‘μ μ€ν ν ν λ€μ λ°©λ¬Έν΄μΌν©λλ€. μλ λ 건κ°μ?
μ’μ΅λλ€. λΈλ‘ κ°μ‘° νμ λ¬Έμ λ₯Ό νμ ν ν + jupyter νμ λͺ¨λμ μΆκ°νκ² μ΅λλ€ (μλλμ§ μμ λΈλ‘ κ°μ‘° νμλ₯Όμν μ§μ° λ‘λκ° μμ§λ§ jupyterλ λ§€μ° λΉμ μμ μΌλ‘ ꡬ쑰ν λ babel νλ¬κ·ΈμΈμ λλ€).
μ΄κ²μ 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]
λΉλ‘ κ·Έκ²μ΄ μ¬λ°λ₯Έ νλμΌμ§λ λͺ¨λ₯΄μ§λ§, λλ κ·Έκ²μ μΈκΈ ν κ²μ΄λΌκ³ μκ°νμ΅λλ€.
λ°©κΈ af948caμμ jupyterμ λν κ°μ μ¬νμ μμ±νμ΅λλ€. μ
λ°μ΄νΈνμ¬ λ¬Έμ κ° ν΄κ²°λλμ§ μλ €μ£ΌμΈμ (κ·Έλ¦¬κ³ μ§κΈκΉμ§ μ 곡 ν +org-babel-load-functions
λ° +org--src-lazy-load-library-a
μ μ μ¬ν μμ ).
μλ²½νλ―λ‘ μμ€ λΈλ‘μ μ€νμ μ΄μ config.elμ μμ νμ§ μκ³ μλν©λλ€.
κ·Έλ¬λ κ°μ‘° νμ λ¬Έμ λ κ³μλ©λλ€.
μμ ν΄μ£Όμ μ κ°μ¬ν©λλ€.
λλ μ°λ¦¬κ° jupyterμ λΌμ΄λΈλ¬λ¦¬ μ€ _one_μλ‘λν΄μΌνλ€λ κ²μ μκ³ μμ§λ§, μ΄λ κ²μ΄ μΈμ μΈμ§ λͺ¨λ₯΄κ² λ€. ν μ€νΈ ν jupyter νκ²½μ΄ μλ€λ©΄ ν¨μ¬ λ λΉ λ₯Ό κ²μ λλ€. μλ§λ κ° λͺ¨λμ ν μ€νΈλ₯Όμν μ΅μ μ€ν κ°λ₯ν νκ²½μ μ€μ νκΈ° μν΄ nix νμΌμ ν¬ν¨ν΄μΌν©λλ€.
μ΄μ¨λ , μ΄κ²μ μλν΄ λ³Ό μ μμ΅λκΉ?
(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λ μ¬μ ν λκ°μ νλμ μ·¨νκΈ° λλ¬Έμ λ§μ compationμ΄μλ κ² κ°μ΅λλ€ :-(
Nixμ λν΄ μ무κ²λ λͺ¨λ₯΄μ§λ§ νμ€ν μ’μ κΈ°λ₯μ²λΌ λ€λ¦½λλ€.
μ΄ λκΈμ μ°κ²°λ μ μμ΅λκΉ?
jupyterλ org-src-lang-modes λ° org-babel-tangle-lang-extsμ κ°μ λ³μμ κ°μ λ°λΌ λ¬λΌ μ§λ―λ‘ μΈμ΄λ₯Όλ‘λ ν λ λ§μ§λ§ μμλ‘ μΆκ°ν΄μΌν©λλ€. ob-jupyterκ°λ‘λλλ©΄ μ΄λ¦μ΄ jupyter-LANG νμ μΈ μ μμ€ μ½λ λΈλ‘μ μ¬μ©ν μ μμ΅λλ€. LANGμ μμ€ν μμλ 컀λ μΈμ΄ μ€ νλ μΌ μ μμ΅λλ€. jupyter-available-kernelspecsλ₯Ό μ°Έμ‘°νμμμ€. (https://github.com/dzop/emacs-jupyter#org-mode-source-blocks)
μ΄ λκΈμ μ°κ²°λ μ μμ΅λκΉ?
νμ§λ§ +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)))
λλ μ΄κ²μ΄ ν¨κ³Όκ° μλ€λ κ²μ μκ³ μμ§λ§ jupyterκ° λ λ§μ μΈμ΄λ₯Ό λμ ν¨μ λ°λΌμ΄ λͺ©λ‘μ νμ₯νλ €λ©΄ μ¬λλ€μκ² μμ‘΄ν΄μΌ ν κ²μ λλ€.
λ°λΌμ λ©μ²ν μ루μ
μ‘°μ°¨λ κ°μ‘° νμμ ν¨κ³Όκ° μμ΅λλ€. κ·Έλ¬λ λ μ€μν κ²μ org-edit-special
κ° λ€μμ λ°ννλ―λ‘ μλνμ§ μλ κ² κ°μ΅λλ€.
org-edit-src-code: No such language mode: jupyter-python-mode
λλ λ΄κ° νλ©Έμ λ§€μ° μ΅μνλ€κ³ λ§νλ―μ΄ λͺ¨λ κ²μ μ¬λ°λ₯΄κ² μλνμ§λ§ λ³κ²½ ν doom refresh
λ₯Ό μννκΈ°λ₯Ό λ°λλλ€.
μ€, μ΄λ°. λ€μ λ΄ λ°λ³΄ κ°μ μ루μ
μ μλ ν μ (after! org-src ...)
λμ (after! ob-jupyter ...)
?
λ΄κ° λ³Ό μμλ κ²μμ λͺ¨λ μΌνλ κ² !! :λ
νμ΄λΌμ΄νΈ, λΈλ‘ μ€ν λ° νΉμ νΈμ§. κ·Έλμ λλ λΉμ μ΄ ν΄κ²°μ± μ λν΄ μ΄λ»κ² μκ°νλμ§ μ λͺ¨λ₯΄κ² μ§λ§ κ·Έκ²μ΄ ν¨κ³Όκ° μλ€λ κ²μ λ§€μ° κΈ°μ©λλ€. :)
κ°μ¬ν©λλ€!!
μλ
νμΈμ! μ¬κΈ°μ Jupyter νλ¬κ·ΈμΈμ μ¬μ©νλ μ‘°μ§ λͺ¨λμμ R μ§μμ΄ μ€λ¨λμμ μ μμ΅λλ€. jupyter-python λΈλ‘ μ€νμ΄ μ μλν©λλ€.
κ·Έλ¬λ jupyter-R λΈλ‘μ μ€νμ λ€μμ μννμ§ μμ΅λλ€.
μ§ν λ°©λ²μ λν μ‘°μΈμ΄ μμ΅λκΉ?
@mbosley https://github.com/hlissner/doom-emacs/pull/2477λ‘ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
κ·Έλμ OP λ¬Έμ κ° ν΄κ²°λμμΌλ―λ‘μ΄ μ€λ λλ₯Ό λ«κ² μ΅λλ€.