用sly-el-indent获得更好的Elisp缩进

你这个是误用了defun spec。defunspec定义在lisp-indent-defun-method里,默认是(4 &lambda &body) 也就是说第一个参数缩进4格,第二个参数按lambda-list缩进,其余参数按body缩进。除非你的宏真的是类似defun的宏,否则慎用。

这种混合keyword和forms的建议直接用(indent 0)然后写的时候参数全部另起一行写

Sly有sticker,差不多一个意思。

我要的是能获得 breakpoint 的 lexical environment,然后能在这个 environment 里面 eval code。sticker 说白了就是个 visual goodies,没提供新功能

那手动加break进debugger呢

一样沒有 lexical env eval。我说了 sticker 和手动加沒实质区別

哦,cl的debugger能eval但不是lexical

搜索了 ~/.emacs.d/elpa 下的包和 Emacs 内置的包,似乎“误用”的情况不少。

有时候参数跟函数/宏名写在一行看起来比较顺眼。

突然发现use-package用tagbody的缩进不错

(put 'use-package 'common-lisp-indent-function '(4 &rest lisp-indent-tagbody))

效果

(use-package helm
 :defer 1
 :after-call post-command-hook
 :init
   (setq helm-describe-function-function 'helpful-callable)
   (setq helm-inherit-input-method nil)
 :bind
   ([remap apropos] . helm-apropos)
   ([remap find-library] . helm-locate-library)
   ([remap bookmark-jump] . helm-bookmarks)
   ([remap execute-extended-command] . helm-M-x)
   ([remap find-file] . helm-find-files)
   ([remap imenu-anywhere] . helm-imenu-anywhere)
   ([remap imenu] . helm-semantic-or-imenu)
   ([remap noop-show-kill-ring] . helm-show-kill-ring)
   ;; ([remap persp-switch-to-buffer] . +helm/workspace-mini)
   ([remap switch-to-buffer] . helm-mini)
   ;; ([remap projectile-find-file] . +helm/projectile-find-file)
   ([remap projectile-recentf] . helm-projectile-recentf)
   ([remap projectile-switch-project] . helm-projectile-switch-project)
   ([remap projectile-switch-to-buffer] . helm-projectile-switch-to-buffer)
   ([remap recentf-open-files] . helm-recentf)
   ([remap yank-pop] . helm-show-kill-ring)
   ([remap woman] . helm-man-woman)
   ([remap comint-history-isearch-backward-regexp] . helm-comint-input-ring)
   ([remap comint-history-isearch-backward] . helm-comint-input-ring)
   ("C-c C-r" . helm-resume)
   (:map minibuffer-local-map
         ("C-r" . helm-minibuffer-history)
         ("C-c C-l" . helm-minibuffer-history))
 :config
   (helm-mode 1)
   (add-to-list 'helm-completing-read-handlers-alist
                `(,#'find-file-at-point . nil)))

cl-def{un,macro} 参数缩进的时候,除了以 & 关键字做为基准之外,可否把前一个参数作为优先考虑的因素?例如:

(cl-defun foo (
               ;; actual    ;; expected
               &key key1    ;; &key key1
                 key2       ;;      key2
                 key3       ;;      key3
                 )
  ...)

可能我有空考虑重写一下sly-cl-indent,原来的实现太脏了。

1赞

重写考不考虑合并上游?比默认的indent强多了。

wow!确实挺棒的!(咦,好像挖坟了