小编rej*_*eep的帖子

解析Emacs Lisp

我在Emacs Lisp中编写一个解析器.它是一个解析器,用于查看如下所示的文本文件:

rule:
  int: 1, 2, 3, ...
  string: and, or, then, when
  text:
  ----------
  Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque
  in tellus. In pharetra consequat augue. In congue. Curabitur
  pellentesque iaculis eros. Proin magna odio, posuere sed, commodo nec,
  varius nec, tortor.
  ----------
  more: ...

rule:
  ...
Run Code Online (Sandbox Code Playgroud)

我并不关心密钥(int,string,...).我想要的价值.因此对于上面的文件int具有值"1,2,3,...",字符串"和,或者,然后,当"和文本"Lorem ..."(不包括破折号).

我正在考虑两种不同的解决方案,但我没有使用哪种解决方案.我是不是该:

  1. 创建一个循环遍历所有行的简单解析器,并为每一行匹配一些正则表达式,然后将我想要的部分分组?

  2. 用词法分析器和解析器做一个更复杂的解析器?

现在文件非常简单,我想我不需要像第二个选项那样做一些事情.但是这些文件可能会有点复杂,所以我想让它更容易扩展.

你怎么解决这个问题?

emacs parsing elisp

13
推荐指数
3
解决办法
4563
查看次数

Emacs键绑定回退

我有一个小模式.如果该模式处于活动状态且用户命中DEL,我想执行一些操作,但仅限于某些条件成立.如果条件成立且执行了操作,我想在此之后不再做任何事情.但如果条件失败,我不想做任何事情,让默认的DEL动作执行.

不知道我怎么解决这个问题.但我想我可以用两种方式做到:

1) 我可以将DEL键重新绑定到次要模式中的函数,然后检查条件是否成立.但是,我怎么知道DEL的默认命令是什么?

2) 我可以像这样添加一个pre命令钩子.执行命令然后断开链.但是我该如何打破链条呢?

(add-hook 'pre-command-hook
          (lambda()
            (when (equal last-input-event 'backspace)
              ;; Do something and then stop (do not execute the
              ;; command that backspace is bound to)
              )))
Run Code Online (Sandbox Code Playgroud)

你会以什么方式解决它?谢谢!

emacs elisp

10
推荐指数
1
解决办法
658
查看次数

如何在Elisp中创建DSL

我想在Elisp中创建一个DSL,看起来像这样:

(install
 ;; do install
 )

(uninstall
 ;; do uninstall
 )
Run Code Online (Sandbox Code Playgroud)

但是,由于Elisp具有全局命名空间,因此这不是一个好主意.并且像这样的函数前缀是非常难看的.

(package-install
 ;; do install
 )

(package-uninstall
 ;; do uninstall
 )
Run Code Online (Sandbox Code Playgroud)

所以我认为作为妥协,所有命令都可以包含在这样的命令调用中:

(commands
 (install
  ;; do install
  )

 (uninstall
  ;; do uninstall
  )

 ;; ...
 )
Run Code Online (Sandbox Code Playgroud)

但由于我不希望在全局命名空间中安装卸载,我不得不在命令宏中,用例如前缀名替换所有出现的命令,如下所示:

(defmacro commands (&rest body)
  (mapcar
   (lambda (exp)
     (setcar exp (intern (concat "package-" (symbol-name (car exp)))))
     (setcdr exp (list (cons 'progn (cdr exp)))))
   body)
  `(progn ,@body))

(commands
 (install
  ;; do install
  )

 (uninstall
  ;; do uninstall
  )

 ;; ... …
Run Code Online (Sandbox Code Playgroud)

emacs macros elisp

6
推荐指数
1
解决办法
462
查看次数

各种乳胶问题

我不得不匆忙学习乳胶,现在正试图修复一份报告.大多数事情都很好,但我有一些问题.

  1. 摘要有很多填充.这使抽象中断并最终分为两页.如何通过删除填充,使文本变小来使其适合一页?
  2. 我有一张长桌,我用它来长篇.但是表格很宽,所以我用p {Xmm}使它适合页面.这很好.但是,列中的所有文本都将使用整列宽度,这是我不想要的.
  3. 我使用\ setlength {\ parskip} {Xmm}来获得段落之间的间距.这很好.但是这些部分会有很多间距.有没有办法只设置底部间距?

然后我有关于乳胶的另一个问题.为什么标准如此可怕?我的意思是.如果内容太宽,您是否希望桌子不会自动断开?你有没有希望段落之间有0间距?我不明白......

谢谢!

latex

3
推荐指数
1
解决办法
2142
查看次数

获取所有宝石的清单

Rails 3中Rails.configuration.gems发生了什么?我想这与Bundler有关.但是我怎样才能找到所有的宝石呢?

谢谢

rubygems ruby-on-rails bundler

3
推荐指数
1
解决办法
2111
查看次数

在Emacs中模拟迷你缓冲输入

我正在寻找一种模拟迷你缓冲输入的方法.因此,some-func会从迷你缓冲区获取一些输入并对其执行某些操作.问题是,我有打电话给一些-FUNC从其他一些功能调用,FUNC,我需要交互做,所以我不能只是传递一个参数.

(defun some-func (arg)
  (interactive "*sEnter something: ")
  ;; Do something with arg
  )

(defun calling-func ()
  (call-interactively 'some-func)
  ;; Type to minibuffer
  )
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢!

emacs minibuffer

2
推荐指数
1
解决办法
865
查看次数

标签 统计

emacs ×4

elisp ×3

bundler ×1

latex ×1

macros ×1

minibuffer ×1

parsing ×1

ruby-on-rails ×1

rubygems ×1