Skip to content

Instantly share code, notes, and snippets.

@masatoi
Created June 25, 2018 09:56
Show Gist options
  • Select an option

  • Save masatoi/7669826ca093547537542a65377f73e4 to your computer and use it in GitHub Desktop.

Select an option

Save masatoi/7669826ca093547537542a65377f73e4 to your computer and use it in GitHub Desktop.
((最近知った(ものを含む))SLIMEの便利機能)

((最近知った(ものを含む))SLIMEの便利機能)

SLIMEとは

EmacsからリモートのSwankサーバに繋ぐ

  • サーバマシンでSwankサーバを起動する
(require 'swank)
(swank:create-server :port 4005)
  • リモートマシンからSwankサーバに接続する

SSHトンネリングする場合

ssh -L 4005:localhost:4005 user:example.host.com
  • Emacsから接続(ホストとポートを聞かれる)
M-x slime-connect

インスペクタ

  • REPLで評価結果にカーソルを合わせて
M-x slime-inspect-presentation-at-point
  • データ構造も潜れる(リスト、配列、構造体、クラスオブジェクト、ハッシュ表など)
    • 要素にポイントして Enter
    • 戻る: l
    • 進む: n
    • 抜ける: q
  • 多値の例
(dex:get "http://www.google.com")

インスペクタからソースコードを探す

  • オブジェクトを評価してインスペクタを起動
  • インスペクタ内で一番上の行をポイントして . (ドット)

関数オブジェクトの例

#'dex:get

CLOSオブジェクトの例

(local-time:now)

インスペクタからオブジェクトを取り出す

  • インスペクタ内でオブジェクトをポイントした状態で M-RET
    • REPLから * でアクセスできる
(plump:parse (dex:get "http://www.google.com/"))

デバッガ内でもインスペクトできる

  • オブジェクトにカーソルを当てて i
  • デバッガ内で : でその環境で式を評価できる
  • 値の差し替えはできない?
@g000001
Copy link
Copy Markdown

g000001 commented Jun 25, 2018

値の差し替えはできない?

(defclass foo () ((a :initform 0)))

(defun foo ()
  (let ((obj (make-instance 'foo)))
    (break)
    obj))


cl-user> (foo) ;breakする
#<foo 422069D4F3>
cl-user> (slot-value * 'a)
24
#<foo 422069D4F3>
--------------------
Class: #<standard-class foo 4220687AE3>
--------------------
 Group slots by inheritance [ ]
 Sort slots alphabetically  [X]

All Slots:
[X]  a = 24

[set value]  [make unbound]

みたいな感じでできてますね(手元のLispWorksでは)

ちなみにレキシカル変数の書き換えは処理系によって方法がちがったりするとは思いました

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment