如何安装org-drill?

时间:2016-01-24 23:56:15

标签: emacs org-mode

我是Emacs的新手并完成了Emacs和基本的组织模式教程。 现在我想安装org-drill。以下是我在Emacs上安装org-drill失败的尝试。

来自http://orgmode.org/worg/org-contrib/org-drill.html

  

安装

     

最简单的方法是自定义变量'org-modules'(M-x customize-variables RET org-modules)并确保勾选'drill'。

我打开spanish.org文件并在Emacs中输入“Meta-x customize-variables”,echo区域说:

M-x customize-variables [No match]

所以我尝试“Meta-x customize-variable”单数:

M-x customize-variable <RET> org-modules

自定义菜单对Org模块开放。 因此,“M-x自定义变量”末尾的's'是指令中的拼写错误,或者我做错了。

在“自定义菜单”中,选中“钻取”并单击“应用并保存”按钮。

退出并重新启动Emacs。

打开spanish.org文件。

在Emacs中键入“M-x org-drill”,回声区域显示:

M-x org-drill-table-

为什么没有“org-drill”? 我输入:

M-x customize-variable <RET> org-modules

“Drill”仍在检查中。

然后我尝试了手动安装说明:

  

对于手动安装,请将以下内容放在.emacs中。您还需要确保Org的“contrib / lisp”目录位于emacs加载路径中。

     

(要求'org-drill)

我从http://orgmode.org/cgit.cgi/org-mode.git/tree/contrib/lisp/org-drill.el下载了org-drill.el 并将其复制到〜/ emacsLoad / org-drill.el,然后将这些行添加到我的.emacs文件中:

(add-to-list 'load-path "~/emacsLoad/")
(require 'org-drill)

重新启动的Emacs和* Warnings *窗口显示:

Warning (initialization): An error occurred while loading `/home/wolfv/.emacs':

Symbol's function definition is void: copy-list

所以我使用`--debug-init'选项启动Emacs以查看完整的错误回溯。 * Backtrace *窗口显示:

Debugger entered--Lisp error: (void-function copy-list)
  copy-list((1 (quote org-drill-visible-cloze-face) nil))
  org-drill--compute-cloze-keywords()
  (defvar org-drill-cloze-keywords (org-drill--compute-cloze-keywords) nil)
  require(org-drill)
  eval-buffer(#<buffer  *load*> nil "/home/wolfv/.emacs" nil t)  ; Reading at buffer position 1727
  load-with-code-conversion("/home/wolfv/.emacs" "/home/wolfv/.emacs" t t)
  load("~/.emacs" t t)
  #[0 "\205\262

这是什么意思?我不知道Lisp。

我输入:

M-x customize-variable <RET> org-modules

不再检查“钻孔”。

我很难过。如何在Emacs上安装drill-org?

我正在使用GNU Emacs 24.5.1(x86_64-redhat-linux-gnu,GTK +版本3.16.6)  2015-09-14关于buildvm-10.phx2.fedoraproject.org

这是我的.emacs文件:

;; load the built-in package manager
(require 'package)

;; add Emacs package repositories to the list of available repositories
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/"))
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/"))

(add-to-list 'load-path "~/emacsLoad/")

;; disable automatic package loading
(setq package-enable-at-startup nil)

;; from http://stackoverflow.com/a/10095853/580206 > RNA
(defun ensure-package-installed (&rest packages)
  "Assure every package is installed, ask for installation if it’s not.

Return a list of installed packages or nil for every skipped package."
  (mapcar
   (lambda (package)
     (if (package-installed-p package)
     nil
       (if (y-or-n-p (format "Package %s is missing. Install it? " package))
       (package-install package)
     package)))
   packages))

;; make sure to have downloaded archive description
(or (file-exists-p package-user-dir)
    (package-refresh-contents))

;; load installed packages
(package-initialize)

;; make sure these packages are installed
(ensure-package-installed 'evil)
;;(ensure-package-installed 'evil 'org-drill)

;; load the package into memory and call the main mode function
(require 'evil)
(evil-mode t)

(require 'org-drill)
;;(org-drill t)

;; display cursor's (row,col) position in mode line
(setq column-number-mode t)

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(org-modules
   (quote
    (org-bbdb org-bibtex org-docview org-gnus org-info org-irc org-mhe org-rmail org-w3m org-drill))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

5 个答案:

答案 0 :(得分:3)

我对Emacs或Org Mode(或Elisp)几乎一无所知,但这就是我开始工作的方式。

首先,当Emacs在回溯中说DocumentVersion时,这意味着(void-function xxx)尚未定义。经过大量的谷歌搜索,我发现xxx是在一个名为copy-list的模块中定义的,需要加载。

cl实际上在顶部注明了这种依赖性:

org-drill.el

所以我不知道为什么这不起作用。值得庆幸的是,我们可以自己加载它。

Org Drill有很多其他依赖项,因此您不希望自己管理它们。添加组织模式的elpa repository,然后安装包含Org Drill的(eval-when-compile (require 'cl)) 包。

org-plus-contrib / .emacs内,在顶部,添加

.emacs.d/init.el

这将加载您安装的所有elpa软件包。通常情况下,Emacs会在(package-initialize) 之后加载elpa包,但我们希望从init.el包中加载内容。

在此之后,您可以加载org-plus-contribcl

org-drill

<强>参考

答案 1 :(得分:2)

org-mode使用此init.el文件:

(require 'package)
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
(add-to-list 'load-path "~/emacsLoad/")
(package-initialize) ;; load all elpa packages before require 'org-drill

(require 'cl)
(require 'package)
(require 'org-drill)

http://orgmode.org/cgit.cgi/org-mode.git/tree/contrib/lisp/org-drill.el下载org-drill.el并将其复制到〜/ emacsLoad / org-drill.el,

启动Emacs。

打开文件spanish.org。

类型:M-x org-drill

按照屏幕底部的提示进行操作。

答案 2 :(得分:1)

我做了什么(花了几个小时后):

mkdir --parents ~/.emacs.d/pkgs
cd !$
git clone git://orgmode.org/org-mode.git

然后我将其添加到~/.emacs

(add-to-list 'load-path "~/.emacs.d/pkgs/org-mode/contrib/lisp/")       
(require 'org-drill)

在此之后,它才有效。

似乎* nix发行版上的默认emacs没有为org-mode提供contrib包,而git repo中的那个包含了捆绑的“所有”。

答案 3 :(得分:1)

official org-mode repository中的Org-drill已经过时(2015年),似乎可能是从BitBucket安装顶级版本的最佳决策。

Prerequsites:

首先,请输入以下命令检查Emacs加载路径:

C-h v load-path <RET>

Emacs应该输出本地主机上所有路径的列表,这些路径习惯性地寻求从中加载包。随意选择其中任何一个来分配可选包来扩展Emacs。

在我的特定情况下,最相关的是/usr/local/share/emacs/site-lisp/默认情况下,它具有有限的访问权限,因此确保您在那里写作的能力:

$ ls -la /usr/local/share/emacs-lisp/

并且可能添加此功能:

$ sudo chmod 777 /usr/local/share/emacs-lisp/

安装:

假设您的附加包的容器已准备就绪。因此:

  1. 在那里下载必要的包:

    $ cd / usr / local / share / emacs / site-lisp /

    $ wget https://bitbucket.org/eeeickythump/org-drill/raw/01b05cd7561ad69e5ec9c1200414d4fa128c9a17/org-drill.el

    $ wget http://orgmode.org/cgit.cgi/org-mode.git/plain/contrib/lisp/org-learn.el#org-learn requred to org-drill

  2. (require'org-drill)添加到您的Emacs配置文件中

  3. 重新启动您的Emacs

  4. 打开spanish.org

  5. 请尽情享受!

答案 4 :(得分:1)

以下是使用use-package自动加载org-drill以避免增加启动时间的方法:

(require 'package)
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
(package-initialize)

(use-package org-drill
  :defer t
  :ensure org-plus-contrib
  :commands (org-drill)
  :config
  ;; Config options
  )

:ensure org-plus-contrib将确保Emacs下载org-plus-contrib,这是捆绑org-drill的位置。

:commands (org-drill)org-drill命令创建自动加载。