Могу ли я написать сценарий поиска в Emacs? - PullRequest
3 голосов
/ 10 февраля 2012

Почти всегда я хочу запустить find-grep следующим образом:

ack --no-heading --no-color "SOMETHING" ~ / myco / firmwaresrc

Где ЧТО-ТОединственная переменная.На самом деле существует удивительное количество нажатий клавиш и размышлений, необходимых для того, чтобы это произошло.

Как бы я мог «консервировать» это, чтобы Mx fgf запустил find-grep с этой командой и текущимрегион вместо чего-то?

На самом деле я разработал, как это сделать (см. ответ ниже).Может кто-нибудь сказать мне, как заставить Emacs запрашивать что-то, если нет выбранного региона?

Ответы [ 3 ]

7 голосов
/ 10 февраля 2012
(defun fgf (term)
  (interactive
   (list (if (use-region-p)
             (buffer-substring (region-beginning) (region-end))
           (read-string "grep-find: "))))
  (grep-find (concat "ack --no-heading --no-color \""
                     term  "\" ~/myco/firmwaresrc")))
1 голос
/ 10 февраля 2012

Вы также можете посмотреть на ack , full-ack или ack-and-a-half . Предполагается, что последним будет брак двух предыдущих. Они позволяют вам задавать аргументы по умолчанию и тому подобное (хотя в обучении elisp нет ничего плохого: -).

0 голосов
/ 10 февраля 2012

Это работает:

(defun fgf ()
  (interactive)
  (if (region-active-p)
      (let (start end term command)
        (setq start (region-beginning)
              end   (region-end)
              term (buffer-substring start end)
              command (concat "ack --no-heading --no-color \"" term  "\" ~/myco/firmwaresrc"))
    (grep-find command))))

Так что теперь мне интересно, можно ли заставить его спросить меня "ЧТО-ТО", если не выбран регион. Я поменяю вопрос.

...