为啥 Slime 检查仅适用于鼠标单击而不适用于键盘命令?

Posted

技术标签:

【中文标题】为啥 Slime 检查仅适用于鼠标单击而不适用于键盘命令?【英文标题】:Why Slime inspect only works with mouse click and not with the keyboard command?为什么 Slime 检查仅适用于鼠标单击而不适用于键盘命令? 【发布时间】:2021-10-01 08:40:38 【问题描述】:

我正在使用 Emacs、Slime 和 Common Lisp (SBCL)。 Nyxt 只是 package 的名称。

在 SLIME 的 REPL 中,调用变量会检索以下表达式:

NYXT> history-entries-over-threshold

(#<HISTORY-ENTRY 10131F2903> #<HISTORY-ENTRY 10131F28D3>
 #<HISTORY-ENTRY 10131F28A3> #<HISTORY-ENTRY 10131F2873>
 #<HISTORY-ENTRY 10131F2843> #<HISTORY-ENTRY 10131F2813>
 #<HISTORY-ENTRY 10131F27E3> #<HISTORY-ENTRY 10131F27B3>
 #<HISTORY-ENTRY 10131F2783> #<HISTORY-ENTRY 10131F2753>
 #<HISTORY-ENTRY 10131F2723> #<HISTORY-ENTRY 10131F26F3>
 #<HISTORY-ENTRY 10131F26C3> #<HISTORY-ENTRY 10131F2693>
 #<HISTORY-ENTRY 10131F2633>)

我可以右键单击表达式的任何部分,菜单中会出现Inspect选项。然后,缓冲区显示元素列表,我可以检查每个元素。

尽管有鼠标的成功经验,我还是想用键盘。这似乎是可能的,因为 Slime 将命令 slime-repl-inspect 绑定到 C-c I。问题是它对我有用。

按下C-c I 后,提示缓冲区会询问预期的值。我插入了我用鼠标单击的值:

Inspect value (evaluated): (#<HISTORY-ENTRY 10131F2903> #<HISTORY-ENTRY 10131F28D3>
 #<HISTORY-ENTRY 10131F28A3> #<HISTORY-ENTRY 10131F2873>
 #<HISTORY-ENTRY 10131F2843> #<HISTORY-ENTRY 10131F2813>
 #<HISTORY-ENTRY 10131F27E3> #<HISTORY-ENTRY 10131F27B3>
 #<HISTORY-ENTRY 10131F2783> #<HISTORY-ENTRY 10131F2753>
 #<HISTORY-ENTRY 10131F2723> #<HISTORY-ENTRY 10131F26F3>
 #<HISTORY-ENTRY 10131F26C3> #<HISTORY-ENTRY 10131F2693>
 #<HISTORY-ENTRY 10131F2633>)

不幸的是,REPL 抛出了一个错误:

 illegal sharp macro character: #\<

  Line: 1, Column: 2, File-Position: 2

  Stream: #<SB-IMPL::STRING-INPUT-STREAM 100676A913>
   [Condition of type SB-INT:SIMPLE-READER-ERROR]

如何使用键盘实现与鼠标检查相同的结果?

【问题讨论】:

【参考方案1】:

实际上,提示缓冲区中的消息具有误导性,尤其是考虑到您在使用鼠标时单击该值。

为了使用键盘达到同样的效果,用户需要输入变量(不是值)。所以,按下C-c I后:

Inspect value (evaluated): history-entries-over-threshold

它可以工作,返回与鼠标相同的内省列表:

    #<CONS 1002A04127>
    --------------------
    A proper list:
    0: #<HISTORY-ENTRY 10131F2903>
    1: #<HISTORY-ENTRY 10131F28D3>
    2: #<HISTORY-ENTRY 10131F28A3>
    3: #<HISTORY-ENTRY 10131F2873>
    4: #<HISTORY-ENTRY 10131F2843>
    5: #<HISTORY-ENTRY 10131F2813>
    6: #<HISTORY-ENTRY 10131F27E3>
    7: #<HISTORY-ENTRY 10131F27B3>
    8: #<HISTORY-ENTRY 10131F2783>
    9: #<HISTORY-ENTRY 10131F2753>
    10: #<HISTORY-ENTRY 10131F2723>
    11: #<HISTORY-ENTRY 10131F26F3>
    12: #<HISTORY-ENTRY 10131F26C3>
    13: #<HISTORY-ENTRY 10131F2693>
    14: #<HISTORY-ENTRY 10131F2633>

【讨论】:

【参考方案2】:

此时有C-c C-v C-i查看演示文稿,无需再次输入值。您可以使用C-h b 查看活动键绑定,然后搜索inspect

【讨论】:

以上是关于为啥 Slime 检查仅适用于鼠标单击而不适用于键盘命令?的主要内容,如果未能解决你的问题,请参考以下文章

nodejs api仅适用于主机而不适用于其他设备

从 webview 内容复制和粘贴仅适用于键盘快捷键(不适用于鼠标或触摸)

onClick() 事件适用于一个 div,但不适用于另一个。为啥?

为啥 JQuery keydown 适用于窗口而不适用于文本框?

为啥装饰器模式适用于指针而不适用于引用?

为啥 Laravel 中间件适用于单个路由而不适用于一组路由