Sublime Text 2ã®ProjectBuildãã©ã°ã€ã³ã®å ±åéçºã§ã®è²Žéãªçµéšãããã§å ±æããããšãããã«èšããªããã°ãªããŸãããçµæãšããŠãçµéšã®ã¿ãåŸãããŸãããçµå±ã®ãšããããã®ãã©ã°ã€ã³ãå®è£ ããå¿ èŠã¯ãªããããã»ã¹å šäœãèªè»¢è»ã®çºæã§ããããšãå€æããããã§ãã æ®å¿µãªããããã®äœéšã¯ãŸã 貎éã§ãã ç©èªã¯ãããã€ã¯ããæåŸã«ã®ã¿èšããããããªãã®ã«ãªããŸãã
ãšã³ããªãŒ
以åã«æžãããèšäºãAntã䜿çšããSublime Text 2ã§ã®ãããžã§ã¯ãã®ã¢ã»ã³ããªã®èªååãã®çµæãå²ãåœãŠãããããŒããŒãã·ã§ãŒãã«ããã䜿çšããŠãéžæãããã«ãã·ã¹ãã ã®ããŸããŸãªãã«ãããªã¢ã³ãïŒäŸãšããŠAntã䜿çšïŒãSublime Text 2ã§åŒã³åºãããšãã§ããŸããã ïŒç§ã¯ä»ããã®æçš¿ã®ãããã¯ã§ãèšå®ããšããèšèã䜿çšããŸãïŒ
ç§ã¯ãã®ã¢ãããŒãã«ã€ããŠå¥œãã§ã¯ãªãã£ããã®ïŒ
- ãã«ãã·ã¹ãã ãç°ãªãã°ãããªã¢ã³ãã®ååãå®å šã«ç°ãªãå¯èœæ§ããããããŒããŒãã·ã§ãŒãã«ããã¯ç¹å®ã®ããªã¢ã³ãåã«æ¢ã«æ確ã«é¢é£ä»ããããŠããŸããããããã¯å¥ã®ãã«ãã·ã¹ãã ã«ã¯ãªãã£ãå¯èœæ§ããããŸãã ç§ã®ä»®å®ã§ã¯ãã»ãšãã©ã®éçºè ã¯è€æ°ã®ãã«ãã·ã¹ãã ãåãæ¿ããå¿ èŠã¯ã»ãšãã©ãªããã»ãšãã©ã®éçºè ã¯1ã€ã®ãã«ãã·ã¹ãã ã§äœæ¥ããŸãã ãŸããéçºè ãå¿ èŠã«å¿ããŠãããŒããŒãã·ã§ãŒãã«ãããå床å€æŽããŸãã ããããããªãã¯èªããªããã°ãªããŸãããããã¯å°ãé¢åã§ãã ãããŠãããã¯èŠããŠããå¿ èŠããããŸãã ãããŠç¶ããŠããŸã
- å²ãåœãŠããã¹ãŠã®ããŒããŒãã·ã§ãŒãã«ãããèŠããŠããå¿ èŠããããŸãã åºæ¬çãªãF7ãããCtrl + BãããCtrl + Shift + Bããããããšã¯æããã§ãããã ãããªãã·ã§ã³ããšã«ãã1ã€ã®çµã¿åããããããŸãã ããã¯ããã§ã«ååšããããŒã®çµã¿åãããåå®çŸ©ããããæãšè³ã®äž¡æ¹ã«äŸ¿å©ãªæªäœ¿çšã®çµã¿åãããèŠã€ããå¿ èŠãããããšãæå³ããŸãã 䟿å©ãªç©ºããŠãããã®ãèŠã€ããããšããŸããããåå®çŸ©ã«èœã¡çããŸããã ãŸããããã¯ãåå®çŸ©æã«ãããã®çµã¿åããã®å ã®æ©èœãæœåšçã«å¥ªãå¯èœæ§ããããããæ鬱ã§ãã ãŸããå°æ¥ãæ°ãããã©ã°ã€ã³çšã®æ°ããããŒããŒãã·ã§ãŒãã«ãããå¿ èŠã«ãªãã®ãå¶éããããã«ãããŸããŸãªãã«ããªãã·ã§ã³ã®åŒã³åºãã«äŸ¿å©ãªã·ã§ãŒãã«ãããæ¢ã«äœ¿çšãããŠããŸãã
ãããŠãã³ã¡ã³ãã«ç»é²ãããŠããªãsnegovikufaã® Sublime Text 2ã®ProjectBuildãã©ã°ã€ã³ãè©ŠããŸããã ç§ãæ¬åœã«æ°ã«å ¥ã£ãã®ã¯ãã³ãã³ãã®ãªã¹ããå«ãããããããŠã³ããã«ã§ãã ãªã¹ãããé ç®ãéžæããããšã«ãããé©åãªã³ãã³ããå®è¡ã§ããŸããã ãã®ãã©ã°ã€ã³ã®ãã¹ãŠã®èšå®ã¯ãSublime Text 2èªäœã®ã¡ãã¥ãŒããã¢ã¯ã»ã¹ã§ããå¥ã®ãã¡ã€ã«ã«ä¿åãããŠããŸããããã®ãã¡ã€ã«ã«ã¯ãååãšå¯Ÿå¿ããã³ãã³ãã®ãªã¹ãã衚瀺ã§ããŸãã ç°¡åã«èšãã°ããã®ãã©ã°ã€ã³ã¯Sublime Text 2ã€ã³ã¿ãŒãã§ãŒã¹ããçŽæ¥ããµãŒãããŒãã£ããã°ã©ã ããå®è¡ããããã«èšå®ã§ããç¹ã«å¿ èŠãªã¿ãŒã²ããã®ååã§Antãå®è¡ããããã«äœ¿çšã§ããŸãã AntProjectBuilder.sublime-buildã§ProjectBuildããã蟌ã¿ãŸããã ããã§2çªç®ã®åé¡ã解決ããŸããã ããŒããŒãã·ã§ãŒãã«ããã1ã€ïŒãCtrl + Shift + Bãã§ãïŒå²ãåœãŠããšãSublime Text 2ã€ã³ã¿ãŒãã§ã€ã¹ã®ProjectBuildãã©ã°ã€ã³ããã«ã圢æãããProjectBuildã®æ§æã«åŸã£ãŠç®çã®ã³ãã³ããéžæããŠå®è¡ã§ããŸãã
ãããããã©ã°ã€ã³ã¯ãããµãŒãããŒãã£ããã°ã©ã ããåŒã³åºããŠããéãSublime Text 2èªäœã®ã€ã³ã¿ãŒãã§ã€ã¹ããããã¯ããŸããã§ããããåŒã³åºãã®æåãŸãã¯å€±æã®çè·¡ãæ®ããªãããã«æ©èœããŸããã ããšãã°ãç§ã®ã³ãã³ãã©ã€ã³ãåŒã³åºãããAntããã®äžã§æ©èœããæ¶ããŸããã Sublime Text 2èªäœã®ã³ã³ãœãŒã«ã«ã¯çè·¡ã¯æ®ã£ãŠããŸããã ãããŠãããã¯Sublime Text 2ã€ã³ã¿ãŒãã§ãŒã¹ãããã¯ããããšã§ã®ã¿éæãããŸãããã€ãŸããã³ãã³ããšåŒã°ããSublime Text 2ã€ã³ã¿ãŒãã§ãŒã¹ã¯äžæåæ¢ãããã®ããã»ã¹ãå®è¡ããåŸãSublime Text 2ã³ã³ãœãŒã«ã«ãã¹ãŠã®åºåãåãåºããŸãããããã»ã¹å šäœããéäžã§ã芳å¯ããããšã¯ã§ããŸããã§ããã
ãããŠããã®äœ¿çšæ³ã§ã¯ãProjectBuildãSublime Text 2ãã«ãã¡ã«ããºã ã®æ©èœãå®è£ ããå¿ èŠãããå Žåãæåã®åé¡ã¯è§£æ±ºãããŸããã§ãã-ãªãã·ã§ã³ãæ瀺çã«æå®ããäžèŠãªæ§æããããŸããã ããã«ã®ãªãã·ã§ã³ã®ãªã¹ããäœæããã«ã¯ãProjectBuildãæ§æããå¿ èŠããããŸãããããã®ãªãã·ã§ã³ã®ãªã¹ãã¯ãéžæãããã«ãã·ã¹ãã ã®ã* .sublime-buildããã¡ã€ã«ã«æ¢ã«çŽæ¥å«ãŸããŠããŸãã snegovikufaã«é£çµ¡ããŠã圌ã¯ããã«GitHubã®æäœæ¹æ³ãç¥ã£ãŠããããã©ã°ã€ã³ã®å€æŽãå§ããŸããã
ProjectBuildãã©ã°ã€ã³ãå€æŽããããã»ã¹ã«é¢ãããªããããã¯
Github
ãã®ãã³ãŒãã¢ã«ãŠã³ãã£ã³ã°ãã·ã¹ãã ã«ã¯éåžžã«æºè¶³ããŠããŸãïŒãã¡ããèªåŒµããŸãïŒããããŸã§gitã䜿ã£ãããšã¯ãããŸããã§ãããããããç解ããã®ã«30åãããããŸããã§ããã GitHubèªäœã®WindowsãŠãŒã¶ãŒåãã ç§ã¯åäœããã³ãŒããæžãã snegovikufaãå®æ§çã«Pythonè¡šèšçšã«äœãçŽãããªã©ãä¿®æ£ããäžæ£è¡çºãããŸãããçµæãåŸãããŸããã ç§ã®ç¬¬äžå°è±¡ãå ±åéçºãšgitïŒç¹ã«GitHubïŒã¯ãäºãã®ããã«äœãããŠããŸãã
Sublime Text 2 APIããã³Python
å ¬åŒããã³éå ¬åŒã®ããã¥ã¡ã³ãããããŸãã æåã¯ãSublime Text 2ã®APIæ©èœã¯ããã»ã©åªããŠããªãããã«èŠããŸããããååã§ããã æ¬ ããŠãããã®ã¯Pythonã§å®è£ ãããŸããã åè¿°ã®ããã«ãç§ã¯Pythonãç¥ããŸãããããã©ã°ã€ã³ã®æå³ãããæ©èœãéçºããããã«å€ãã®xç¥èã¯å¿ èŠãããŸããã§ããã ãŸãã snegovikufaã¯ããµãŒãããŒãã£ã®äžå¯è§£ãªç¬éããã°ããä¿®æ£ããŸããã èå³ã®ããã«èŠã€ãããã£ãããã§ããªãã£ãå¯äžã®ãã®ã¯ãSublime Text 2ãããã©ã«ãã§æã£ãŠããå¯èœæ§ã®ãããã¹ãŠã®ããŒãšèšå®å€ã®ãªã¹ãã§ããã
ã* .sublime-workspaceããã¡ã€ã«åœ¢åŒã«ãããšãããã¥ã¡ã³ãã«ã¯ãããJSON圢åŒã§ãããšèšèŒãããŠããŸããããã®ãã¡ã€ã«ãjson解æãããšãã«ãšã©ãŒãçºçããå¯èœæ§ãããããšãããããŸããã å®éãããŒã¿å ã®jsonããŒã¯ç©ºãããããŸããããããã¯ProjectBuildãã©ã°ã€ã³ã«ãã£ãŠæ¬¡ã®ããã«ç¡èŠãããŸããã
... json.load (f, strict = False)
Sublime Text 2ã§ããã$ project_pathããæã€å€æ°ãã* .sublime-buildããã¡ã€ã«ã«å«ãŸããŠããå¯èœæ§ããããSublime Text 2ã®éçºè ãããŒããŒãã·ã§ãŒãã«ããã®ãã¹ã§ïŒããã³ä»ã®ïŒäœ¿çšãæäŸããªãã£ãçç±ãããããŸãããããšãã°ããµãŒãããŒãã£ã®åŽé«ãªããã°ã©ã ãåŒã³åºãããŸãã ããããããã¯ã»ãã¥ãªãã£äžã®çç±ã«ãããã®ã§ãããããããŒã®çµã¿åãããããŸãæ©èœãããããã®äžéšã®ãã©ã°ã€ã³ã¯ããããžã§ã¯ããããããèªäœãã®ããã«äœããäŒãŸããããã§ã¯ãããŸããã
ãã©ã°ã€ã³ã®æŠèŠã³ãŒã
ãã¿ãã¬
import sublime import sublime_plugin import json import sys import os class ProjectBuildCommand (sublime_plugin.TextCommand) : def run (self, edit = None) : # Save file if dirty if self.view.is_dirty () : self.view.run_command ('save') ############################################ # # .sublime-workspace # # # workspace_file = None root_folders = self.view.window ().folders () for dir_ in root_folders : for dir_item in os.listdir (dir_) : if dir_item.endswith ('.sublime-workspace') : if workspace_file == None : workspace_file = os.path.join (os.path.normpath(dir_), dir_item) else : self.showError ( 'Must be only one ".sublime-workspace" file in project root folder.\n' 'Plugin found %s and %s files.' % (workspace_file, os.path.join (dir_, dir_item))) return if workspace_file == None : self.showError ( 'There are no ".sublime-workspace" file in any root folder of project.') return self.debug(workspace_file) # ############################################ ############################################ # # Build System # with open (workspace_file) as f : try: workspace_json_data = json.load (f, strict = False) except Exception, e: self.showError ( 'File .sublime-workspace is empty or has incorrect json data') return if not 'build_system' in workspace_json_data : self.showError ( 'There are no "build_system" value in %s file.\n' 'Choose Build System and save project.' % workspace_file) return build_filename = workspace_json_data['build_system'] self.debug(build_filename) # ############################################ ############################################ # # Build System # # build_filename_fullpath = os.path.normpath( os.path.join(os.path.dirname(sublime.packages_path()),build_filename)) if not(os.path.isfile(build_filename_fullpath)): self.showError ( 'Plugin could not find Build System file: "%s".' % build_filename_fullpath) return self.debug(build_filename_fullpath) # ############################################ ############################################ # # JSON # with open (build_filename_fullpath) as f : try: json_data = json.load (f) except Exception, e: self.showError ( 'File %s is empty or has incorrect json data' % build_filename_fullpath) return # ############################################ ############################################ # # build- Build System # build_variants = [] if "cmd" in json_data: build_variants.append (['Default', " ".join (json_data["cmd"])]) for variant in json_data.get ("variants", {}) : build_variants.append ( [variant['name'], " ".join (variant['cmd'])]) # ############################################ ############################################ # # . # def run (selected) : if (selected >= 0) : self.execute_variant (build_variants[selected][0]) names = [name for name, args in build_variants] self.view.window ().show_quick_panel (names, run) # ############################################ def execute_variant (self, variant_name) : self.view.window ().run_command ("build", {"variant": variant_name}) def showError (self, err) : # Sublime API # , sublime.error_message ('ProjectBuild:\n\n%s' % err) def debug (self, message) : # change True to False or vice versa if (False): print message
çµè«
çŸåšãProjectBuildã«ã¯èšå®ã¯å¿ èŠãããŸããã å¿ èŠãªãã«ãã·ã¹ãã ïŒæšæºã·ã¹ãã ãŸãã¯ãAntProjectBuilder.sublime-buildãã®ãããªç¬èªã®ã·ã¹ãã ïŒãéžæããã ãã§ãã ãããžã§ã¯ããSublime Text 2ã«ä¿åããŠãã«ãŒããã©ã«ããŒã®1ã€ã«ãããžã§ã¯ããããã§ã¹ããã¡ã€ã«ã* .sublime-workspaceããå«ãŸããããã«ããŸãã ProjectBuildãã©ã°ã€ã³ã¯ãçŸåšã®ãã«ãã·ã¹ãã ã«é¢ããæ å ±ããã®ãã¡ã€ã«ããååŸãããããããã®ãã¡ã€ã«ã®ååšãšãã®äžææ§ãç£èŠããŸãã Sublime Text 2ã®ãã«ãã·ã¹ãã ãå€æŽãããšãã¯ããããžã§ã¯ããä¿åããŠãäžèšã®ãã¡ã€ã«ãæŽæ°ãããããã«ããŠãã ããã ProjectBuildã«å²ãåœãŠãããããŒããŒãã·ã§ãŒãã«ãããæŒããšããã«ããªãã·ã§ã³ã®ãªã¹ããå«ãããã«ã衚瀺ãããŸãã ãã®ãªã¹ãã¯ãã* .sublime-buildããã¡ã€ã«ã«ååšããSublime Text 2ã§éžæããããã«ãã·ã¹ãã ã®ãªãã·ã§ã³ã®èª¬æã«åŸã£ãŠèªåçã«çæãããŸãã

èšäºã®åé ã§ç€ºãããåé¡ã¯æ£åžžã«è§£æ±ºãããŸããã1ã€ã®ã·ã§ãŒãã«ããã䜿çšãããSublime Text 2èªäœã®ãã«ãã¡ã«ããºã ããã³ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã§åäœããŸãã
ãã©ã°ã€ã³ã«ã¯æ¹åã®äœå°ããããŸããããšãã°ããã«ãã·ã¹ãã ãã¡ã€ã«ã§æå®ã§ãããã©ãããã©ãŒã åºæã®ãªãã·ã§ã³ã¯ç¡èŠãããããã«ãªããŸããããå人çã«ã¯ä»ã®ãšããååã§ãããä»å®è£ ããŠãããã®ãæ£ç¢ºã«å¿ èŠã§ãã
å®éã誰ã®è²¢ç®ã倧ããããèšãã®ã¯é£ãããçµæãšããŠProjectBuildãã©ã°ã€ã³ãæ¬æ¥ããã¹ããã®ã«ãªã£ãå Žåãããã¯éèŠã§ãã ãããŠãé ãã®ã¯çœªã§ããSublimeText 2ã®ã€ã³ã¿ãŒãã§ã€ã¹ãšæ©èœã«ã¯ãã®ãããªãã®ã¯ãªãã£ãããä»ã¯ããããããããã¯ç§ã«ãã£ãŠéšåçã«æžããããã®ã§ãããšããããšã¯äœãšãèšããªãèªãã§ãã ïŒããã§ç§ã¯ãèªè»¢è»ãã«ã€ããŠç¥ããŸããã§ããã
以åã®ããŒãžã§ã³ã®ProjectBuildã¯ãã³ãã³ãã1ã€ã®ã·ã§ãŒãã«ããã«ã°ã«ãŒãåããããã®OneHotkeyãã©ã°ã€ã³ã«å€æãããå¯èœæ§ãé«ããå¿ ãããã³ãã³ãããã«ãããã®ã§ã¯ãªããSublime Text 2ããã°ã©ã ãªã©ã®ãµãŒãããŒãã£ã³ãã³ããå®è¡ããã ãã§ãã ProjectBuildã䜿çšããŠããæ§æãã¡ã€ã«ã¯ããã«ãã¡ã«ããºã ã®åé·ãªæ å ±ãå«ãŸããŠãããããããã§ã¯æ¢ã«æçšã§ããã
çŽæã®èªè»¢è»
ãã¹ãŠã®å³¶ã¯é·ãééããŠããŸãã...å€æããããã«ããã§ã«Sublime Text 2ã«ã¯ãçŸåšã®ãã«ãã·ã¹ãã ã®ãªãã·ã§ã³ããã«ãåŒã³åºãæ©èœãæ¢ã«ãããŸããããŒã®çµã¿åãããè¿œå ããã ãã§ãã
{ "keys": ["f8"], "command": "show_overlay", "args": {"overlay": "command_palette", "text": "Build: "} }

ãã®ããã«ã¯ãã* .sublime-workspaceããã¡ã€ã«ã«ã¢ã¿ãããããåãªãã·ã§ã³ã«å²ãåœãŠãããããŒããŒãã·ã§ãŒãã«ãããããã°ããã衚瀺ããã®ã§ãããã«ã€ããŠè©±ãã®ã¯æ²ããããšã§ã¯ãããŸãããããã䟿å©ã§ãã ãã ãã䞊ã¹æ¿ãã¯ãµããŒããããŠãããããã©ã°ã€ã³ã¯æ³šæãªãã·ã§ã³ã«åãããŠç¢ºå®ããããšãã§ããŸãïŒãã ããäœãããããªããããããŸããïŒã

ããããããã®ãã¹ãŠããçµãåºããã®ã¯ãOneHotkeyã«æ»ãããšã ãã§ãã
ãæž èŽããããšãããããŸããã