1시간짜리 경험의 이야기 일 듯 싶어서,
간단히 코드로 보여주고 줄거리는 상상에 맞기는 것이 좋겠습니다.
결론은 shebang의 방식을 xml로 까지 확장해서 사용하고 있으며,
이는 어느 언어든 적용할 수 있는 유연한 방식이었다. 라는 것입니다.
구현은 jscript로(emeditor에서 WSH를 사용할 수 있는 이유로) 되어 있으며
현재 매우 지저분해서 공개할 수 없지만,
이 아이디어는 약 4년전부터 구현하기 시작해 지금도 계속 확장중입니다.
snippet에 해당되는 파일은 물론 지금도 계속 늘려가는 중입니다만, 현재는 8만9천여개의 파일이 모아져 있는데, 꽤 유용하게 사용되고 있습니다.
비슷한 고민을 하신적이 있으시면, 자료와 아이디어를 공유하고 싶습니다. 트위터 @crowdy까지 연락 주시면 언제든 환영합니다.
우선 shebang의 사용
- #!/usr/bin/env perl
- print "hello";
그리고 제가 중간정도에 사용하던 shebang의 확장
- /*
- #run:cscript c:\crowdy\emmacro\data\bin\runcrowdy.js {fullname}
- //SourceGUID:2877F00B-0CC4-4063-B5A6-D22D127DA319
- //ExecuteStart
- IF not exist c:\temp\2877F00B-0CC4-4063-B5A6-D22D127DA319 mkdir c:\temp\2877F00B-0CC4-4063-B5A6-D22D127DA319
- cd c:\temp\2877F00B-0CC4-4063-B5A6-D22D127DA319
- copy {fullname} .
- g++ -W -Wall -Werror {fullname} -o {filename.name}_gcc.exe
- strip {filename.name}_gcc.exe
- {filename.name}_gcc.exe
- //ExecuteEnd
- */
- #include <iostream>
- int main()
- {
- std::cout << "This is a native C++ program." << std::endl;
- return 0;
- }
- </iostream>
그리고 이것은 제가 지금 사용하고 있는 snippet 파일
- <!--xml version="1.0" encoding="utf-8"?-->
- <!--Use the axscript /info option to view this file-->
- <portablescriptfile product="crowdy Script .NET" productversion="1.1.97.0" <brbr=""> Schema="1.8" FileName="AddBeanFactoryPostProcessorToXmlBeanFactory.psf"
- CommandLine=""
- Generated="2010-05-31T01:46:35+10:00" xmlns="C:\Program Files\crowdy Script\psf.xsd">
- <opt ion="">
- <type>script</type>
- <script>
- <name>AddBeanFactoryPostProcessorToXmlBeanFactory.java</name>
- <language>java</language>
- <host>javac {references} {filename} && java {references} {filename.name}</host>
- <timestamp>2010-05-31T01:46:35+10:00</timestamp>
- <author>
- <name>crowdy</name>
- <description></description>
- <copyright>
- <signature>
- <version>
- <prerequisites></prerequisites>
- <arguments></arguments>
- <keywords></keywords>
- <link></link>
- <history><![CDATA[ ]]></history>
- <comment><![CDATA[ ]]></comment>
- </author>
- <code><![CDATA[
- import org.springframework.beans.BeansException;
- import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
- import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
- import org.springframework.beans.factory.xml.XmlBeanFactory;
- import org.springframework.core.io.ClassPathResource;
- public class {filename.name} {
- public static void main(String args[]) throws Exception {
- XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("context.xml"));
- factory.getBean("w");
- AllBeansLister lister = new AllBeansLister();
- lister.postProcessBeanFactory(factory);
- }
- }
- class AllBeansLister implements BeanFactoryPostProcessor {
- public void postProcessBeanFactory(ConfigurableListableBeanFactory factory)
- throws BeansException {
- System.out.println("The factory contains the followig beans:");
- String[] beanNames = factory.getBeanDefinitionNames();
- for (int i = 0; i < beanNames.length; ++i)
- System.out.println(beanNames[i]);
- }
- }]]></code>
- </script>
- </opt>
- <file>
- <name>context.xml</name>
- <content><!--[CDATA[<?xml version="1.0" encoding="UTF-8"?-->
- <!--DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
- <br /--> "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <bean id="w" class="java.lang.String"></bean>
- <bean id="allBeansLister" class="AllBeansLister">
- </bean></beans>
- ]]></content>
- </file>
- <opt ion="">
- <name>references</name>
- <value>.</value>
- <value>e:\ineedcodesample\Language\Jar\STUVWXYZ\spring.jar</value>
- <value>e:\ineedcodesample\Language\Jar\JKL\jakarta-commons\commons-logging.jar</value>
- </opt>
- <scriptapi></scriptapi>
- </portablescriptfile>
그리고 다음은 에디터(emeditor)에서 단축키를 눌러 매크로로 실행한 화면
