2013-08-23 5 views
1

Выполнение скрипта ниже на osx через emacs не работает, я получил сообщение об отказе в разрешении, ответ на этот вопрос был решен эта проблема: https://stackoverflow.com/a/12276562/912475Как запустить скрипт оболочки с помощью emacs keybinding, передавая слово под курсором как переменную

Tldr: Как настроить систему, чтобы автоматически передать слово под курсором в emacs прямо в мой сценарий оболочки как переменную, а затем запустить этот скрипт?

Я создал некоторую рудиментарную систему для «связывания» с папками из текстовых файлов надежным способом. Он использует временную метку, создаваемую скриптом, а затем устанавливает значение «значение» в буфере обмена. Из буфера обмена временная метка затем вставляется в txt со связанными заметками и в поле имени папки.

Чтобы найти папки при чтении txt, я использую функцию emacs с привязкой клавиш, которая позволяет скопировать временную метку (как слово, это все числа) в буфер обмена и искать ее в центре внимания (в osx) , Вместо этого я хотел бы автоматически запустить сценарий оболочки, который ищет каталог, имя которого заканчивается этой строкой, а затем открывает его. У меня уже есть скрипт, который делает что-то подобное, но я действительно не знаю, как связать функцию elisp и сценарий оболочки вместе. Я был бы очень признателен за решение, которое работает как с ОСО, так и с 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

ответ

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) 
+0

спасибо! Я получаю это сообщение об ошибке: определение функции Symbol void: call-my-script-with-word –

+0

подсветка синтаксиса выглядит немного странно (много текста пурпурный, первая скобка фиолетовая), есть ли какие-то неуравновешенные вопрос о скобках? –

+0

Я переписал сценарий выше, чтобы принимать аргументы из командной строки. Может быть, вы можете проверить это с помощью своего элипса? –

Смежные вопросы