Emacsでカーソル周辺のキーワードをpythonに渡して処理させる elisp スクリプト

Emacsでカーソル周辺のキーワードをpythonに渡して処理させる elisp スクリプト

eslip はこんなの。

(defun call-external-script-test ()
  (interactive)
  (let* (cur beg end str cmd)
    (save-excursion
      (setq cur (point))
      (setq beg (+ cur (skip-chars-backward "_A-Za-z0-9_. \t" (bolp))))
      (setq end (+ beg (skip-chars-forward  "_A-Za-z0-9_. \t" (eolp))))
      (setq str (buffer-substring-no-properties beg end))
      (setq cmd (concat "~/python/test.py \"" str "\""))
      ;;(message "beg=\"%d\"\nend=\"%d\"\nstring=\"%s\"\n" beg end str)
      (message (shell-command-to-string cmd))
      )))

eslip から呼び出す python スクリプトはたとえばこんなの

#!/usr/bin/python3

import sys

print("Hello Python! argv={}".format(sys.argv[1:]))

Emacs でたとえばこんな C ファイルを開く

if ((AAA.for_x == 1) ||
    (BBB  .  for_y == 1))
{
   printf("true\n");
}

AAA.for_x という文字列のどこかにカーソルを置いて M-x call-external-script-test <Enter> とすると、ミニバッファに Hello Python! argv=['AAA.for_x'] と表示される。

カーソル位置はどこでも良い。BBB . for_y みたいに空白があっても一つの文字列と見なすようにしてみた。結果→ Hello Python! argv=[’BBB . for_y ’]