Rewrite ein-kernelinfo.el using eieio

This commit is contained in:
Takafumi Arakaki 2012-08-26 15:35:10 +02:00
parent f83623ace6
commit bea782380a

View file

@ -26,40 +26,36 @@
;;; Code:
(require 'ein-kernel)
(require 'eieio)
(defstruct ein:$kernelinfo
"Info related (but unimportant) to kernel
`ein:$kernelinfo-kernel'
Kernel instance.
`ein:$kernelinfo-buffer'
Notebook buffer that the kernel associated with.
`ein:$kernelinfo-hostname'
Host name of the machine where the kernel is running on.
`ein:$kernelinfo-ccwd'
cached CWD (last time checked CWD)."
kernel
buffer
hostname
ccwd)
(defclass ein:kernelinfo ()
((kernel
:initarg :kernel :type ein:$kernel
:documentation "Kernel instance.")
(buffer
:initarg :buffer
:documentation "Notebook buffer that the kernel associated with.")
(hostname
:initarg :hostname :type string
:documentation "Host name of the machine where the kernel is running on.")
(ccwd
:initarg :ccwd :type string
:documentation "cached CWD (last time checked CWD)."))
:documentation "Info related (but unimportant) to kernel")
(defun ein:kernelinfo-setup (kernel buffer)
(let ((kerinfo (make-ein:$kernelinfo)))
(setf (ein:$kernelinfo-kernel kerinfo) kernel)
(let ((kerinfo (make-instance 'ein:kernelinfo)))
(oset kerinfo :kernel kernel)
(ein:kernelinfo-setup-hooks kerinfo)
(ein:kernelinfo-init kerinfo buffer)
kerinfo))
(defun ein:kernelinfo-init (kerinfo buffer)
(setf (ein:$kernelinfo-buffer kerinfo) buffer))
(oset kerinfo :buffer buffer))
(defun ein:kernelinfo-setup-hooks (kerinfo)
"Add `ein:kernelinfo-update-*' to `ein:$kernel-after-*-hook'."
(let ((kernel (ein:$kernelinfo-kernel kerinfo)))
(with-slots (kernel) kerinfo
(push (cons #'ein:kernelinfo-update-all kerinfo)
(ein:$kernel-after-start-hook kernel))
(push (cons #'ein:kernelinfo-update-ccwd kerinfo)
@ -68,7 +64,7 @@
(defun ein:kernelinfo-update-all (kerinfo)
(ein:log 'debug "EIN:KERNELINFO-UPDATE-ALL")
(ein:log 'debug "(ein:kernel-live-p kernel) = %S"
(ein:kernel-live-p (ein:$kernelinfo-kernel kerinfo)))
(ein:kernel-live-p (oref kerinfo :kernel)))
(ein:kernelinfo-update-ccwd kerinfo)
(ein:kernelinfo-update-hostname kerinfo))
@ -76,27 +72,26 @@
"Update cached current working directory (CCWD) and change
`default-directory' of `ein:$kernelinfo-buffer'."
(ein:kernel-request-stream
(ein:$kernelinfo-kernel kerinfo)
(oref kerinfo :kernel)
"__import__('sys').stdout.write(__import__('os').getcwd())"
(lambda (cwd kernel kerinfo buffer)
(setq cwd (ein:kernel-filename-from-python kernel cwd))
(setf (ein:$kernelinfo-ccwd kerinfo) cwd)
(oset kerinfo :ccwd cwd)
;; sync buffer's `default-directory' with CWD
;; FIXME: Support multiple buffers.
(when (buffer-live-p buffer)
(with-current-buffer buffer
(when (file-accessible-directory-p cwd)
(setq default-directory (file-name-as-directory cwd))))))
(let ((kernel (ein:$kernelinfo-kernel kerinfo)))
(list kernel kerinfo (ein:$kernelinfo-buffer kerinfo)))))
(list (oref kerinfo :kernel) kerinfo (oref kerinfo :buffer))))
(defun ein:kernelinfo-update-hostname (kerinfo)
"Get hostname in which kernel is running and store it in KERINFO."
(ein:kernel-request-stream
(ein:$kernelinfo-kernel kerinfo)
(oref kerinfo :kernel)
"__import__('sys').stdout.write(__import__('os').uname()[1])"
(lambda (hostname kerinfo)
(setf (ein:$kernelinfo-hostname kerinfo) hostname))
(oset kerinfo :hostname hostname))
(list kerinfo)))