Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs 为Clojure模式的选项卡添加新功能_Emacs_Clojure_Tabs - Fatal编程技术网

Emacs 为Clojure模式的选项卡添加新功能

Emacs 为Clojure模式的选项卡添加新功能,emacs,clojure,tabs,Emacs,Clojure,Tabs,我知道TAB想在Emacs中变得聪明。然而,它不够聪明,不适合我的口味。因为它是“聪明的”,所以它的扩展似乎很复杂 我希望Clojure模式下的TAB完全按照它的行为来操作,但位于第0列的defn、defmacro等的第一个括号中时除外 当它出现时,我希望它调用hs-toggle隐藏hs-minor模式 然而,我越来越疯狂地试图让它工作 我首先尝试修改分配给TAB的快捷方式,这样,当仅在Clojure模式下时,它将首先调用我的函数,然后调用indent for TAB命令,但更改TAB快捷方式似

我知道TAB想在Emacs中变得聪明。然而,它不够聪明,不适合我的口味。因为它是“聪明的”,所以它的扩展似乎很复杂

我希望Clojure模式下的TAB完全按照它的行为来操作,但位于第0列的
defn、defmacro
等的第一个括号中时除外

当它出现时,我希望它调用hs-toggle隐藏hs-minor模式

然而,我越来越疯狂地试图让它工作

我首先尝试修改分配给TAB的快捷方式,这样,当仅在Clojure模式下时,它将首先调用我的函数,然后调用indent for TAB命令,但更改TAB快捷方式似乎非常复杂。由于Emacs已经计划在lisp缩进函数中注册模式的TAB函数,我希望修改clojure缩进函数,它说:

(defun clojure-indent-function (indent-point state)
  "This function is the normal value of the variable `lisp-indent-function'.
但是,显然只有当光标位于函数内部时才调用此函数。当光标位于的第一个“(”上时,例如“(defn…”)

在Clojure模式下,当指向括号中的第0列时,如何让选项卡调用
hs toggle hiding


我不希望这影响组织模式或任何其他模式。只需Clojure模式。

一般答案是:

(eval-after-load 'clojure-mode
  '(define-key clojure-mode-map [tab] 'my-tab-command))
以及定义,如您所述:

(defun my-tab-command (&optional arg)
  (interactive "P")
  (if (and (zerop (current-column)) (eq (char-after) ?\())
      (hs-toggle-hiding)
    (indent-for-tab-command arg)))

一般的答案是:

(eval-after-load 'clojure-mode
  '(define-key clojure-mode-map [tab] 'my-tab-command))
以及定义,如您所述:

(defun my-tab-command (&optional arg)
  (interactive "P")
  (if (and (zerop (current-column)) (eq (char-after) ?\())
      (hs-toggle-hiding)
    (indent-for-tab-command arg)))

clojure缩进函数
lisp缩进函数
的一个实现,它不应该缩进,而是计算缩进。任何对可能的缩进感兴趣的代码都可以随时调用它,因此我们当然不想将我们所需的制表符行为挂接到这里

鉴于TAB的智能性可能不是您在某个有趣的时刻想要的,因此最好重新绑定
TAB
,将我们的逻辑置于所有可能的智能性之前:

(defun clojure-hs-tab (arg)
  (interactive "P")
  (if (and (<= (current-column) 1)
           (save-excursion
             (beginning-of-line)
             (looking-at "\(")))
      (hs-toggle-hiding)
    (indent-for-tab-command arg)))

(define-key clojure-mode-map (kbd "TAB") 'clojure-hs-tab)    
(定义clojure hs选项卡(arg)
(交互式“P”)

(如果(and(
lisp indent function
的一个实现,它不是用来缩进的,而是用来计算缩进的。任何对可能的缩进感兴趣的代码都可以随时调用它,所以我们当然不想将我们想要的制表符行为挂接到这个位置

鉴于TAB的智能性可能不是您在某个有趣的时刻想要的,因此最好重新绑定
TAB
,将我们的逻辑置于所有可能的智能性之前:

(defun clojure-hs-tab (arg)
  (interactive "P")
  (if (and (<= (current-column) 1)
           (save-excursion
             (beginning-of-line)
             (looking-at "\(")))
      (hs-toggle-hiding)
    (indent-for-tab-command arg)))

(define-key clojure-mode-map (kbd "TAB") 'clojure-hs-tab)    
(定义clojure hs选项卡(arg)
(交互式“P”)

(如果(和(在
M-x描述模式下
TAB
绑定到了什么?
M-x描述模式下
TAB
绑定到了什么?
M-x描述模式下
绑定到了什么?
?哦,非常感谢。这对我来说是全新的,令人惊讶:在Emacs中似乎有无数种方法可以做事情,所以开始时不总是很容易找到开始的地方:)哦,非常感谢。这对我来说是全新的,而且令人惊讶:在Emacs中似乎有无数种方法可以做事情,所以在开始的时候不总是很容易找到开始的地方:)