1月
18
2012
分類:
最近更新:
2012-01-18
gedit 外掛程式 - 外部工具 - 執行或編譯程式碼
在 Linux 桌面中,我寫程式時慣用的文字編輯器是 gedit。 我寫了一個配合「外部工具」外掛的指令集,可以讓我直接在 gedit 的視窗中直接編譯或執行我正在編寫的程式碼。
#!/bin/sh
do_cc_cmd() {
CC_CMD=`grep -m 1 "// $CC" $GEDIT_CURRENT_DOCUMENT_PATH | sed "s/\/\/ //"`
OUTPUT_NAME=${GEDIT_CURRENT_DOCUMENT_NAME%.*}
if [ -z "$CC_CMD" ]; then
CC_CMD="$CC -o $OUTPUT_NAME $GEDIT_CURRENT_DOCUMENT_PATH"
fi
echo $CC_CMD
`$CC_CMD`
if [ $? -eq 0 ]; then
./$OUTPUT_NAME
fi
}
case $GEDIT_CURRENT_DOCUMENT_TYPE in
"application/x-php")
echo "$GEDIT_CURRENT_DOCUMENT_PATH" | grep "Test.php" > /dev/null
if [ $? -eq 0 ]; then
phpunit $GEDIT_CURRENT_DOCUMENT_NAME
else
php "$GEDIT_CURRENT_DOCUMENT_PATH"
fi
;;
"text/x-python")
python "$GEDIT_CURRENT_DOCUMENT_PATH";;
"application/x-ruby")
ruby "$GEDIT_CURRENT_DOCUMENT_PATH";;
"application/x-perl")
perl "$GEDIT_CURRENT_DOCUMENT_PATH";;
"application/javascript")
gjs "$GEDIT_CURRENT_DOCUMENT_PATH";;
"application/x-shellscript")
sh "$GEDIT_CURRENT_DOCUMENT_PATH";;
"text/x-csrc")
CC=gcc
do_cc_cmd
;;
"text/x-vala")
CC=valac
do_cc_cmd
;;
*)
echo "[$GEDIT_CURRENT_DOCUMENT_TYPE]"
echo "[$GEDIT_CURRENT_DOCUMENT_URI]"
echo "[$GEDIT_CURRENT_DOCUMENT_NAME]"
echo "[$GEDIT_CURRENT_DOCUMENT_PATH]"
echo "[$GEDIT_CURRENT_DOCUMENT_DIR]"
echo "[${GEDIT_CURRENT_DOCUMENT_NAME%.*}]"
esac
複製上列指令集的內容後,參考下圖,將這個指令集加入 gedit 外部工具的項目中。我指定 F5 作為此外部工具指令集的捷徑鍵。

- *.sh: sh
- *Test.php: phpunit
- *.php: php
- *.py: python
- *.pl: perl
- *.rb: ruby
- *.js: gjs
- *.c: gcc
- *.vala: valac
這個指令集會依據文件的型態判斷需要調用哪一個外部工具。例如我正在寫一個 shell script,當我按下 F5 鍵時,gedit 就會調用 sh 執行這份 shell script 並將輸出結果顯示在 gedit 的底部面板;寫 php 程式碼就會調用 php。如果文件是 C 程式碼,它也有法子調用 gcc 編譯與執行編譯後的程式。
針對 C/Vala 的程式碼,我的指令集會先找尋程式碼第一列的註解是否指示編譯方式。例如下列範例。
如果第一列註解指示了編譯內容,就會按照指示調用編譯器編譯程式碼。若無指示,則按預設方式編譯,C 程式碼調用 gcc -o $OUTPUT_NAME $GEDIT_CURRENT_DOCUMENT_PATH
;Vala 程式碼調用 valac -o $OUTPUT_NAME $GEDIT_CURRENT_DOCUMENT_PATH
。
// gcc -o helo -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lglib-2.0 hello.c
// 第一行就是編譯方式。
#include <glib.h>
int main() {
g_printf("hello\n");
return 0;
}
當我編寫單一文件就能寫完的小程式時,這個指令集省了我不少時間。
樂多舊網址: http://blog.roodo.com/rocksaying/archives/18790684.html