1

通过emacs在osx上执行下面的脚本,没有用,我收到一条权限被拒绝消息,这个问题的答案解决了这个问题:https ://stackoverflow.com/a/12276562/912475

Tldr:如何设置系统自动将 emacs 中光标下的单词作为变量直接传递给我的 shell 脚本,然后运行该脚本?

我已经创建了一个基本的系统,用于以一种健壮的方式从纯文本文件“链接”到文件夹。它使用由脚本生成的时间戳,然后设置为剪贴板的“值”。然后,从剪贴板将时间戳粘贴到带有相关注释的 txt 中,并粘贴到文件夹的名称字段中。

为了在阅读 txt 时找到文件夹,我使用了带有键绑定的 emacs 函数,该函数可以将时间戳(作为一个单词,都是数字)复制到剪贴板并在聚光灯下搜索它(在 osx 上)。我想做的是自动启动一个 shell 脚本,搜索名称以该字符串结尾的目录,然后打开它。我已经有一个执行类似操作的脚本,但我真的不知道如何将 elisp 函数和 shell 脚本绑定在一起。我非常感谢适用于 osx 和 linux 的解决方案(我同时使用两者)。可能很容易“移植”适用于其中一个的解决方案以与另一个一起使用。

这是用于复制光标下单词的emacs函数:

;;; function for copying a word under the cursor http://www.emacswiki.org/emacs/CopyWithoutSelection
    (global-set-key (kbd "C-c o")         (quote copy-word))

     (defun copy-word (&optional arg)
      "Copy words at point into kill-ring"
       (interactive "P")
       (copy-thing 'backward-word 'forward-word arg)
       ;;(paste-to-mark arg)
     )

这是查找并打开名称以时间戳结尾的目录的脚本:

#!/bin/bash
PATH=/opt/local/bin:/opt/local/sbin:$PATH #need this to make the gnu coreutils work on osx
file_number="20130812193913"
path_to_open=$(gfind ~/x/ | grep -e $file_number$) # $ means the end of the line, makes it possible to search for directories without finding their content
open "${path_to_open}"

脚本的编辑版本,它接受来自命令行的参数,如下所示:

me$ sh script_path.sh 20130812193913

剧本:

#!/bin/bash
PATH=/opt/local/bin:/opt/local/sbin:$PATH #need this to make the gnu coreutils work on osx
file_number=$1
echo $file_number
path_to_open=$(gfind ~/x/ | grep -e $file_number$) # $ means the end of the line, makes it possible to search for directories without finding their content
open "${path_to_open}"

见:http ://www.bashguru.com/2009/11/how-to-pass-arguments-to-shell-script.html

4

1 回答 1

2

你可以尝试这样的事情:

(defvar script-name "/foo/bar/my-script")

(defun call-my-script-with-word ()
  (interactive)
  (shell-command
   (concat script-name 
           " "
           (thing-at-point 'word))))
(global-set-key (kbd "C-c o") 'call-my-script-with-word)
于 2013-08-23T16:26:14.873 回答