小编ffe*_*tte的帖子

摆脱"引用自由变量"字节编译警告

我正在写一个emacs主模式,它使用缓冲区局部变量来存储一些状态:

(defun foo-mode ()
  "My nice major mode"
  (interactive)
  (kill-all-local-variables)
  (setq mode-name "foo")
  (setq major-mode 'foo-mode)
  (set (make-local-variable 'foo-state) "bar"))

(defun foo-change-state ()
  (setq foo-state "baz"))
Run Code Online (Sandbox Code Playgroud)

这非常有效,并且具有在任何不使用我的主模式的缓冲区中的属性,该foo-state变量没有绑定(在我看来这是一件好事,因为它避免了符号表的混乱).

但是,对这段代码进行字节编译会产生以下警告:

Warning: assignment to free variable `foo-state'
Run Code Online (Sandbox Code Playgroud)

使用defvar摆脱警告,但foo-state现在到处都有副作用,这在我看来是不可取的.

有没有办法摆脱警告,同时仍然没有绑定每个缓冲区中特定于模式的变量?或者当我认为这些变量不应该在全球范围内宣布时,我错了吗?

emacs elisp

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

特定于emacs模式的自定义键绑定:local-set-key vs define-key

在定制了我的.emacs文件几年后,我发现我使用了两种不同的结构来设置特定于主模式的键绑定:

1.使用钩子和local-set-key.例如:

(defun my/bindkey-recompile ()
  "Bind <F5> to `recompile'."
  (local-set-key (kbd "<f5>") 'recompile))
(add-hook 'c-mode-common-hook 'my/bindkey-recompile)
Run Code Online (Sandbox Code Playgroud)

我想说这个结构可以很容易地为不同的主模式使用相同的键绑定,方法是将相同的函数添加到所有相关的主模式钩子(换句话说," 我想要的哪个键绑定 "明确地与" 我想要哪些模式 ").但是,我对这种自定义在缓冲级别完成这一事实感到不舒服,而我认为它们属于主要模式.

2.使用define-key(通常与eval-after-load延迟评估相结合,直到加载相关的键映射).例如:

(eval-after-load "cc-mode"
  '(progn
     (define-key c-mode-map   (kbd "C-c o") 'ff-find-other-file)
     (define-key c++-mode-map (kbd "C-c o") 'ff-find-other-file)))
Run Code Online (Sandbox Code Playgroud)

相比之下,这个构造定制了主模式本身,但不太灵活:如果我想为另一个模式使用相同的键绑定,我将不得不为这个模式找到正确的文件和键映射名称,并且几乎复制了eval-after-load表达式(虽然这可能是使用函数/宏自动化).

问题:虽然两种构造类型都能很好地工作并产生我想要的结果,但它们在技术上非常不同,在不同的时间在不同的键盘映射中设置键绑定.所以我的问题是:在这两个结构中,有一种"首选/更好"的方法吗?(或者也许"最好的"构造是我不知道的第三个构造?)

"首选/更好",我的意思是:

  1. 不太容易破坏新的emacs版本
  2. 不太容易受到干扰/被主动小模式干扰
  3. 更加惯用/可读/可与他人共享

emacs elisp

22
推荐指数
1
解决办法
5451
查看次数

用户定义的中缀运算符

我知道 Julia 中的运算符只是标准函数,我可以使用普通的前缀调用语法来使用它们:

julia> +(1, 2)
3
Run Code Online (Sandbox Code Playgroud)

但是,它们也很特殊,因为它们可以(并且通常)用作中缀运算符:

julia> 1+2
3
Run Code Online (Sandbox Code Playgroud)


我可以定义自己的中缀运算符吗?如果是这样,如何?

例如:

julia> ?(x, y) = x+y
? (generic function with 1 method)

julia> ?(1, 2)
3 # as expected

julia> 1?2
# expected result: 3
ERROR: UndefVarError: ?2 not defined
Stacktrace:
 [1] top-level scope at REPL[5]:1

julia> 1 ? 2
# expected result: 3
ERROR: syntax: extra token "?" after end of expression
Stacktrace:
 [1] top-level scope at REPL[5]:0
Run Code Online (Sandbox Code Playgroud)

julia

12
推荐指数
1
解决办法
1074
查看次数

索引 Julia DataFrame 时感叹号的含义是什么?

我认为感叹号!是逻辑NOT运算符的符号。现在,在学习DataFrames包中的索引时,我遇到了这个:data[!,:Treatment]. 这似乎与使用已知的冒号符号相同:

data[:,:Treatment]==data[!,:Treatment]true

为什么会有这种冗余呢?

julia

11
推荐指数
2
解决办法
793
查看次数

如何在不重复任务的情况下使用组织模式跟踪时间?

我已经使用org-mode大约一年了,用于任务和时间跟踪.我的主要目的是能够管理任务(待处理,完成工作时完成)以及创建总结我的时间的每周报告.

我一直在使用一种非常简单的方法.我有一个大纲层次结构,月份位于顶部,然后是一周,然后每天我构建我的任务.我使用thisweek属性在月级设置时钟表报告,以便在每周结束时我得到一份报告,我可以用它来填写我的考勤卡.

它看起来像这样:

* November
#+BEGIN: clocktable :maxlevel 5 :block thisweek :scope tree1 :link t
#+END: clocktable    
** Nov 5 - 9
*** Nov 5
**** admin, email
     CLOCK: [2012-11-05 Mon 14:28]--[2012-11-05 Mon 16:23] =>  1:55
     CLOCK: [2012-11-05 Mon 13:31]--[2012-11-05 Mon 13:36] =>  0:05
     CLOCK: [2012-11-05 Mon 13:20]--[2012-11-05 Mon 13:22] =>  0:02
     CLOCK: [2012-11-05 Mon 09:11]--[2012-11-05 Mon 09:14] =>  0:03
     CLOCK: [2012-11-05 Mon 08:03]--[2012-11-05 Mon 08:08] =>  0:05
**** TODO Fix scrubber to work with any environment
**** DONE Remedy …
Run Code Online (Sandbox Code Playgroud)

emacs time-tracking org-mode

8
推荐指数
0
解决办法
2305
查看次数

时间表按标签分组

我正在寻找一种方法来使用org-mode议程文件中的时间跟踪信息来构建时间表.将指示在不同任务中花费的时间,按标签分组并限制在给定的时间范围内,有点像时钟表动态块,但是按标签而不是文件/类别/标题分组.

例如,如果我的议程包含以下数据(可能分散在不同文件中):

* TODO project 1
** TODO task 1                                                  :tag1:
   :LOGBOOK:
   CLOCK: [2013-06-27 Thu 18:00]--[2013-06-27 Thu 19:04] =>  1:04
   CLOCK: [2013-06-26 Wed 17:00]--[2013-06-26 Wed 17:32] =>  0:32
   :END:
** TODO task 2                                                  :tag2:
   :LOGBOOK:
   CLOCK: [2013-06-27 Thu 17:00]--[2013-06-27 Thu 18:00] =>  1:00
   CLOCK: [2013-06-27 Thu 15:00]--[2013-06-27 Thu 15:50] =>  0:50
   :END:

* TODO project 2                                                :tag2:
  :LOGBOOK:
  CLOCK: [2013-06-27 Thu 19:04]--[2013-06-27 Thu 21:00] =>  1:56
  CLOCK: [2013-06-27 Thu 15:50]--[2013-06-27 Thu 17:00] =>  1:10
  :END:
Run Code Online (Sandbox Code Playgroud)

我想得到这样的结果:

#+BEGIN: clocktable-by-tag :maxlevel 2 …
Run Code Online (Sandbox Code Playgroud)

emacs elisp org-mode

7
推荐指数
1
解决办法
730
查看次数

emacs的正确flymake配置是什么?(使用Python.el)

我使用emacs作为python IDE.我安装了flymake,但是每当我使用.py文件时它都会显示以下错误

错误(flymake):Flymake:无法使用args启动语法检查过程'pycheckers'(string-operations_flymake.py):搜索程序:没有这样的文件或目录,pycheckers.Flymake将关闭

我对flymake的.emacs配置如下:

;; flymake
(add-to-list 'load-path "~/.emacs.d/vendor")
(add-hook 'find-file-hook 'flymake-find-file-hook)
(when (load "flymake" t)
  (defun flymake-pyflakes-init ()
    (let* ((temp-file (flymake-init-create-temp-buffer-copy
               'flymake-create-temp-inplace))
       (local-file (file-relative-name
            temp-file
            (file-name-directory buffer-file-name))))
      (list "pycheckers"  (list local-file))))
   (add-to-list 'flymake-allowed-file-name-masks
             '("\\.py\\'" flymake-pyflakes-init)))
(load "~/.emacs.d/vendor/flymake-cursor.el")
(global-set-key [f10] 'flymake-goto-prev-error)
(global-set-key [f11] 'flymake-goto-next-error)
Run Code Online (Sandbox Code Playgroud)

有关如何解决此问题的任何建议

python emacs elisp flymake

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

如何在新框架中运行gdb-many-windows?

我知道我可以打开一个新的框架M+xgdb.但只是在新框架M+xgdbgdb执行和执行会好得多.

gdb-many-windows当我运行它时销毁原始窗口布局,当我杀死它时它无法恢复布局.所以我想在一个新的框架中运行它并关闭那个框架.

更新:我用(setq gdb-many-windows t).如果我调用gdb它,它会gdb-many-windows自动使用布局.

emacs gdb

5
推荐指数
1
解决办法
877
查看次数

尝试使用phusion乘客启动rails app时US-ASCII中的无效字节序列

我正在尝试使用Phusion乘客和RVM在Ubuntu生产服务器上部署Rails 3应用程序.我已成功安装Phusion乘客,但在浏览器上访问服务器时出现以下错误:

Ruby (Rack) application could not be started

These are the possible causes:

There may be a syntax error in the application's code. Please check for such errors and fix them.

A required library may not installed. Please install all libraries that this application requires.

The application may not be properly configured. Please check whether all configuration files are written correctly, fix any incorrect configurations, and restart this application.

A service that the application relies on (such as the …
Run Code Online (Sandbox Code Playgroud)

passenger utf-8 bundler ruby-on-rails-3

5
推荐指数
1
解决办法
1万
查看次数

emacs,flyspell,停用"C-".键绑定

我有这个小问题,我有一些按键绑定像这样C-. C-xC-. C-m.激活flyspell模式后,我无法使用这些命令.在我的.emacs文件中,我之前有两行

(global-unset-key (kbd "C-."))
(define-key (current-global-map) (kbd "C-.") nil)
(global-set-key (kbd "C-. C-l") 'global-linum-mode) 
Run Code Online (Sandbox Code Playgroud)

然后,我的C-. C-l工作,但它没有激活flyspell模式.绑定的命令C-.flyspell-auto-correct-word.我试着按如下方式停用它:

;; first try
(defun flyspell-auto-correct-word-disable() (define-key (current-local-map) (kbd "C-.") nil))
(add-hook 'flyspell-mode-hook 'flyspell-auto-correct-word-disable)
;; second try
(define-key (current-global-map) [remap flyspell-auto-correct-word] nil)
Run Code Online (Sandbox Code Playgroud)

没有尝试有效,我该怎么办?我在Emacs 23和24中尝试过,我遇到了同样的问题.

emacs elisp flyspell emacs24

5
推荐指数
1
解决办法
995
查看次数