顺带问一句,可以想ielm一样,把prompt末端设置成行首吗?我喜欢C-a C-k 删命令,然后就把prompt也删掉了,搞得智能高亮也用不了,得用enter开新行,很不爽啊。
你自己按键绑定的问题啊, C-a 绑定 eshell-bol 就可以了啊.
我其实就是把auto suggest的前端从company换成了另一个,这样Company就腾出来了,可以用来补全
晚上优化一下
性能优化好了,可以把现在两个补全模式合并成一个模式,不用搞两个
那两个补全的其实是两个东西。auto suggest 是根据历史,补全的是整条命令。并且只要有匹配就会一直显示,可以作为一个提示。比如我第一次查谷歌写了一条tar命令,第二次写的时候,我已经忘了之前是怎么写的了;有这个提示我就能很方便地看见我之前是怎么写的,不用再谷歌一遍。可以说提示作用大于补全作用。
另一个,company,就是单纯的补全,你按tab就根据命令或者pwd提供给你一些可选项。
可能用fish的 @twlz0ne 能解释地清楚一些
我知道,我的意思是fish最佳匹配命令和bash补全都可以变成company的补全项,两者合二为一
这个不太好实现啊……你有什么想法吗?
我已经有想法了, 我写了新的插件替换 esh-autosuggest.el 吧
搞定了, 新版已经把 Fish 风格的补全建议和Bash/Zsh命令补全参数融为一体了: Mix best match history and shell completions in company's completion … · manateelazycat/aweshell@4891599 · GitHub
而且这个没有性能问题
正要问如何和pop-shell搭配呢,你却说弱爆了😂 multi-term-dedicated-toggle这样的功能,预定什么时候弄呀😄
新手支持一下 等完整版 下包来用
pop-shell相对于multi-term.el弹出功能来说是弱爆了
等我果断时间吧,最近有点忙
可以搞成包吗 我这种用户自动化管理不好搞呀
git submodule
怎么重现的?
系统: windows10 Emacs ver: 26.1
复现步骤:
-
emacs -Q
启动 - 手动导入路径
M-x toggle-debug-on-error
- 执行
(require 'company)
(require 'aweshell)
(eshell)
- 输入
git clone "
(我个人测试输入[
也会出现这个问题 - 反馈
Debugger entered--Lisp error: (no-catch pcompleted t)
throw(pcompleted t)
eshell-complete-parse-arguments()
pcomplete-parse-arguments(nil)
pcomplete-completions()
(let* ((most-similar (cl-find-if (function (lambda (str) (string-prefix-p prefix str))) (aweshell-parse-shell-history))) (command-prefix-args (mapconcat 'identity (nbutlast (split-string prefix)) " ")) (command-last-arg (car (last (split-string prefix)))) (completions (pcomplete-completions)) (shell-completions (if (consp completions) (remove-if-not (function (lambda (c) (string-prefix-p command-last-arg c))) completions) nil)) (suggest-completions (mapcar (function (lambda (c) (string-trim (concat command-prefix-args " " c)))) shell-completions))) (if most-similar (append (list most-similar) suggest-completions) suggest-completions))
aweshell-autosuggest-candidates("git clone \"")
(cond ((eql command 'interactive) (company-begin-backend 'aweshell-autosuggest)) ((eql command 'prefix) (and (eq major-mode 'eshell-mode) (aweshell-autosuggest--prefix))) ((eql command 'candidates) (aweshell-autosuggest-candidates arg)) ((eql command 'sorted) nil))
aweshell-autosuggest(candidates "git clone \"")
apply(aweshell-autosuggest (candidates "git clone \""))
company-call-backend-raw(candidates "git clone \"")
company--fetch-candidates("git clone \"")
company-calculate-candidates("git clone \"" nil)
company--begin-new()
company--perform()
company-auto-begin()
company-idle-begin(#<buffer Aweshell: c:/WINDOWS/system32/> #<window 3 on Aweshell: c:/WINDOWS/system32/> 103 102)
apply(company-idle-begin (#<buffer Aweshell: c:/WINDOWS/system32/> #<window 3 on Aweshell: c:/WINDOWS/system32/> 103 102))
timer-event-handler([t 23587 35613 891413 nil company-idle-begin (#<buffer Aweshell: c:/WINDOWS/system32/> #<window 3 on Aweshell: c:/WINDOWS/system32/> 103 102) nil 0])
随后每个输入都会被自动插入tab
作者不想加入melpa: