Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
This paste will be private.
#!/usr/bin/env nush # # @file nuapp # Creates a Nu application shell # # @copyright Copyright (c) 2008 Matt McCray, Elucidata unLTD. (load "nu") (load "cocoa") (load "doc") (load "template") (function sh (command) (puts command) (set result (system command)) (if result (puts "nuapp: error #{result})") (exit result))) (function create-project (projectName) (set projectName (projectName capitalizedString)) (set projectShortName (projectName replaceString:" " withString:"")) (puts "Creating Nu App Project: #{projectName}") ;; Create folders... (sh "mkdir '#{projectShortName}'") (sh "mkdir '#{projectShortName}/nu'") (sh "mkdir '#{projectShortName}/objc'") (sh "mkdir '#{projectShortName}/resources'") (sh "mkdir '#{projectShortName}/resources/English.lproj'") (sh "mkdir '#{projectShortName}/resources/content'") (sh "mkdir '#{projectShortName}/resources/content/#{projectShortName}Help'") (sh "mkdir '#{projectShortName}/resources/content/#{projectShortName}Help/styles'") (sh "mkdir '#{projectShortName}/resources/content/#{projectShortName}Help/images'") ;; Create initial main.nu, Nukefile, Credits.html, and Help index.html (set main-nu (eval (NuTemplate codeForString:main-entry))) (main-nu writeToFile:"#{projectShortName}/nu/main.nu") (set nukefile (eval (NuTemplate codeForString:nuke-file))) (nukefile writeToFile:"#{projectShortName}/Nukefile") (set credits-file (eval (NuTemplate codeForString:credits))) (credits-file writeToFile:"#{projectShortName}/resources/content/Credits.html") (set help-file (eval (NuTemplate codeForString:swtitle-help))) (help-file writeToFile:"#{projectShortName}/resources/content/#{projectShortName}Help/swtitle.html") (set layout-file (eval (NuTemplate codeForString:layout-css))) (layout-file writeToFile:"#{projectShortName}/resources/content/#{projectShortName}Help/styles/layout.css") (puts "Done.")) (set main-entry <<-EONU ;; @file main.nu ;; @discussion Entry point for <%= projectName %>. ;; ;; @copyright Copyright (c ) 2008 (load "Nu:nu") ;; basics (load "Nu:cocoa") ;; cocoa definitions (load "Nu:menu") ;; menu generation ;; define the application delegate class (class ApplicationDelegate is NSObject (- applicationDidFinishLaunching:sender is (build-menu default-application-menu "<%= projectName %>"))) ;; install the delegate and keep a reference to it since the application won't retain it. ((NSApplication sharedApplication) setDelegate:(set delegate ((ApplicationDelegate alloc) init))) ;; this makes the application window take focus when we've started it from the terminal ((NSApplication sharedApplication) activateIgnoringOtherApps:YES) ;; run the main Cocoa event loop (NSApplicationMain 0 nil) EONU) (set nuke-file <<-EONU ;; Nukefile for <%= projectName %> ;; source files (set @nu_files (filelist "^nu/.*nu$")) (set @c_files (filelist "^objc/.*.c$")) (set @m_files (filelist "^objc/.*.m$")) (set @icon_files (filelist "^resources/content/.*icns$")) (set @resources (filelist "^resources/content/[^/]*$")) ;(set @nib_files (filelist "^resources/.*\.lproj/[^/]*\.nib$")) ;; application description (set @application "<%= projectShortName %>") (set @application_identifier "nu.programming.<%= projectShortName %>") (set @application_icon_file "app-icon.icns") (set @application_help_folder "<%= projectShortName %>Help") ;; tasks (compilation-tasks) (application-tasks) (task "default" => "application") EONU) (set credits <<-EONU <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title><%= projectName %> Credits</title> <style> BODY { font-family: Lucida Grande; } H1 { font-size: 110%; } DT { font-weight: normal; } DT SPAN { color: gray; } DD { margin-left: 0px; padding-left: 10px; margin-bottom: 25px; } </style> </head> <body> <h1>Requisite Beta Disclaimer</h1> <p> <%= projectName %> is BETA software! It might violently explode thereby taking out your computer, you, your neighbors, and three square blocks of your neighborhood. Use at your own risk. </p> </body> </html> EONU) (set swtitle-help <<-EONU <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <META NAME="AppleTitle" CONTENT="<%= projectName %> Help"> <META NAME="AppleIcon" CONTENT="../../app-icon.icns"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title><%= projectName %> Help</title> <link rel="Stylesheet" type="text/css" href="styles/layout.css"> </head> <body> <h3><%= projectName %></h3> <h4>Requisite Beta Disclaimer</h4> <p> This is BETA software! It might violently explode thereby taking out your computer, you, your neighbors, and three square blocks of your neighborhood. Use at your own risk. </p> <h3>Known Issues</h3> <ul> <li>...</li> </ul> </body> </html> EONU) (set layout-css <<-EONU /* Help Styles for <%= projectName %> */ BODY { font-family: lucida grande; font-size: 12px; } EONU) (set argv ((NuApplication sharedApplication) arguments)) (if (== 0 (argv count)) (then (puts "You must supply a project name")) (else (create-project (argv 0))))
From the Design Piracy series on my blog: