LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1173|回复: 8

[已解决] 请 amd64 用户帮忙测试 dev-python/ropemacs & app-emacs/company

[复制链接]
发表于 2010-10-4 10:42:04 | 显示全部楼层 |阅读模式
用 emacs 编写 python 代码的同学一定不会对 rope/ropemacs/ropemode 陌生。 ropemacs 是一个用 python 编写的 emacs 的 python 解析库,是目前 emacs 中实现 python 代码补全的最好的方式。通过 company-mode + ropemacs,emacs 可以有非常漂亮的 python 补全。

portage 中已经有 app-emacs/company-mode,但由于没有 ropemacs/ropemode 的 ebuild,安装了 company-mode 并不能正确实现 python 补全。因此最近写了 dev-python/ropemacs & dev-python/ropemode 的 ebuild 并提交到了 Gentoo Bugzilla。在两位开发者的热心帮助下,这两个 ebuild 已经被接收到官方 portage 树中,得瑟一下,哈哈

由于我自己的 Gentoo 是 x86,无法测试 amd64,因此目前两个 ebuild 无法添加 amd64 支持,请使用 amd64 的同学帮忙测试下在 amd64 下能否正常安装并使用,方法如下:

1. 添加 amd64 关键字

  1. echo "dev-python/ropemode ~amd64" >> /etc/portage/packages.keywords
  2. echo "dev-python/ropemacs ~amd64" >> /etc/portage/packages.keywords
复制代码

2. 安装 ropemacs & company-mode

  1. echo "app-emacs/company-mode ropemacs" >> /etc/portage/packages.use
  2. emerge -av company-mode ropemacs
复制代码

3. 在 emacs 中,打开一个 python 文件,并通过 M-x company-mode 打开 company-minor-mode,试试补全一个文件中定义的函数看是否正常。
4. 如果3通过,去 bugs.gentoo.org 提交一个 bug,要求为 dev-python/ropemacs & dev-python/ropemode 添加 amd64 关键字,也可以在这里发贴,如果验证正常我可以去 bugzilla 提交 bug。

ps:下面是两位开发者手把手地指导修改 ebuild,由此可见 Gentoo 社区之一斑。
http://bugs.gentoo.org/show_bug.cgi?id=338553
http://bugs.gentoo.org/show_bug.cgi?id=338556
发表于 2010-10-5 00:29:41 | 显示全部楼层
我一直用autocomplete和yasnippet,怎么和楼主的工具整合?
回复 支持 反对

使用道具 举报

发表于 2010-10-5 06:54:12 | 显示全部楼层
我测试了一下,有点问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2010-10-5 08:13:17 | 显示全部楼层
我这里 ropemacs 工作很正常, 但是我没有用 company-mode, 用的是 auto-complete.

3L 的出了问题应该是由于 company-mode 的后端引起的。 不是 ropemacs 的问题。

http://www.linuxsir.cn/bbs/attac ... =1&d=1286237554

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2010-10-5 08:17:47 | 显示全部楼层
Post by zhou3345;2114279
我一直用autocomplete和yasnippet,怎么和楼主的工具整合?


