Aweshell 1.0 发布

没有这种操作吧……具体问题是什么?

非常感谢,用了一下感觉很不错,不过好像有些小问题。

我在将你的文件放到指定的目录下,执行

(require 'aweshell)

后会报一些错误,


Debugger entered--Lisp error: (search-failed "available git commands in")
  search-forward("available git commands in")
  (progn (call-process-shell-command "git" nil (current-buffer) nil "help" "--all") (goto-char 0) (search-forward "available git commands in") (let (commands) (while (re-search-forward "^[[:blank:]]+\\([[:word:]-.]+\\)[[:blank:]]*\\([[:wor..." nil t) (setq commands (cons (match-string 1) commands)) (if (match-string 2) (progn (setq commands (cons (match-string 2) commands))))) (sort commands #'string<)))
  (unwind-protect (progn (call-process-shell-command "git" nil (current-buffer) nil "help" "--all") (goto-char 0) (search-forward "available git commands in") (let (commands) (while (re-search-forward "^[[:blank:]]+\\([[:word:]-.]+\\)[[:blank:]]*\\([[:wor..." nil t) (setq commands (cons (match-string 1) commands)) (if (match-string 2) (progn (setq commands (cons ... commands))))) (sort commands #'string<))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))
  (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (call-process-shell-command "git" nil (current-buffer) nil "help" "--all") (goto-char 0) (search-forward "available git commands in") (let (commands) (while (re-search-forward "^[[:blank:]]+\\([[:word:]-.]+\\)[[:blank:]]*\\([[:wor..." nil t) (setq commands (cons (match-string 1) commands)) (if (match-string 2) (progn (setq commands ...)))) (sort commands #'string<))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer))))
  (let ((temp-buffer (generate-new-buffer " *temp*"))) (save-current-buffer (set-buffer temp-buffer) (unwind-protect (progn (call-process-shell-command "git" nil (current-buffer) nil "help" "--all") (goto-char 0) (search-forward "available git commands in") (let (commands) (while (re-search-forward "^[[:blank:]]+\\([[:word:]-.]+\\)[[:blank:]]*\\([[:wor..." nil t) (setq commands (cons ... commands)) (if (match-string 2) (progn ...))) (sort commands #'string<))) (and (buffer-name temp-buffer) (kill-buffer temp-buffer)))))
  pcmpl-git-commands()
  (defconst pcmpl-git-commands (pcmpl-git-commands) "List of `git' commands.")
  eval-buffer(#<buffer  *load*> nil "/home/zmqc/backups/src/aweshell/aweshell.el" nil t)  ; Reading at buffer position 14157
  load-with-code-conversion("/home/zmqc/backups/src/aweshell/aweshell.el" "/home/zmqc/backups/src/aweshell/aweshell.el" nil t)
  require(aweshell)
  eval((require 'aweshell) nil)
  elisp--eval-last-sexp(nil)
  eval-last-sexp(nil)
  funcall-interactively(eval-last-sexp nil)
  call-interactively(eval-last-sexp nil nil)
  command-execute(eval-last-sexp)

但使用的时候还是可以正常使用,没有任何的问题,感觉好奇怪。

然后在更新了 ecaddac98b87f881910dbee8b51a98f00b6d9d5d

Add `aweshell-search-history' and merge bash/zsh history in `esh-auto…

这条 commit 之后会报

Company: An error occurred in auto-begin
Company: backend esh-autosuggest error "Opening input file: 没有那个文件或目录, /home/zmqc/.zsh_history" with args (candidates ls )

这个错误,我用的是 bash, 我稍微看了下源文件,尝试着删掉了 esh-autosuggest.el 中 zsh 相关的代码 ( bash 相关的部分没有删除 ) 之后就又可以继续使用了,而且可以成功读取我的 bash_history 文件, 就是还会报下面的一个错误

(Shell command failed with code 1 and no output) [3 times]

就比如 @manateelazycat 的那个英文词典,是在他一个大的项目里的一个文件夹下面的几个文件,我只想用这个词典功能,那我怎么导入?

我也不会单独下载,不过我是 clone 了全部仓库再复制过来用的,印象中 400m+ 吧

可以像 @erStern clone到本地然后用:file 关键字指向那个文件夹。README相关介绍

或者试试 el-get,很强大的包管理器。我没用过所以不是很清楚,但是MELPA是支持git repo下细分文件的。而MELPA似乎用的就是el-get。(是这样吗? @twlz0ne

写了两个补丁, 防御了一下, 你更新到最新版, 看看还有什么错误没?

原来quelpa还有:files这种吗

执行 (require 'aweshell) 时依旧会报上面的错误,之后依旧可以继续使用。

哦,对了,我的 git 在 eshell 里是可以正常使用的,我单独执行

 (executable-find "git")

时结果是 “/usr/bin/git” , 感觉如果不管这个错误的话正常使用也没啥问题

第二个问题已经解决了

再次感谢

你要把整个仓库重新更新一遍,你最后一个错误能否详细点?

打开 debug 模式,我看一下报错堆栈

擦,诡异的现象发生了,我发现在命令行下启动(不论是终端模式还是图形模式)都不报错,命令行模式启动的 emacs 即使单独执行 (require 'aweshell) 的时候也不会报错。

只有点那个图标或者用快捷键启动的 emacs 才会报错

谢谢楼主分享, 东西很不错,刚刚简单使用下说说问题:

  1. 有命令行历史记录提示,但无法补全,遇到如下问题有点麻烦:

我似乎只找到手动敲完补全的办法

  1. eshell ssh到远程虚拟机或者服务器上的体验依然不好, 可能这点不算是你的软件范畴,但个人觉得shell ssh的使用总是避免不了的功能,对aweshell体验还是有很大间接影响。

以上个人一些看法 还是很谢谢楼主的分享,很不错的东西

按 Ctrl-f 就可以补全了

el-get 本身的设置,请看其主页 Basic Setup 章节。

el-get 用法:

  1. el-get 已收录的包

    (el-get-bundle foo)
    
  2. el-get 未收录(且 build 过程简单或无需 build)

    (el-get-bundle foo :url "https://github.com/johndoe/foo.git")
    

    不仅 git,还支持其他协议,只要是能下载的都支持,总的来说分两大类:

    • 仓库: git(gist), hg, …
    • 文件:zip, el(例如 “foo/bar.el”)…

    具体写法参考 README

  3. el-get 未收录(且 build 过程复杂)

    需要描述清楚 build 过程,最好写个, 例如 orgmode:

    (:name org-mode
        :website "http://orgmode.org/"
        :description "Org-mode is for keeping notes, maintaining ToDo lists, doing project planning, and authoring with a fast and effective plain-text system."
        :type git
        :url "https://code.orgmode.org/bzg/org-mode.git"
        :info "doc"
        :build/berkeley-unix `,(mapcar
                                (lambda (target)
                                    (list "gmake" target (concat "EMACS=" (shell-quote-argument el-get-emacs))))
                                '("oldorg"))
        :build `,(mapcar
                    (lambda (target)
                    (list "make" target (concat "EMACS=" (shell-quote-argument el-get-emacs))))
                    '("oldorg"))
        :load-path ("." "contrib/lisp" "lisp")
        :load ("lisp/org-loaddefs.el"))
    

    然后像 1 那样使用

如果仅仅是从 github 获取代码,有很多工具,为什么用 el-get?a) 支持浅克隆,b)支持各种协议,如 2 所述。

2 个赞

上面那个错误我昨天也遇到了,估计是你的当前环境 $LANG 不是 en_US.UTF-8,所以 git help --all 输出没那句英文。 你可以用 exec-path-from-shell 手动导入一下环境变量。

补全用 alt + h , 可以定制成其他你喜欢的按键

感谢,好像确实如此。我的 LANG 是 zh_CN.UTF-8,我刚刚试了一下 gnome-terminal 里 git help --all 是全英文的, eshell里执行相关部分是中文的 【在 ‘/usr/lib/git-core’ 下可用的 git 命令】

你现在用aweshell还有问题吗?

没有问题了,感谢

我推送了一个新的补丁, 应该不用改 LANG 环境变量就可以工作了.