【问题标题】:Artist Mode Evil Integration艺术家模式邪恶整合
【发布时间】:2017-12-23 23:44:05
【问题描述】:

我正在尝试使用 evil-normal-mode 中的 j,h,k,l 键向左、向下、向上和向右移动,从而能够在 emacs picture-mode 中绘制 ascii 艺术。

为此,我使用了以下绑定:

(nmap :keymaps 'picture-mode-map "k" (lambda () (picture-movement-up) (picture-self-insert (string-to-char "."))) "j" (lambda () (picture-movement-down) (picture-self-insert (string-to-char "."))) "h" (lambda () (picture-movement-left) (picture-self-insert (string-to-char "."))) "l" (lambda () (picture-movement-right) (picture-self-insert (string-to-char "."))))

我期望的是单个插入 . 并使用相应的 picture-movement 函数更改运动。

但是,当我尝试这些绑定时,插入文本的方向是正确的,但一次插入了 46 个字符。而字符是我按下的键,而不是句号。

例如,当我按下l 时,我会立即得到llllllllllllllllllllllllllllllllllllllllllllll,而不是在我继续按下l 时逐渐连续的句号。

为什么我会出现这种行为,我该如何实现我的预期行为?

【问题讨论】:

    标签: emacs evil-mode


    【解决方案1】:

    ASCII 字符 . 具有整数值 46。picture-self-insert 函数将其参数作为计数与last-command-event 变量的值一起传递给picture-insert 函数。对于您的情况,这会导致插入 46 次 last-command-event 的值,这恰好是您按下的任何键。

    在您的 lambda 函数中,将 (picture-self-insert (string-to-char ".")) 替换为:

    (picture-insert ?. 1)
    

    这将执行 1 次 . 字符的插入。

    【讨论】:

    • 我注意到有一种异常行为。当我在一行的开头使用picture-insert 插入一个字符时,它会向前跳跃一定数量的空格。每次都不同。但似乎比上次插入​​的空格大 1。但是picture-self-insert 在行首插入了一个字符,正如我们所期望的那样。这可能超出了我的问题范围,但是您知道这是为什么吗?我删除了所有似乎与缩进相关的模式,但仍然会发生这种情况。
    • 这是因为在它调用picture-insert之前,picture-self-insert调用了picture-update-desired-column。您可以尝试在 picture-insert 调用之前以相同的方式调用它:(picture-update-desired-column (not (eq this-command last-command)))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 2017-02-19
    相关资源
    最近更新 更多