呵呵,我来说下我的吧,我用 autocomplete 来将 ropemacs 和 pymacs 作为 autocomplete 的后端,挺好用,配置如下:


  1. ;; *************************** Python Settings ****************************

  2. ;;;; Python Settings
  3. (require 'auto-complete)
  4. ;(require 'pysmell)
  5. (require 'python)

  6. (autoload 'python-mode "python-mode" "Python Mode." t)
  7. (autoload 'jython-mode "python-mode" "Python editing mode." t)
  8. (autoload 'py-shell "python-mode" "Start  interpreter in another window." t)
  9. (autoload 'pymacs-apply "pymacs")
  10. (autoload 'pymacs-call "pymacs")
  11. (autoload 'pymacs-eval "pymacs" nil t)
  12. (autoload 'pymacs-exec "pymacs" nil t)
  13. (autoload 'pymacs-load "pymacs" nil t)
  14. (pymacs-load "ropemacs" "rope-")

  15. (add-to-list 'auto-mode-alist '("\\.py$" . python-mode))
  16. (add-to-list 'interpreter-mode-alist '("python" . python-mode))

  17. (setq auto-mode-alist
  18.       (cons '("\\.py$" . python-mode) auto-mode-alist))
  19. (setq interpreter-mode-alist
  20.       (cons '("python" . python-mode)
  21.             interpreter-mode-alist))
  22. (setq ropemacs-enable-autoimport t)

  23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  24. ;;; Auto-completion
  25. ;;;  Integrates:
  26. ;;;   1) Rope
  27. ;;;   2) Yasnippet
  28. ;;;   all with AutoComplete.el
  29. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  30. (defun prefix-list-elements (list prefix)
  31.   (let (value)
  32.     (nreverse
  33.      (dolist (element list value)
  34.        (setq value (cons (format "%s%s" prefix element) value))))))

  35. (defvar ac-source-rope
  36.   '((candidates
  37.      . (lambda ()
  38.          (prefix-list-elements (rope-completions) ac-target))))
  39.   "Source for Rope")

  40. (defun ac-python-find ()
  41.   "Python `ac-find-function'."
  42.   (require 'thingatpt)
  43.   (let ((symbol (car-safe (bounds-of-thing-at-point 'symbol))))
  44.     (if (null symbol)
  45.         (if (string= "." (buffer-substring (- (point) 1) (point)))
  46.             (point)
  47.           nil)
  48.       symbol)))

  49. (defun ac-python-candidate ()
  50.   "Python `ac-candidates-function'"
  51.   (let (candidates)
  52.     (dolist (source ac-sources)
  53.       (if (symbolp source)
  54.           (setq source (symbol-value source)))
  55.       (let* ((ac-limit (or (cdr-safe (assq 'limit source)) ac-limit))
  56.              (requires (cdr-safe (assq 'requires source)))
  57.              cand)
  58.         (if (or (null requires)
  59.                 (>= (length ac-target) requires))
  60.             (setq cand
  61.                   (delq nil
  62.                         (mapcar (lambda (candidate)
  63.                                   (propertize candidate 'source source))
  64.                                 (funcall (cdr (assq 'candidates source)))))))
  65.         (if (and (> ac-limit 1)
  66.                  (> (length cand) ac-limit))
  67.             (setcdr (nthcdr (1- ac-limit) cand) nil))
  68.         (setq candidates (append candidates cand))))
  69.     (delete-dups candidates)))

  70. (add-hook 'python-mode-hook
  71.           (lambda ()
  72.             (set (make-local-variable 'ac-sources)
  73.                  (append ac-sources '(ac-source-rope) '(ac-source-yasnippet)))
  74.             (rope-open-project "~/.emacs.d/database/python/")
  75.             (local-set-key "\C-css" 'cscope-find-this-symbol)
  76.             (local-set-key "\C-csd" 'cscope-find-global-definition)
  77.             (local-set-key "\C-csg" 'cscope-find-global-definition)
  78.             (local-set-key "\C-csG" 'cscope-find-global-definition-no-prompting)
  79.             (local-set-key "\C-csc" 'cscope-find-functions-calling-this-function)
  80.             (local-set-key "\C-csC" 'cscope-find-called-functions)
  81.             (local-set-key "\C-cst" 'cscope-find-this-text-string)
  82.             (local-set-key "\C-cse" 'cscope-find-egrep-pattern)
  83.             (local-set-key "\C-csf" 'cscope-find-this-file)
  84.             (local-set-key "\C-csi" 'cscope-find-files-including-file)
  85.             (local-set-key "\C-csb" 'cscope-display-buffer)
  86.             (local-set-key "\C-csB" 'cscope-display-buffer-toggle)
  87.             (local-set-key "\C-csn" 'cscope-next-symbol)
  88.             (local-set-key "\C-csN" 'cscope-next-file)
  89.             (local-set-key "\C-csp" 'cscope-prev-symbol)
  90.             (local-set-key "\C-csP" 'cscope-prev-file)
  91.             (local-set-key "\C-csu" 'cscope-pop-mark)
  92.             (local-set-key "\C-csa" 'cscope-set-initial-directory)
  93.             (local-set-key "\C-csA" 'cscope-unset-initial-directory)
  94.             (local-set-key "\C-csL" 'cscope-create-list-of-files-to-index)
  95.             (local-set-key "\C-csI" 'cscope-index-files)
  96.             (local-set-key "\C-csE" 'cscope-edit-list-of-files-to-index)
  97.             (local-set-key "\C-csW" 'cscope-tell-user-about-directory)
  98.             (local-set-key "\C-csS" 'cscope-tell-user-about-directory)
  99.             (local-set-key "\C-csT" 'cscope-tell-user-about-directory)
  100.             (local-set-key "\C-csD" 'cscope-dired-directory)
  101.             ))
复制代码


上面的贴图中有一个效果图,个人感觉用的很顺手。
回复 支持 反对

使用道具 举报

发表于 2010-10-5 13:26:49 | 显示全部楼层
@deepwhite 多谢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-10-5 16:47:36 | 显示全部楼层
Post by dwan;2114286
我测试了一下,有点问题

你的问题是 company-mode 试图加载 pysmell 后端,但你没有安装 pysmell。但正常情况下 company-mode 会尝试加载 pysmell 和 ropemacs,而且优先 ropemacs。

从你的图中看,ropemacs 已经正常加载了,你的补全能用吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-10-10 15:39:31 | 显示全部楼层
已在 Portage 中解决,见 https://bugs.gentoo.org/show_bug.cgi?id=338550
回复 支持 反对

使用道具 举报

发表于 2011-2-12 22:50:26 | 显示全部楼层
请问deepwhite,用你的配置,ropemacs怎么也加载不起来,而用网上的一个配置,http://www.enigmacurry.com/2009/ ... ompletion-in-emacs/  ropemacs可以加载,但一个补全提示也没有,也没有错误信息,不知咋回事。

//不好意思,.emacs 里一些加载顺序弄错了,已成功使用自动完成功能,谢谢楼主与deepwhite贡献的方案。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表