テンプレを作るスクリプト

Templatesディレクトリにファイルとおいておくと,
nautilusで右クリックしてファイルを簡単に作ることができる.

しかし,コマンドラインからこのテンプレートを使おうとすると
cp ~/Templates/うんたらかんたら
と打たなくてはならないので結構面倒.

さらに,自分は結構うっかりさんなので,
Templatesフォルダの中身の権限を読み取り専用ぐらいにしておきたいのだが,
そうするとコピーしたあとに権限を変えなくてはならない.

また,単一ファイルはこれで十分だが,
複数ファイルはさらに面倒だ.

ってわけで,いろいろと作ってみる.

まず,C++のクラスを作るテンプレ

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sys

def main():
	print "Name Space"
	nsName = raw_input()
	while True:
		print "Class Name"
		className = raw_input()
		if className != "":
			break
	if nsName == "":
		header = """
class %(cs)s {
public:
	%(cs)s();
	~%(cs)s();
};""" % {'cs': className}
		src = """#include "%(cs)s.h"

%(cs)s::%(cs)s() {
}

%(cs)s::~%(cs)s() {
}

""" % {'cs': className}
	else:
		header = """
	namespace %(ns)s
{
	class %(cs)s {
	public:
		%(cs)s();
		~%(cs)s();
	};
};""" % {'ns': nsName, 'cs': className}
		src = """#include "%(cs)s.h"

%(ns)s::%(cs)s::%(cs)s() {
}

%(ns)s::%(cs)s::~%(cs)s() {
}
""" % {'ns': nsName, 'cs': className}
	
	with open(className + ".h", 'w') as f:
		f.write(header)
	with open(className + ".cpp", 'w') as f:
		f.write(src)

if __name__ == '__main__':
	sys.exit(main())



そしてzshシェルスクリプト
select命令便利!
#!/bin/zsh

TMPLS=("C++Class" $(ls $HOME/Templates))

select SELECTED in $TMPLS
break

if [ $SELECTED = "C++Class" ]; then
	python ~/bin/tmplCppClass.py $1
elif [ -f "$HOME/Templates/$SELECTED" ]; then
	echo cpy
	cp "$HOME/Templates/$SELECTED" ./$1
	if [ -z $1 ]; then
		chmod 644 ./$SELECTED
	else
		chmod 644 ./$1
	fi
fi


さらにホームのTemplatesに適当にファイルを置く.
このとき,chmod 444で読み取り専用にしておく.

これで楽にテンプレを使える.

さらに,選択したテンプレートが圧縮ファイルでもあったら,
それを展開するとかしてもいいかも.