在Emacs中使用Lisp函數來運行當前文件所對應的Java程序。如何在知道軟件包的同時調用java的Lisp函數?
(defun java-run-current-file()
"Runs the java program the current file correspond to"
(interactive)
(shell-command
(concat "java "
(file-name-sans-extension
(file-name-nondirectory (buffer-file-name))))))
它通過剝離其路徑和擴展名的當前文件名,並用它作爲參數傳遞給java
這是從該文件是在路徑運行。這種方法的問題是,如果當前文件是包的一部分,那麼
- 的參數
java
必須與包名和一個點前綴,並且 java
已經被從運行包含軟件包的目錄。
因此,例如,如果該文件是file.java和包名是PKG java
稱爲java pkg.file
從包含目錄PKG(其中file.java被放置在目錄的父目錄)的目錄。
如何修改函數以瞭解包並相應地構造參數爲java
?我想人們可能會通過搜索包聲明當前文件解決這個問題,比如
package pkg;
,如果找到一個它使用該套件名稱適當地調用java
。
謝謝。這似乎滿足了我的問題中的第一點。如果定義了'package',現在只剩下從當前目錄的父目錄(而不是當前)運行'java'的第二點。我閱讀了'shell-command'的文檔,但是我似乎無法找到如何影響shell啓動的目錄。 –
啊,好的 - 我已經編輯了我的答案來解決第二部分。 – Thomas
工程就像一個魅力。非常感謝! –