Changeset 52
- Timestamp:
- 12/14/02 06:50:34 (22 years ago)
- Location:
- trunk/launch/launch
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/launch/launch
-
Property svn:ignore
set to
build
.*
-
Property svn:ignore
set to
-
trunk/launch/launch/README
r3 r52 1 launch 1.0 a9 [2 April2002]1 launch 1.0b1 [14 December 2002] 2 2 ============ 3 3 … … 13 13 with Mac OS X. It offers few options - launching applications by name 14 14 or by path, launching TextEdit, or opening a number of applications, 15 documents, folders, etc. With the exception of special support for15 documents, folders, or URLs. With the exception of special support for 16 16 TextEdit, 'launch' does all this and: 17 17 … … 23 23 - asks applications to print documents, something the OS X Finder 24 24 no longer permits 25 - allows you to pipe output to GUI applictions 25 26 - launches applications in the background 26 27 - launches Carbon applications in Classic … … 60 61 A Project Builder project, 'launch.pbproj', is included. A 61 62 precompiled binary is also provided. 'launch' was developed and 62 tested under Mac OS 10. 1 and 10.1.1 with the 10.1 Developer Tools, and63 does not require any additional software to build.63 tested under Mac OS 10.2.3 with the December 2002 Developer Tools, 64 and does not require any additional software to build. 64 65 65 66 USAGE … … 69 70 70 71 Some examples: 71 72 % launch -ni com.apple.iTunes73 /Applications/iTunes.app74 [hint, hint]75 72 76 73 % launch -c 'R*ch' … … 80 77 [BBEdit starts printing test.txt in the background] 81 78 82 % launch -l http://www.apple.com/ 83 [Your preferred Web browser opens Apple's Web site] 84 79 % ls -l | launch -c CWIE 80 [CodeWarrior IDE opens with an untitled document containing the file list] 81 82 % launch -i org.mozilla.navigator http://www.apple.com/ 83 [Chimera Navigator opens Apple's Web site] 84 85 % launch -l launchsw@sabi.net 86 [Your preferred email client opens a new message to comment on launch] 87 88 % launch -f /Applications/Preview.app 85 89 /Applications/Preview.app: Mac OS X application package 86 90 type: 'APPL' creator: 'prvw' … … 109 113 110 114 115 Q. Why does application X open a file with a name beginning with 116 'launch-stationery-'? 117 118 A. Your application does not support stationery. Applications which 119 support stationery respond to it by creating a new untitled document 120 with the contents of the stationery. Most (all?) Cocoa applications, 121 such as TextEdit, do not support stationery. If you're looking for 122 a text editor which supports stationery, try BBEdit, Tex-Edit Plus, 123 the CodeWarrior IDE, or almost any other Carbon editor. 124 125 For the curious: launch processes input by simultaneously reading it 126 and writing to a temporary stationery file. Once reading is complete, 127 launch opens the stationery file with your selected application, and 128 deletes the stationery after one minute (as a safeguard, it is not 129 possible to accurately gauge how long it will take for the application 130 to open the stationery). 131 132 111 133 Q. Why can't I use -f with -c to get info on an application with a 112 given creator ?134 given creator (or -f with -i for a bundle ID)? 113 135 114 136 A. This feature may be added to a later version (or add it yourself!), … … 126 148 127 149 128 Q. Why do bundle IDs not work for non-packaged applications? 129 130 A. I think this is a LaunchServices/CFBundle bug. For example, BBEdit 131 6.1 for OS X was a packaged application; BBEdit 6.5 is not, however its 132 'plst' resource contains a bundle ID. LaunchServices is unable to 133 locate BBEdit 6.5 by its bundle ID. 134 135 Non-packaged applications usually come from older Mac OS applications, 136 so they will have creators, which is a workaround (use -c instead of 137 -i). 150 Q. Why won't launch locate non-packaged applications by their bundle 151 identifier? 152 153 A. This was a LaunchServices/CFBundle bug, fixed in Mac OS X 10.2. 154 For example, BBEdit 6.1 for OS X was a packaged application; BBEdit 155 6.5 is not, however its 'plst' resource contains a bundle ID. 156 LaunchServices prior to OS X 10.2 was unable to locate BBEdit 6.5 by 157 its bundle ID. 158 159 Non-packaged applications usually originated as Mac OS applications, 160 so they will have creators. If you're using Mac OS X 10.1.x, try 161 using the creator instead of the bundle ID as a workaround (-c instead 162 of -i). 163 164 165 Q. Why does launch display '[can't access CFBundle for application]' 166 in place of the bundle identifiers of non-packaged applications? 167 168 A. This is a CFBundle bug which remains as of Mac OS X 10.2.3. If 169 this matters to you, please ask Apple to fix it, or implement a 170 workaround in launch by parsing the 'plst' id 0 resource directly. 138 171 139 172 … … 191 224 --------------- 192 225 193 1.0a9 - 2 April 2002 - license, comments changes 194 1.0a8 - 29 March 2002 - errors with -l (from ICeCoffEE), added rlaunch script 195 1.0a7 - 3 March 2002 - print dates, sizes, folder valence, locked status for -f, 196 don't abort on failure to obtain bundle information 197 1.0a6 - 30 November 2001 - fixed incorrect messages, broken -u and crash on -nu 198 1.0a5 - 28 November 2001 - print kind string for -f, still no new installer 199 1.0a4 - 20 November 2001 - [try to] use Installer VISE instead of InstallAnywhere 200 1.0a3 - 15 November 2001 - fixed package identification in -f, updated examples 201 1.0a2 - 15 November 2001 - -f, removed broken -m 202 1.0a1 - 14 November 2001 - renamed from "FindApp", launch by default, -u 203 1.0d5 - 7 November 2001 - option -s for launching as root [nonfunctional] 204 1.0d4 - 6 November 2001 - URL launching and Internet Config support 205 1.0d3 - 4 November 2001 - more robust, support for docs without app 206 1.0d2 - 4 November 2001 - options -opsbmhCX, -cin, documents 207 1.0d1 - 26 August 2001 - returns path of application identified by creator 226 1.0b1 - 14 December 2002 227 - accept "slack" (default http) URLs and email addresses with -l 228 - accept input from stdin with '-' 229 - open URLs with arbitrary applications when specified without -l 230 - builds without compiler warnings 231 1.0a9 - 2 April 2002 232 - license, comments changes 233 1.0a8 - 29 March 2002 234 - errors with -l (from ICeCoffEE), added rlaunch script 235 1.0a7 - 3 March 2002 236 - print dates, sizes, folder valence, locked status for -f 237 - don't abort on failure to obtain bundle information 238 1.0a6 - 30 November 2001 239 - fixed incorrect messages, broken -u and crash on -nu 240 1.0a5 - 28 November 2001 241 - print kind string for -f, still no new installer 242 1.0a4 - 20 November 2001 243 - [try to] use Installer VISE instead of InstallAnywhere 244 1.0a3 - 15 November 2001 245 - fixed package identification in -f, updated examples 246 1.0a2 - 15 November 2001 247 - -f, removed broken -m 248 1.0a1 - 14 November 2001 249 - renamed from "FindApp", launch by default, -u 250 1.0d5 - 7 November 2001 251 - option -s for launching as root [nonfunctional] 252 1.0d4 - 6 November 2001 253 - URL launching and Internet Config support 254 1.0d3 - 4 November 2001 255 - more robust, support for docs without app 256 1.0d2 - 4 November 2001 257 - options -opsbmhCX, -cin, documents 258 1.0d1 - 26 August 2001 259 - returns path of application identified by creator -
trunk/launch/launch/VERSION
r3 r52 1 1.0 a91 1.0b1 -
trunk/launch/launch/launch.pbproj/nicholas.pbxuser
r3 r52 2 2 { 3 3 08FB7793FE84155DC02AAC07 = { 4 activeBuildStyle = 014CEA4 A0018CE3211CA2923;4 activeBuildStyle = 014CEA490018CE3211CA2923; 5 5 activeExecutable = F561F49E0139D79101AEEDB1; 6 6 activeTarget = 08FB779FFE84155DC02AAC07; … … 10 10 breakpoints = ( 11 11 F5F4D74101B55E0801AEEDB1, 12 E190CFFD03AAA8A300AEFBE0, 12 13 ); 13 14 executables = ( … … 15 16 ); 16 17 perUserDictionary = { 17 PBXPerProjectTemplateStateSaveDate = 52114527; 18 PBXPerProjectTemplateStateSaveDate = 61528480; 19 "PBXTemplateGeometry-F5314676015831810DCA290F" = { 20 ContentSize = "{685, 434}"; 21 LeftSlideOut = { 22 Collapsed = NO; 23 Frame = "{{0, 23}, {685, 411}}"; 24 Split0 = { 25 ActiveTab = 2; 26 ActiveTabName = PBXBuildResultsModule; 27 Collapsed = NO; 28 Frame = "{{0, 0}, {685, 411}}"; 29 Split0 = { 30 Frame = "{{0, 191}, {685, 220}}"; 31 }; 32 SplitCount = 1; 33 Tab0 = { 34 Frame = "{{0, 0}, {952, 321}}"; 35 }; 36 Tab1 = { 37 Debugger = { 38 Collapsed = NO; 39 Frame = "{{0, 0}, {781, 452}}"; 40 Split0 = { 41 Frame = "{{0, 24}, {781, 428}}"; 42 Split0 = { 43 Frame = "{{0, 0}, {383, 428}}"; 44 }; 45 Split1 = { 46 DebugVariablesTableConfiguration = ( 47 Name, 48 123, 49 Value, 50 85, 51 Summary, 52 155.123, 53 ); 54 Frame = "{{392, 0}, {389, 428}}"; 55 }; 56 SplitCount = 2; 57 }; 58 SplitCount = 1; 59 Tab0 = { 60 Frame = "{{0, 0}, {100, 50}}"; 61 }; 62 Tab1 = { 63 Frame = "{{0, 0}, {100, 50}}"; 64 }; 65 TabCount = 2; 66 TabsVisible = YES; 67 }; 68 Frame = "{{0, 0}, {781, 452}}"; 69 LauncherConfigVersion = 7; 70 }; 71 Tab2 = { 72 Frame = "{{0, 0}, {685, 215}}"; 73 LauncherConfigVersion = 3; 74 Runner = { 75 Frame = "{{0, 0}, {685, 215}}"; 76 }; 77 }; 78 Tab3 = { 79 BuildMessageFrame = "{{0, 0}, {687, 152}}"; 80 BuildTranscriptFrame = "{{0, 161}, {687, 2}}"; 81 BuildTranscriptFrameExpanded = YES; 82 Frame = "{{0, 0}, {685, 185}}"; 83 }; 84 Tab4 = { 85 Frame = "{{0, 0}, {612, 295}}"; 86 }; 87 TabCount = 5; 88 TabsVisible = NO; 89 }; 90 SplitCount = 1; 91 Tab0 = { 92 Frame = "{{0, 0}, {300, 533}}"; 93 GroupTreeTableConfiguration = ( 94 TargetStatusColumn, 95 18, 96 MainColumn, 97 267, 98 ); 99 }; 100 Tab1 = { 101 ClassesFrame = "{{0, 0}, {280, 398}}"; 102 ClassesTreeTableConfiguration = ( 103 PBXBookColumnIdentifier, 104 20, 105 PBXClassColumnIdentifier, 106 237, 107 ); 108 Frame = "{{0, 0}, {278, 659}}"; 109 MembersFrame = "{{0, 407}, {280, 252}}"; 110 MembersTreeTableConfiguration = ( 111 PBXBookColumnIdentifier, 112 20, 113 PBXMethodColumnIdentifier, 114 236, 115 ); 116 }; 117 Tab2 = { 118 Frame = "{{0, 0}, {200, 100}}"; 119 }; 120 Tab3 = { 121 Frame = "{{0, 0}, {200, 100}}"; 122 TargetTableConfiguration = ( 123 ActiveObject, 124 16, 125 ObjectNames, 126 202.296, 127 ); 128 }; 129 Tab4 = { 130 BreakpointsTreeTableConfiguration = ( 131 breakpointColumn, 132 197, 133 enabledColumn, 134 31, 135 ); 136 Frame = "{{0, 0}, {250, 100}}"; 137 }; 138 TabCount = 5; 139 TabsVisible = NO; 140 }; 141 NavBarShownByDefault = YES; 142 StatusViewVisible = YES; 143 Template = F5314676015831810DCA290F; 144 ToolbarVisible = YES; 145 WindowLocation = "{29, 98}"; 146 }; 147 "PBXTemplateGeometry-F5534CB2020F3F8A0DCA290F" = { 148 ContentSize = "{594, 303}"; 149 LeftSlideOut = { 150 Collapsed = NO; 151 Frame = "{{0, 23}, {594, 280}}"; 152 Split0 = { 153 ActiveTab = 1; 154 ActiveTabName = PBXRunSessionModule; 155 Collapsed = YES; 156 Frame = "{{0, 0}, {594, 280}}"; 157 Split0 = { 158 Frame = "{{1e+06, 1e+06}, {594, 0}}"; 159 }; 160 SplitCount = 1; 161 Tab0 = { 162 Frame = "{{0, 0}, {804, 321}}"; 163 }; 164 Tab1 = { 165 Debugger = { 166 Collapsed = NO; 167 Frame = "{{0, 0}, {594, 274}}"; 168 Split0 = { 169 Frame = "{{0, 24}, {594, 250}}"; 170 Split0 = { 171 Frame = "{{0, 0}, {290, 250}}"; 172 }; 173 Split1 = { 174 DebugVariablesTableConfiguration = ( 175 Name, 176 123, 177 Value, 178 85, 179 Summary, 180 62.123, 181 ); 182 Frame = "{{299, 0}, {295, 250}}"; 183 }; 184 SplitCount = 2; 185 }; 186 SplitCount = 1; 187 Tab0 = { 188 Frame = "{{0, 0}, {100, 50}}"; 189 }; 190 Tab1 = { 191 Frame = "{{0, 0}, {100, 50}}"; 192 }; 193 TabCount = 2; 194 TabsVisible = YES; 195 }; 196 Frame = "{{0, 0}, {594, 274}}"; 197 LauncherConfigVersion = 7; 198 }; 199 Tab2 = { 200 Frame = "{{0, 0}, {594, 274}}"; 201 LauncherConfigVersion = 3; 202 Runner = { 203 Frame = "{{0, 0}, {594, 274}}"; 204 }; 205 }; 206 Tab3 = { 207 BuildMessageFrame = "{{0, 0}, {614, 262}}"; 208 BuildTranscriptFrame = "{{0, 271}, {614, 2}}"; 209 BuildTranscriptFrameExpanded = YES; 210 Frame = "{{0, 0}, {612, 295}}"; 211 }; 212 Tab4 = { 213 Frame = "{{0, 0}, {612, 295}}"; 214 }; 215 TabCount = 5; 216 TabsVisible = NO; 217 }; 218 SplitCount = 1; 219 Tab0 = { 220 Frame = "{{0, 0}, {300, 533}}"; 221 GroupTreeTableConfiguration = ( 222 TargetStatusColumn, 223 18, 224 MainColumn, 225 267, 226 ); 227 }; 228 Tab1 = { 229 ClassesFrame = "{{0, 0}, {280, 398}}"; 230 ClassesTreeTableConfiguration = ( 231 PBXBookColumnIdentifier, 232 20, 233 PBXClassColumnIdentifier, 234 237, 235 ); 236 Frame = "{{0, 0}, {278, 659}}"; 237 MembersFrame = "{{0, 407}, {280, 252}}"; 238 MembersTreeTableConfiguration = ( 239 PBXBookColumnIdentifier, 240 20, 241 PBXMethodColumnIdentifier, 242 236, 243 ); 244 }; 245 Tab2 = { 246 Frame = "{{0, 0}, {200, 100}}"; 247 }; 248 Tab3 = { 249 Frame = "{{0, 0}, {200, 386}}"; 250 TargetTableConfiguration = ( 251 ActiveObject, 252 16, 253 ObjectNames, 254 202.296, 255 ); 256 }; 257 Tab4 = { 258 BreakpointsTreeTableConfiguration = ( 259 breakpointColumn, 260 197, 261 enabledColumn, 262 31, 263 ); 264 Frame = "{{0, 0}, {250, 386}}"; 265 }; 266 TabCount = 5; 267 TabsVisible = NO; 268 }; 269 NavBarShownByDefault = YES; 270 StatusViewVisible = YES; 271 Template = F5534CB2020F3F8A0DCA290F; 272 ToolbarVisible = YES; 273 WindowLocation = "{34, -15}"; 274 }; 275 "PBXTemplateGeometry-F5CA7EC9015C08ED0DCA290F" = { 276 ContentSize = "{665, 594}"; 277 LeftSlideOut = { 278 Collapsed = NO; 279 Frame = "{{0, 0}, {665, 594}}"; 280 Split0 = { 281 ActiveTab = 3; 282 ActiveTabName = PBXProjectFindModule; 283 Collapsed = NO; 284 Frame = "{{0, 0}, {665, 594}}"; 285 Split0 = { 286 Frame = "{{0, 301}, {665, 293}}"; 287 }; 288 SplitCount = 1; 289 Tab0 = { 290 Frame = "{{0, 0}, {484, 208}}"; 291 }; 292 Tab1 = { 293 Debugger = { 294 Collapsed = NO; 295 Frame = "{{0, 0}, {664, 208}}"; 296 Split0 = { 297 Frame = "{{0, 24}, {664, 184}}"; 298 Split0 = { 299 Frame = "{{0, 0}, {325, 184}}"; 300 }; 301 Split1 = { 302 DebugVariablesTableConfiguration = ( 303 Name, 304 123, 305 Value, 306 85, 307 Summary, 308 96.123, 309 ); 310 Frame = "{{334, 0}, {330, 184}}"; 311 }; 312 SplitCount = 2; 313 }; 314 SplitCount = 1; 315 Tab0 = { 316 Frame = "{{0, 0}, {100, 50}}"; 317 }; 318 Tab1 = { 319 Frame = "{{0, 0}, {100, 50}}"; 320 }; 321 TabCount = 2; 322 TabsVisible = YES; 323 }; 324 Frame = "{{0, 0}, {664, 208}}"; 325 LauncherConfigVersion = 7; 326 }; 327 Tab2 = { 328 Frame = "{{0, 0}, {664, 50}}"; 329 LauncherConfigVersion = 3; 330 Runner = { 331 Frame = "{{0, 0}, {664, 50}}"; 332 }; 333 }; 334 Tab3 = { 335 BuildMessageFrame = "{{0, 0}, {667, 265}}"; 336 BuildTranscriptFrame = "{{0, 274}, {667, 2}}"; 337 BuildTranscriptFrameExpanded = YES; 338 Frame = "{{0, 0}, {665, 298}}"; 339 }; 340 Tab4 = { 341 Frame = "{{0, 0}, {665, 295}}"; 342 }; 343 TabCount = 5; 344 TabsVisible = NO; 345 }; 346 SplitCount = 1; 347 Tab0 = { 348 Frame = "{{0, 0}, {313, 531}}"; 349 GroupTreeTableConfiguration = ( 350 TargetStatusColumn, 351 18, 352 MainColumn, 353 280, 354 ); 355 }; 356 Tab1 = { 357 ClassesFrame = "{{0, 0}, {280, 398}}"; 358 ClassesTreeTableConfiguration = ( 359 PBXBookColumnIdentifier, 360 20, 361 PBXClassColumnIdentifier, 362 237, 363 ); 364 Frame = "{{0, 0}, {278, 659}}"; 365 MembersFrame = "{{0, 407}, {280, 252}}"; 366 MembersTreeTableConfiguration = ( 367 PBXBookColumnIdentifier, 368 20, 369 PBXMethodColumnIdentifier, 370 236, 371 ); 372 }; 373 Tab2 = { 374 Frame = "{{0, 0}, {200, 100}}"; 375 }; 376 Tab3 = { 377 Frame = "{{0, 0}, {200, 557}}"; 378 TargetTableConfiguration = ( 379 ActiveObject, 380 16, 381 ObjectNames, 382 202.296, 383 ); 384 }; 385 Tab4 = { 386 BreakpointsTreeTableConfiguration = ( 387 breakpointColumn, 388 197, 389 enabledColumn, 390 31, 391 ); 392 Frame = "{{0, 0}, {250, 100}}"; 393 }; 394 TabCount = 5; 395 TabsVisible = NO; 396 }; 397 NavBarShownByDefault = YES; 398 StatusViewVisible = NO; 399 Template = F5CA7EC9015C08ED0DCA290F; 400 ToolbarVisible = NO; 401 WindowLocation = "{293, 27}"; 402 }; 403 "PBXTemplateGeometry-F5CA7ECB015C094F0DCA290F" = { 404 ContentSize = "{668, 621}"; 405 LeftSlideOut = { 406 Collapsed = NO; 407 Frame = "{{0, 0}, {668, 621}}"; 408 Split0 = { 409 Collapsed = NO; 410 Frame = "{{0, 0}, {668, 621}}"; 411 Split0 = { 412 Frame = "{{0, 0}, {668, 621}}"; 413 }; 414 SplitCount = 1; 415 Tab0 = { 416 Frame = "{{0, 0}, {484, 208}}"; 417 }; 418 Tab1 = { 419 Debugger = { 420 Collapsed = NO; 421 Frame = "{{0, 0}, {664, 208}}"; 422 Split0 = { 423 Frame = "{{0, 24}, {664, 184}}"; 424 Split0 = { 425 Frame = "{{0, 0}, {325, 184}}"; 426 }; 427 Split1 = { 428 DebugVariablesTableConfiguration = ( 429 Name, 430 123, 431 Value, 432 85, 433 Summary, 434 96.123, 435 ); 436 Frame = "{{334, 0}, {330, 184}}"; 437 }; 438 SplitCount = 2; 439 }; 440 SplitCount = 1; 441 Tab0 = { 442 Frame = "{{0, 0}, {100, 50}}"; 443 }; 444 Tab1 = { 445 Frame = "{{0, 0}, {100, 50}}"; 446 }; 447 TabCount = 2; 448 TabsVisible = YES; 449 }; 450 Frame = "{{0, 0}, {664, 208}}"; 451 LauncherConfigVersion = 7; 452 }; 453 Tab2 = { 454 Frame = "{{0, 0}, {664, 50}}"; 455 LauncherConfigVersion = 3; 456 Runner = { 457 Frame = "{{0, 0}, {664, 50}}"; 458 }; 459 }; 460 Tab3 = { 461 BuildMessageFrame = "{{0, 0}, {614, 262}}"; 462 BuildTranscriptFrame = "{{0, 271}, {614, 2}}"; 463 BuildTranscriptFrameExpanded = YES; 464 Frame = "{{0, 0}, {612, 295}}"; 465 }; 466 Tab4 = { 467 Frame = "{{0, 0}, {612, 295}}"; 468 }; 469 TabCount = 5; 470 TabsVisible = NO; 471 }; 472 SplitCount = 1; 473 Tab0 = { 474 Frame = "{{0, 0}, {313, 531}}"; 475 GroupTreeTableConfiguration = ( 476 TargetStatusColumn, 477 18, 478 MainColumn, 479 280, 480 ); 481 }; 482 Tab1 = { 483 ClassesFrame = "{{0, 0}, {280, 398}}"; 484 ClassesTreeTableConfiguration = ( 485 PBXBookColumnIdentifier, 486 20, 487 PBXClassColumnIdentifier, 488 237, 489 ); 490 Frame = "{{0, 0}, {278, 659}}"; 491 MembersFrame = "{{0, 407}, {280, 252}}"; 492 MembersTreeTableConfiguration = ( 493 PBXBookColumnIdentifier, 494 20, 495 PBXMethodColumnIdentifier, 496 236, 497 ); 498 }; 499 Tab2 = { 500 Frame = "{{0, 0}, {200, 100}}"; 501 }; 502 Tab3 = { 503 Frame = "{{0, 0}, {200, 557}}"; 504 TargetTableConfiguration = ( 505 ActiveObject, 506 16, 507 ObjectNames, 508 202.296, 509 ); 510 }; 511 Tab4 = { 512 BreakpointsTreeTableConfiguration = ( 513 breakpointColumn, 514 197, 515 enabledColumn, 516 31, 517 ); 518 Frame = "{{0, 0}, {250, 100}}"; 519 }; 520 TabCount = 5; 521 TabsVisible = NO; 522 }; 523 NavBarShownByDefault = YES; 524 StatusViewVisible = NO; 525 Template = F5CA7ECB015C094F0DCA290F; 526 ToolbarVisible = NO; 527 WindowLocation = "{615, 189}"; 528 }; 18 529 PBXWorkspaceContents = ( 19 530 { … … 22 533 Split0 = { 23 534 NavContent0 = { 24 bookmark = F5F80FB1031B348401850618;535 bookmark = E190D00A03AAD96100AEFBE0; 25 536 history = ( 26 F5F80FB0031B348401850618, 537 E190CFFE03AAD96100AEFBE0, 538 E190CFFF03AAD96100AEFBE0, 539 E190D00003AAD96100AEFBE0, 540 E190D00103AAD96100AEFBE0, 541 E190D00203AAD96100AEFBE0, 542 E190D00303AAD96100AEFBE0, 543 ); 544 prevStack = ( 545 E190D00403AAD96100AEFBE0, 546 E190D00503AAD96100AEFBE0, 547 E190D00603AAD96100AEFBE0, 548 E190D00703AAD96100AEFBE0, 549 E190D00803AAD96100AEFBE0, 550 E190D00903AAD96100AEFBE0, 27 551 ); 28 552 }; 29 553 NavCount = 1; 30 554 NavGeometry0 = { 31 Frame = "{{0, 0}, { 571, 548}}";555 Frame = "{{0, 0}, {738, 554}}"; 32 556 NavBarVisible = YES; 33 557 }; 558 NavSplitVertical = NO; 34 559 }; 35 560 SplitCount = 1; 36 Tab 0= {561 Tab1 = { 37 562 Debugger = { 38 563 Split0 = { … … 44 569 LauncherConfigVersion = 7; 45 570 }; 46 Tab 1= {571 Tab2 = { 47 572 LauncherConfigVersion = 3; 48 573 Runner = { 49 574 }; 50 575 }; 51 TabCount = 4;576 TabCount = 5; 52 577 }; 53 578 SplitCount = 1; … … 55 580 OptionsSetName = "Hierarchy, all classes"; 56 581 }; 57 Tab3 = { 58 SplitCount = 2; 59 }; 60 TabCount = 6; 582 TabCount = 5; 583 }; 584 }, 585 { 586 LeftSlideOut = { 587 Split0 = { 588 Split0 = { 589 NavCount = 1; 590 NavGeometry0 = { 591 Frame = "{{0, 0}, {685, 220}}"; 592 NavBarVisible = YES; 593 }; 594 NavSplitVertical = NO; 595 }; 596 SplitCount = 1; 597 Tab1 = { 598 Debugger = { 599 Split0 = { 600 SplitCount = 2; 601 }; 602 SplitCount = 1; 603 TabCount = 2; 604 }; 605 LauncherConfigVersion = 7; 606 }; 607 Tab2 = { 608 LauncherConfigVersion = 3; 609 Runner = { 610 }; 611 }; 612 TabCount = 5; 613 }; 614 SplitCount = 1; 615 Tab1 = { 616 OptionsSetName = "Hierarchy, all classes"; 617 }; 618 TabCount = 5; 619 }; 620 }, 621 { 622 LeftSlideOut = { 623 Split0 = { 624 Split0 = { 625 NavCount = 1; 626 NavGeometry0 = { 627 Frame = "{{0, 0}, {594, 150}}"; 628 NavBarVisible = YES; 629 }; 630 NavSplitVertical = NO; 631 }; 632 SplitCount = 1; 633 Tab1 = { 634 Debugger = { 635 Split0 = { 636 SplitCount = 2; 637 }; 638 SplitCount = 1; 639 TabCount = 2; 640 }; 641 LauncherConfigVersion = 7; 642 }; 643 Tab2 = { 644 LauncherConfigVersion = 3; 645 Runner = { 646 }; 647 }; 648 TabCount = 5; 649 }; 650 SplitCount = 1; 651 Tab1 = { 652 OptionsSetName = "Hierarchy, all classes"; 653 }; 654 TabCount = 5; 655 }; 656 }, 657 { 658 LeftSlideOut = { 659 Split0 = { 660 Split0 = { 661 NavContent0 = { 662 bookmark = E190D00C03AAD96100AEFBE0; 663 history = ( 664 E190D00B03AAD96100AEFBE0, 665 ); 666 }; 667 NavCount = 1; 668 NavGeometry0 = { 669 Frame = "{{0, 0}, {668, 621}}"; 670 NavBarVisible = YES; 671 }; 672 NavSplitVertical = NO; 673 }; 674 SplitCount = 1; 675 Tab1 = { 676 Debugger = { 677 Split0 = { 678 SplitCount = 2; 679 }; 680 SplitCount = 1; 681 TabCount = 2; 682 }; 683 LauncherConfigVersion = 7; 684 }; 685 Tab2 = { 686 LauncherConfigVersion = 3; 687 Runner = { 688 }; 689 }; 690 TabCount = 5; 691 }; 692 SplitCount = 1; 693 Tab1 = { 694 OptionsSetName = "Hierarchy, all classes"; 695 }; 696 TabCount = 5; 61 697 }; 62 698 }, … … 64 700 PBXWorkspaceGeometries = ( 65 701 { 66 ContentSize = "{ 855, 571}";702 ContentSize = "{1001, 577}"; 67 703 LeftSlideOut = { 68 ActiveTab = 0; 704 ActiveTab = 3; 705 ActiveTabName = PBXTargetTreeModule; 69 706 Collapsed = NO; 70 Frame = "{{0, 23}, { 855, 548}}";707 Frame = "{{0, 23}, {1001, 554}}"; 71 708 Split0 = { 72 709 Collapsed = NO; 73 Frame = "{{2 84, 0}, {571, 548}}";710 Frame = "{{263, 0}, {738, 554}}"; 74 711 Split0 = { 75 Frame = "{{0, 0}, { 571, 548}}";712 Frame = "{{0, 0}, {738, 554}}"; 76 713 }; 77 714 SplitCount = 1; 78 715 Tab0 = { 716 Frame = "{{0, 0}, {681, 289}}"; 717 }; 718 Tab1 = { 79 719 Debugger = { 80 720 Collapsed = NO; 81 Frame = "{{0, 0}, {681, 289}}";721 Frame = "{{0, 0}, {681, 150}}"; 82 722 Split0 = { 83 Frame = "{{0, 24}, {681, 265}}";723 Frame = "{{0, 24}, {681, 126}}"; 84 724 Split0 = { 85 Frame = "{{0, 0}, {333, 265}}";725 Frame = "{{0, 0}, {333, 126}}"; 86 726 }; 87 727 Split1 = { 88 728 DebugVariablesTableConfiguration = ( 89 729 Name, 90 82.80298,730 123, 91 731 Value, 92 104.074,732 85, 93 733 Summary, 94 1 26.123,734 105.123, 95 735 ); 96 Frame = "{{342, 0}, {339, 265}}";736 Frame = "{{342, 0}, {339, 126}}"; 97 737 }; 98 738 SplitCount = 2; … … 108 748 TabsVisible = YES; 109 749 }; 110 Frame = "{{0, 0}, {681, 289}}";750 Frame = "{{0, 0}, {681, 120}}"; 111 751 LauncherConfigVersion = 7; 112 752 }; 113 Tab 1= {114 Frame = "{{0, 0}, {681, 120}}";753 Tab2 = { 754 Frame = "{{0, 0}, {681, 234}}"; 115 755 LauncherConfigVersion = 3; 116 756 Runner = { 117 Frame = "{{0, 0}, {681, 120}}"; 118 }; 119 }; 120 Tab2 = { 121 BuildMessageFrame = "{{0, 0}, {683, 127}}"; 122 BuildTranscriptFrame = "{{0, 136}, {683, 100}}"; 123 Frame = "{{0, 0}, {681, 234}}"; 757 Frame = "{{0, 0}, {681, 234}}"; 758 }; 124 759 }; 125 760 Tab3 = { 761 BuildMessageFrame = "{{0, 0}, {683, 205}}"; 762 BuildTranscriptFrame = "{{0, 214}, {683, 2}}"; 763 BuildTranscriptFrameExpanded = YES; 126 764 Frame = "{{0, 0}, {681, 238}}"; 127 765 }; 128 TabCount = 4; 766 Tab4 = { 767 Frame = "{{0, 0}, {612, 295}}"; 768 }; 769 TabCount = 5; 129 770 TabsVisible = NO; 130 771 }; 131 772 SplitCount = 1; 132 773 Tab0 = { 133 Frame = "{{0, 0}, {260, 5 48}}";774 Frame = "{{0, 0}, {260, 554}}"; 134 775 GroupTreeTableConfiguration = ( 135 776 TargetStatusColumn, … … 157 798 }; 158 799 Tab2 = { 159 Frame = "{{0, 0}, {21 7, 554}}";800 Frame = "{{0, 0}, {216, 554}}"; 160 801 }; 161 802 Tab3 = { 162 803 Frame = "{{0, 0}, {239, 554}}"; 163 Split0 = { 164 Frame = "{{0, 0}, {239, 268}}"; 165 TargetTreeTableConfiguration = ( 166 ActiveTarget, 167 16, 168 TargetName, 169 207, 170 ); 171 }; 172 Split1 = { 173 BuildStyleTreeTableConfiguration = ( 174 IsActive, 175 16, 176 Name, 177 208, 178 ); 179 Frame = "{{0, 277}, {239, 277}}"; 180 }; 181 SplitCount = 2; 804 TargetTableConfiguration = ( 805 ActiveObject, 806 16, 807 ObjectNames, 808 206.296, 809 ); 182 810 }; 183 811 Tab4 = { 184 ExecutableTreeTableConfiguration = (185 ActiveExecutable,186 16,187 ExecutableName,188 217,189 );190 Frame = "{{0, 0}, {250, 554}}";191 };192 Tab5 = {193 812 BreakpointsTreeTableConfiguration = ( 194 813 breakpointColumn, … … 199 818 Frame = "{{0, 0}, {250, 554}}"; 200 819 }; 201 TabCount = 6;820 TabCount = 5; 202 821 TabsVisible = YES; 203 822 }; 823 NavBarShownByDefault = YES; 204 824 StatusViewVisible = YES; 205 825 Template = 64ABBB4501FA494900185B06; 206 826 ToolbarVisible = YES; 207 WindowLocation = "{5, 199}"; 827 WindowLocation = "{5, 193}"; 828 }, 829 { 830 ContentSize = "{685, 434}"; 831 LeftSlideOut = { 832 Collapsed = NO; 833 Frame = "{{0, 23}, {685, 411}}"; 834 Split0 = { 835 ActiveTab = 2; 836 ActiveTabName = PBXBuildResultsModule; 837 Collapsed = NO; 838 Frame = "{{0, 0}, {685, 411}}"; 839 Split0 = { 840 Frame = "{{0, 191}, {685, 220}}"; 841 }; 842 SplitCount = 1; 843 Tab0 = { 844 Frame = "{{0, 0}, {952, 321}}"; 845 }; 846 Tab1 = { 847 Debugger = { 848 Collapsed = NO; 849 Frame = "{{0, 0}, {781, 452}}"; 850 Split0 = { 851 Frame = "{{0, 24}, {781, 428}}"; 852 Split0 = { 853 Frame = "{{0, 0}, {383, 428}}"; 854 }; 855 Split1 = { 856 DebugVariablesTableConfiguration = ( 857 Name, 858 123, 859 Value, 860 85, 861 Summary, 862 155.123, 863 ); 864 Frame = "{{392, 0}, {389, 428}}"; 865 }; 866 SplitCount = 2; 867 }; 868 SplitCount = 1; 869 Tab0 = { 870 Frame = "{{0, 0}, {100, 50}}"; 871 }; 872 Tab1 = { 873 Frame = "{{0, 0}, {100, 50}}"; 874 }; 875 TabCount = 2; 876 TabsVisible = YES; 877 }; 878 Frame = "{{0, 0}, {781, 452}}"; 879 LauncherConfigVersion = 7; 880 }; 881 Tab2 = { 882 Frame = "{{0, 0}, {685, 215}}"; 883 LauncherConfigVersion = 3; 884 Runner = { 885 Frame = "{{0, 0}, {685, 215}}"; 886 }; 887 }; 888 Tab3 = { 889 BuildMessageFrame = "{{0, 0}, {687, 152}}"; 890 BuildTranscriptFrame = "{{0, 161}, {687, 2}}"; 891 BuildTranscriptFrameExpanded = YES; 892 Frame = "{{0, 0}, {685, 185}}"; 893 }; 894 Tab4 = { 895 Frame = "{{0, 0}, {612, 295}}"; 896 }; 897 TabCount = 5; 898 TabsVisible = NO; 899 }; 900 SplitCount = 1; 901 Tab0 = { 902 Frame = "{{0, 0}, {300, 533}}"; 903 GroupTreeTableConfiguration = ( 904 TargetStatusColumn, 905 18, 906 MainColumn, 907 267, 908 ); 909 }; 910 Tab1 = { 911 ClassesFrame = "{{0, 0}, {280, 398}}"; 912 ClassesTreeTableConfiguration = ( 913 PBXBookColumnIdentifier, 914 20, 915 PBXClassColumnIdentifier, 916 237, 917 ); 918 Frame = "{{0, 0}, {278, 659}}"; 919 MembersFrame = "{{0, 407}, {280, 252}}"; 920 MembersTreeTableConfiguration = ( 921 PBXBookColumnIdentifier, 922 20, 923 PBXMethodColumnIdentifier, 924 236, 925 ); 926 }; 927 Tab2 = { 928 Frame = "{{0, 0}, {200, 100}}"; 929 }; 930 Tab3 = { 931 Frame = "{{0, 0}, {200, 100}}"; 932 TargetTableConfiguration = ( 933 ActiveObject, 934 16, 935 ObjectNames, 936 202.296, 937 ); 938 }; 939 Tab4 = { 940 BreakpointsTreeTableConfiguration = ( 941 breakpointColumn, 942 197, 943 enabledColumn, 944 31, 945 ); 946 Frame = "{{0, 0}, {250, 100}}"; 947 }; 948 TabCount = 5; 949 TabsVisible = NO; 950 }; 951 NavBarShownByDefault = YES; 952 StatusViewVisible = YES; 953 Template = F5314676015831810DCA290F; 954 ToolbarVisible = YES; 955 WindowLocation = "{29, 98}"; 956 }, 957 { 958 ContentSize = "{594, 303}"; 959 LeftSlideOut = { 960 Collapsed = NO; 961 Frame = "{{0, 23}, {594, 280}}"; 962 Split0 = { 963 ActiveTab = 1; 964 ActiveTabName = PBXRunSessionModule; 965 Collapsed = YES; 966 Frame = "{{0, 0}, {594, 280}}"; 967 Split0 = { 968 Frame = "{{1e+06, 1e+06}, {594, 27}}"; 969 }; 970 SplitCount = 1; 971 Tab0 = { 972 Frame = "{{0, 0}, {804, 321}}"; 973 }; 974 Tab1 = { 975 Debugger = { 976 Collapsed = NO; 977 Frame = "{{0, 0}, {594, 274}}"; 978 Split0 = { 979 Frame = "{{0, 24}, {594, 250}}"; 980 Split0 = { 981 Frame = "{{0, 0}, {290, 250}}"; 982 }; 983 Split1 = { 984 DebugVariablesTableConfiguration = ( 985 Name, 986 123, 987 Value, 988 85, 989 Summary, 990 62.123, 991 ); 992 Frame = "{{299, 0}, {295, 250}}"; 993 }; 994 SplitCount = 2; 995 }; 996 SplitCount = 1; 997 Tab0 = { 998 Frame = "{{0, 0}, {100, 50}}"; 999 }; 1000 Tab1 = { 1001 Frame = "{{0, 0}, {100, 50}}"; 1002 }; 1003 TabCount = 2; 1004 TabsVisible = YES; 1005 }; 1006 Frame = "{{0, 0}, {594, 274}}"; 1007 LauncherConfigVersion = 7; 1008 }; 1009 Tab2 = { 1010 Frame = "{{0, 0}, {594, 274}}"; 1011 LauncherConfigVersion = 3; 1012 Runner = { 1013 Frame = "{{0, 0}, {594, 274}}"; 1014 }; 1015 }; 1016 Tab3 = { 1017 BuildMessageFrame = "{{0, 0}, {614, 262}}"; 1018 BuildTranscriptFrame = "{{0, 271}, {614, 2}}"; 1019 BuildTranscriptFrameExpanded = YES; 1020 Frame = "{{0, 0}, {612, 295}}"; 1021 }; 1022 Tab4 = { 1023 Frame = "{{0, 0}, {612, 295}}"; 1024 }; 1025 TabCount = 5; 1026 TabsVisible = NO; 1027 }; 1028 SplitCount = 1; 1029 Tab0 = { 1030 Frame = "{{0, 0}, {300, 533}}"; 1031 GroupTreeTableConfiguration = ( 1032 TargetStatusColumn, 1033 18, 1034 MainColumn, 1035 267, 1036 ); 1037 }; 1038 Tab1 = { 1039 ClassesFrame = "{{0, 0}, {280, 398}}"; 1040 ClassesTreeTableConfiguration = ( 1041 PBXBookColumnIdentifier, 1042 20, 1043 PBXClassColumnIdentifier, 1044 237, 1045 ); 1046 Frame = "{{0, 0}, {278, 659}}"; 1047 MembersFrame = "{{0, 407}, {280, 252}}"; 1048 MembersTreeTableConfiguration = ( 1049 PBXBookColumnIdentifier, 1050 20, 1051 PBXMethodColumnIdentifier, 1052 236, 1053 ); 1054 }; 1055 Tab2 = { 1056 Frame = "{{0, 0}, {200, 100}}"; 1057 }; 1058 Tab3 = { 1059 Frame = "{{0, 0}, {200, 386}}"; 1060 TargetTableConfiguration = ( 1061 ActiveObject, 1062 16, 1063 ObjectNames, 1064 202.296, 1065 ); 1066 }; 1067 Tab4 = { 1068 BreakpointsTreeTableConfiguration = ( 1069 breakpointColumn, 1070 197, 1071 enabledColumn, 1072 31, 1073 ); 1074 Frame = "{{0, 0}, {250, 386}}"; 1075 }; 1076 TabCount = 5; 1077 TabsVisible = NO; 1078 }; 1079 NavBarShownByDefault = YES; 1080 StatusViewVisible = YES; 1081 Template = F5534CB2020F3F8A0DCA290F; 1082 ToolbarVisible = YES; 1083 WindowLocation = "{34, -15}"; 1084 }, 1085 { 1086 ContentSize = "{668, 621}"; 1087 LeftSlideOut = { 1088 Collapsed = NO; 1089 Frame = "{{0, 0}, {668, 621}}"; 1090 Split0 = { 1091 Collapsed = NO; 1092 Frame = "{{0, 0}, {668, 621}}"; 1093 Split0 = { 1094 Frame = "{{0, 0}, {668, 621}}"; 1095 }; 1096 SplitCount = 1; 1097 Tab0 = { 1098 Frame = "{{0, 0}, {484, 208}}"; 1099 }; 1100 Tab1 = { 1101 Debugger = { 1102 Collapsed = NO; 1103 Frame = "{{0, 0}, {664, 208}}"; 1104 Split0 = { 1105 Frame = "{{0, 24}, {664, 184}}"; 1106 Split0 = { 1107 Frame = "{{0, 0}, {325, 184}}"; 1108 }; 1109 Split1 = { 1110 DebugVariablesTableConfiguration = ( 1111 Name, 1112 123, 1113 Value, 1114 85, 1115 Summary, 1116 96.123, 1117 ); 1118 Frame = "{{334, 0}, {330, 184}}"; 1119 }; 1120 SplitCount = 2; 1121 }; 1122 SplitCount = 1; 1123 Tab0 = { 1124 Frame = "{{0, 0}, {100, 50}}"; 1125 }; 1126 Tab1 = { 1127 Frame = "{{0, 0}, {100, 50}}"; 1128 }; 1129 TabCount = 2; 1130 TabsVisible = YES; 1131 }; 1132 Frame = "{{0, 0}, {664, 208}}"; 1133 LauncherConfigVersion = 7; 1134 }; 1135 Tab2 = { 1136 Frame = "{{0, 0}, {664, 50}}"; 1137 LauncherConfigVersion = 3; 1138 Runner = { 1139 Frame = "{{0, 0}, {664, 50}}"; 1140 }; 1141 }; 1142 Tab3 = { 1143 BuildMessageFrame = "{{0, 0}, {614, 262}}"; 1144 BuildTranscriptFrame = "{{0, 271}, {614, 2}}"; 1145 BuildTranscriptFrameExpanded = YES; 1146 Frame = "{{0, 0}, {612, 295}}"; 1147 }; 1148 Tab4 = { 1149 Frame = "{{0, 0}, {612, 295}}"; 1150 }; 1151 TabCount = 5; 1152 TabsVisible = NO; 1153 }; 1154 SplitCount = 1; 1155 Tab0 = { 1156 Frame = "{{0, 0}, {313, 531}}"; 1157 GroupTreeTableConfiguration = ( 1158 TargetStatusColumn, 1159 18, 1160 MainColumn, 1161 280, 1162 ); 1163 }; 1164 Tab1 = { 1165 ClassesFrame = "{{0, 0}, {280, 398}}"; 1166 ClassesTreeTableConfiguration = ( 1167 PBXBookColumnIdentifier, 1168 20, 1169 PBXClassColumnIdentifier, 1170 237, 1171 ); 1172 Frame = "{{0, 0}, {278, 659}}"; 1173 MembersFrame = "{{0, 407}, {280, 252}}"; 1174 MembersTreeTableConfiguration = ( 1175 PBXBookColumnIdentifier, 1176 20, 1177 PBXMethodColumnIdentifier, 1178 236, 1179 ); 1180 }; 1181 Tab2 = { 1182 Frame = "{{0, 0}, {200, 100}}"; 1183 }; 1184 Tab3 = { 1185 Frame = "{{0, 0}, {200, 557}}"; 1186 TargetTableConfiguration = ( 1187 ActiveObject, 1188 16, 1189 ObjectNames, 1190 202.296, 1191 ); 1192 }; 1193 Tab4 = { 1194 BreakpointsTreeTableConfiguration = ( 1195 breakpointColumn, 1196 197, 1197 enabledColumn, 1198 31, 1199 ); 1200 Frame = "{{0, 0}, {250, 100}}"; 1201 }; 1202 TabCount = 5; 1203 TabsVisible = NO; 1204 }; 1205 NavBarShownByDefault = YES; 1206 StatusViewVisible = NO; 1207 Template = F5CA7ECB015C094F0DCA290F; 1208 ToolbarVisible = NO; 1209 WindowLocation = "{48, 189}"; 208 1210 }, 209 1211 ); 210 PBXWorkspaceStateSaveDate = 52114527;1212 PBXWorkspaceStateSaveDate = 61528480; 211 1213 }; 212 1214 perUserProjectItems = { 213 F5F80FB0031B348401850618 = F5F80FB0031B348401850618; 214 F5F80FB1031B348401850618 = F5F80FB1031B348401850618; 1215 E190CFFE03AAD96100AEFBE0 = E190CFFE03AAD96100AEFBE0; 1216 E190CFFF03AAD96100AEFBE0 = E190CFFF03AAD96100AEFBE0; 1217 E190D00003AAD96100AEFBE0 = E190D00003AAD96100AEFBE0; 1218 E190D00103AAD96100AEFBE0 = E190D00103AAD96100AEFBE0; 1219 E190D00203AAD96100AEFBE0 = E190D00203AAD96100AEFBE0; 1220 E190D00303AAD96100AEFBE0 = E190D00303AAD96100AEFBE0; 1221 E190D00403AAD96100AEFBE0 = E190D00403AAD96100AEFBE0; 1222 E190D00503AAD96100AEFBE0 = E190D00503AAD96100AEFBE0; 1223 E190D00603AAD96100AEFBE0 = E190D00603AAD96100AEFBE0; 1224 E190D00703AAD96100AEFBE0 = E190D00703AAD96100AEFBE0; 1225 E190D00803AAD96100AEFBE0 = E190D00803AAD96100AEFBE0; 1226 E190D00903AAD96100AEFBE0 = E190D00903AAD96100AEFBE0; 1227 E190D00A03AAD96100AEFBE0 = E190D00A03AAD96100AEFBE0; 1228 E190D00B03AAD96100AEFBE0 = E190D00B03AAD96100AEFBE0; 1229 E190D00C03AAD96100AEFBE0 = E190D00C03AAD96100AEFBE0; 215 1230 }; 216 1231 projectwideBuildSettings = { 217 1232 }; 1233 userBookmarkGroup = E190CFF903AAA80600AEFBE0; 218 1234 wantsIndex = 1; 219 1235 wantsSCM = 0; … … 230 1246 ); 231 1247 }; 1248 E190CFF903AAA80600AEFBE0 = { 1249 children = ( 1250 E190CFFB03AAA84B00AEFBE0, 1251 ); 1252 isa = PBXBookmarkGroup; 1253 name = Root; 1254 }; 1255 E190CFFB03AAA84B00AEFBE0 = { 1256 fRef = 08FB7796FE84155DC02AAC07; 1257 isa = PBXTextBookmark; 1258 name = "handle URL/file arguments"; 1259 rLen = 0; 1260 rLoc = 17800; 1261 rType = 0; 1262 vrLen = 1773; 1263 vrLoc = 14523; 1264 }; 1265 E190CFFD03AAA8A300AEFBE0 = { 1266 fileReference = 08FB7796FE84155DC02AAC07; 1267 isa = PBXFileBreakpoint; 1268 lineNumber = 479; 1269 state = 1; 1270 }; 1271 E190CFFE03AAD96100AEFBE0 = { 1272 isa = PBXTargetBookmark; 1273 trg = 08FB779FFE84155DC02AAC07; 1274 }; 1275 E190CFFF03AAD96100AEFBE0 = { 1276 exec = F561F49E0139D79101AEEDB1; 1277 isa = PBXExecutableBookmark; 1278 }; 1279 E190D00003AAD96100AEFBE0 = { 1280 fRef = E190D00D03AAD96100AEFBE0; 1281 isa = PBXTextBookmark; 1282 name = "CFString.h: 146"; 1283 rLen = 25; 1284 rLoc = 6754; 1285 rType = 0; 1286 vrLen = 1812; 1287 vrLoc = 6085; 1288 }; 1289 E190D00103AAD96100AEFBE0 = { 1290 fRef = F5C0CA9501B5740C01AEEDB1; 1291 isa = PBXTextBookmark; 1292 name = "README: 76"; 1293 rLen = 0; 1294 rLoc = 2559; 1295 rType = 0; 1296 vrLen = 988; 1297 vrLoc = 2260; 1298 }; 1299 E190D00203AAD96100AEFBE0 = { 1300 fRef = E190D00E03AAD96100AEFBE0; 1301 glyphRangeLength = 886; 1302 glyphRangeLocation = 314; 1303 isa = PBXDocBookmark; 1304 name = "Miscellaneous234567891011.html: Adds the val..."; 1305 }; 1306 E190D00303AAD96100AEFBE0 = { 1307 fRef = E190D00F03AAD96100AEFBE0; 1308 glyphRangeLength = 682; 1309 glyphRangeLocation = 46353; 1310 isa = PBXDocBookmark; 1311 name = "Miscellaneous.html: Creates an i..."; 1312 }; 1313 E190D00403AAD96100AEFBE0 = { 1314 isa = PBXTargetBookmark; 1315 trg = 08FB779FFE84155DC02AAC07; 1316 }; 1317 E190D00503AAD96100AEFBE0 = { 1318 exec = F561F49E0139D79101AEEDB1; 1319 isa = PBXExecutableBookmark; 1320 }; 1321 E190D00603AAD96100AEFBE0 = { 1322 isa = PBXTargetBookmark; 1323 trg = 08FB779FFE84155DC02AAC07; 1324 }; 1325 E190D00703AAD96100AEFBE0 = { 1326 isa = PBXTargetBookmark; 1327 trg = 08FB779FFE84155DC02AAC07; 1328 }; 1329 E190D00803AAD96100AEFBE0 = { 1330 exec = F561F49E0139D79101AEEDB1; 1331 isa = PBXExecutableBookmark; 1332 }; 1333 E190D00903AAD96100AEFBE0 = { 1334 fRef = E190D01003AAD96100AEFBE0; 1335 isa = PBXTextBookmark; 1336 name = "CFString.h: 146"; 1337 rLen = 25; 1338 rLoc = 6754; 1339 rType = 0; 1340 vrLen = 1812; 1341 vrLoc = 6085; 1342 }; 1343 E190D00A03AAD96100AEFBE0 = { 1344 fRef = E190D01103AAD96100AEFBE0; 1345 glyphRangeLength = 682; 1346 glyphRangeLocation = 46353; 1347 isa = PBXDocBookmark; 1348 name = "Miscellaneous.html: Creates an i..."; 1349 }; 1350 E190D00B03AAD96100AEFBE0 = { 1351 fRef = F5C0CA9501B5740C01AEEDB1; 1352 isa = PBXBookmark; 1353 }; 1354 E190D00C03AAD96100AEFBE0 = { 1355 fRef = F5C0CA9501B5740C01AEEDB1; 1356 isa = PBXTextBookmark; 1357 name = "README: 194"; 1358 rLen = 0; 1359 rLoc = 6232; 1360 rType = 0; 1361 vrLen = 1727; 1362 vrLoc = 5501; 1363 }; 1364 E190D00D03AAD96100AEFBE0 = { 1365 isa = PBXFileReference; 1366 name = CFString.h; 1367 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFString.h; 1368 refType = 0; 1369 }; 1370 E190D00E03AAD96100AEFBE0 = { 1371 isa = PBXFileReference; 1372 name = Miscellaneous234567891011.html; 1373 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Resources/English.lproj/Documentation/CollectionServices/Collection_Services/Functions/Miscellaneous234567891011.html; 1374 refType = 0; 1375 }; 1376 E190D00F03AAD96100AEFBE0 = { 1377 isa = PBXFileReference; 1378 name = Miscellaneous.html; 1379 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Resources/English.lproj/Documentation/StringServices/String_Services/Functions/Miscellaneous.html; 1380 refType = 0; 1381 }; 1382 E190D01003AAD96100AEFBE0 = { 1383 isa = PBXFileReference; 1384 name = CFString.h; 1385 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFString.h; 1386 refType = 0; 1387 }; 1388 E190D01103AAD96100AEFBE0 = { 1389 isa = PBXFileReference; 1390 name = Miscellaneous.html; 1391 path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Resources/English.lproj/Documentation/StringServices/String_Services/Functions/Miscellaneous.html; 1392 refType = 0; 1393 }; 232 1394 F561F49E0139D79101AEEDB1 = { 233 activeArgIndex = 0; 1395 activeArgIndex = 1; 1396 activeArgIndices = ( 1397 NO, 1398 YES, 1399 ); 234 1400 argumentStrings = ( 235 1401 "-nu file:///Applications/Prerelease/Mozilla.app", 1402 "-c MSIE http://web.sabi.net/", 236 1403 ); 1404 configStateDict = { 1405 }; 237 1406 debuggerPlugin = GDBDebugging; 238 1407 dylibVariantSuffix = ""; … … 250 1419 fileReference = 08FB7796FE84155DC02AAC07; 251 1420 isa = PBXFileBreakpoint; 252 lineNumber = 520;1421 lineNumber = 609; 253 1422 state = 1; 254 1423 }; 255 F5F80FB0031B348401850618 = {256 fRef = 08FB7796FE84155DC02AAC07;257 isa = PBXBookmark;258 };259 F5F80FB1031B348401850618 = {260 fRef = 08FB7796FE84155DC02AAC07;261 isa = PBXTextBookmark;262 name = "main.c: 674";263 rLen = 0;264 rLoc = 26707;265 rType = 0;266 vrLen = 1159;267 vrLoc = 25548;268 };269 1424 } -
trunk/launch/launch/launch.pbproj/project.pbxproj
r3 r52 55 55 014CEA4A0018CE3211CA2923, 56 56 ); 57 hasScannedForEncodings = 1; 57 58 isa = PBXProject; 58 59 mainGroup = 08FB7794FE84155DC02AAC07; … … 83 84 }; 84 85 08FB7796FE84155DC02AAC07 = { 86 fileEncoding = 30; 85 87 isa = PBXFileReference; 86 88 path = main.c; … … 125 127 productName = launch; 126 128 productReference = 034768E2FF38A6DC11DB9C8B; 127 shouldUseHeadermap = 1;128 129 }; 129 130 08FB77A0FE84155DC02AAC07 = { … … 132 133 ); 133 134 isa = PBXHeadersBuildPhase; 135 runOnlyForDeploymentPostprocessing = 0; 134 136 }; 135 137 08FB77A1FE84155DC02AAC07 = { … … 139 141 ); 140 142 isa = PBXSourcesBuildPhase; 143 runOnlyForDeploymentPostprocessing = 0; 141 144 }; 142 145 08FB77A2FE84155DC02AAC07 = { … … 157 160 ); 158 161 isa = PBXFrameworksBuildPhase; 162 runOnlyForDeploymentPostprocessing = 0; 159 163 }; 160 164 08FB77A5FE84155DC02AAC07 = { … … 163 167 ); 164 168 isa = PBXRezBuildPhase; 169 runOnlyForDeploymentPostprocessing = 0; 165 170 }; 166 171 //080 … … 227 232 }; 228 233 F574340B01B8A47B01AEEDB1 = { 234 fileEncoding = 30; 229 235 isa = PBXFileReference; 230 236 path = VERSION; … … 244 250 }; 245 251 F5C0CA9501B5740C01AEEDB1 = { 252 fileEncoding = 30; 246 253 isa = PBXFileReference; 247 254 path = README; -
trunk/launch/launch/main.c
r3 r52 23 23 - Does -X work at all? What does it return if it fails? 24 24 25 - Create blank document la my existing BBEdit alias? Use26 template/stationery?27 28 - Allow piping (like BBEdit, again?)29 30 25 - Launching as root: use authentication framework - doesn't work. 26 27 - launch URL with specified URL handler (done, except for IC) 31 28 32 29 - launch apps by IC protocol handler (esp. editor) … … 46 43 47 44 #include <unistd.h> 45 #include <sys/stat.h> 48 46 #include <Carbon/Carbon.h> 49 47 #include <CoreServices/CoreServices.h> … … 58 56 const char *APP_NAME; 59 57 60 #define VERSION "1.0 a9"58 #define VERSION "1.0b1" 61 59 62 60 #define STRBUF_LEN 1024 … … 78 76 79 77 LSLaunchURLSpec LSPEC = {NULL, NULL, NULL, DEFAULT_LAUNCH_FLAGS, NULL}; 78 79 char *TEMPFILE = NULL; 80 80 81 81 typedef struct { … … 107 107 108 108 void usage() { 109 fprintf(stderr, "usage: %s [-npswbmhCX] [-c creator] [-i bundleID] [-u URL] [-a name] [ document ...]\n"109 fprintf(stderr, "usage: %s [-npswbmhCX] [-c creator] [-i bundleID] [-u URL] [-a name] [item ...] [-]\n" 110 110 " or: %s [-npflswbmhCX] item ...\n", APP_NAME, APP_NAME); 111 111 fprintf(stderr, … … 140 140 errRec *rec; 141 141 const char *errDesc = "unknown error"; 142 c onst char *failedStr = "(unable to retrieve error message)";142 char * const failedStr = "(unable to retrieve error message)"; 143 143 static char *str = NULL; 144 144 size_t len; … … 152 152 str = (char *)malloc(len); 153 153 if (str != NULL) 154 snprintf(str, len, "%s (% d)", errDesc, (long)err);154 snprintf(str, len, "%s (%ld)", errDesc, err); 155 155 else 156 156 str = failedStr; … … 242 242 #endif 243 243 244 void getargs(int argc, const char *argv[]) { 244 CFURLRef normalizedURLFromString(CFStringRef str) { 245 CFURLRef url = CFURLCreateWithString(NULL, str, NULL); 246 if (url != NULL) { 247 CFURLRef absURL = CFURLCopyAbsoluteURL(url); 248 CFRelease(url); 249 url = NULL; 250 if (absURL != NULL) { 251 CFStringRef scheme = CFURLCopyScheme(absURL); 252 url = absURL; 253 if (scheme == NULL) { 254 CFRelease(url); 255 url = NULL; 256 } 257 } 258 } 259 return url; 260 } 261 262 CFURLRef normalizedURLFromPrefixSlack(CFStringRef prefix, CFStringRef slackStr) { 263 CFStringRef str = CFStringCreateWithFormat(NULL, NULL, CFSTR("%@%@"), 264 prefix, slackStr); 265 CFURLRef normalizedURL = normalizedURLFromString(str); 266 CFRelease(str); 267 return normalizedURL; 268 } 269 270 char *tempFile(int *fd) { 271 char *tmpDir = getenv("TMPDIR"); 272 const char * const tempTemplate = "/launch-stationery-XXXXXXXX"; 273 char *tempPath; 274 OSStatus err; 275 FSRef fsr; 276 FSCatalogInfo catalogInfo; 277 FileInfo *fInfo; 278 279 // create temporary file 280 if (tmpDir == NULL) tmpDir = "/tmp"; 281 tempPath = (char *)malloc(strlen(tmpDir) + strlen(tempTemplate) + 1); 282 if (tempPath == NULL) errexit("can't allocate memory"); 283 strcpy(tempPath, tmpDir); 284 strcat(tempPath, tempTemplate); 285 if ( (*fd = mkstemp(tempPath)) == -1) 286 errexit("can't create temporary file '%s'", tempPath); 287 // mark file as stationery 288 err = FSPathMakeRef(tempPath, &fsr, NULL); 289 if (err != noErr) osstatusexit(err, "can't find '%s'", tempPath); 290 err = FSGetCatalogInfo(&fsr, kFSCatInfoFinderInfo, &catalogInfo, NULL, NULL, NULL); 291 if (err != noErr) osstatusexit(err, "can't get information for '%s'", tempPath); 292 fInfo = (FileInfo *)&(catalogInfo.finderInfo); 293 fInfo->finderFlags |= kIsStationery; 294 err = FSSetCatalogInfo(&fsr, kFSCatInfoFinderInfo, &catalogInfo); 295 if (err != noErr) osstatusexit(err, "can't set information for '%s'", tempPath); 296 297 return tempPath; 298 } 299 300 char *stdinAsTempFile() { 301 unsigned char *buf; 302 int bufsize; 303 // Actual number of characters read, and therefore written. 304 ssize_t charCount; 305 int fd; 306 struct stat stat_buf; 307 char *tempFilePath; 308 309 tempFilePath = tempFile(&fd); 310 311 if (fstat(fd, &stat_buf) == -1) 312 errexit("can't fstat temporary file '%s'", tempFilePath); 313 314 bufsize = stat_buf.st_blksize; 315 if ( (buf = (unsigned char *)malloc(bufsize * sizeof(unsigned char))) == NULL) 316 errexit("can't allocate %ld bytes of buffer memory", 317 bufsize * sizeof(unsigned char)); 318 319 // Loop until the end of the file. 320 while (1) { 321 // Read a block of input. 322 charCount = read(STDIN_FILENO, buf, bufsize); 323 if (charCount < 0) { 324 errexit("can't read from standard input"); 325 } 326 // End of this file? 327 if (charCount == 0) 328 break; 329 // Write this block out. 330 if (write(fd, buf, charCount) != charCount) 331 errexit("error writing to file '%s'", tempFilePath); 332 } 333 free(buf); 334 return tempFilePath; 335 } 336 337 void getargs(int argc, char * const argv[]) { 245 338 extern char *optarg; 246 339 extern int optind; … … 311 404 break; 312 405 case 'u': 313 LSPEC.appURL = CFURLCreateWithString(NULL, 314 CFStringCreateWithCString(NULL, optarg, CFStringGetSystemEncoding()), NULL); 406 { CFStringRef str = CFStringCreateWithCString(NULL, optarg, CFStringGetSystemEncoding()); 407 LSPEC.appURL = CFURLCreateWithString(NULL, str, NULL); 408 if (str != NULL) CFRelease(str); 409 } 315 410 if (LSPEC.appURL == NULL) { 316 411 errexit("invalid URL (argument of -u)"); … … 354 449 355 450 if (OPTS.action == ACTION_LAUNCH_URLS && appSpecified) 356 errexit("sorry, launching URLs with a given application is not yet supported"); // XXX 451 errexit("launching URLs with a given application is not supported; try without -l"); 357 452 358 453 if (OPTS.action == ACTION_INFO_ITEMS && appSpecified) … … 365 460 int i; 366 461 OSStatus err; 367 CFStringRef pathstr;462 CFStringRef argStr; 368 463 CFURLRef itemURL; 369 464 LSItemInfoRecord docInfo; … … 375 470 LSPEC.itemURLs = CFArrayCreateMutable(NULL, argc, NULL); 376 471 for (i = 0 ; i < argc ; i++) { 377 pathstr = CFStringCreateWithCString(NULL, argv[i], CFStringGetSystemEncoding()); 378 itemURL = NULL; 379 if (OPTS.action == ACTION_FIND_ITEMS || OPTS.action == ACTION_OPEN_ITEMS || 380 OPTS.action == ACTION_LAUNCH_URLS || OPTS.action == ACTION_INFO_ITEMS) { // check for URLs 381 itemURL = CFURLCreateWithString(NULL, pathstr, NULL); 382 if (itemURL != NULL) { 383 CFURLRef absURL = CFURLCopyAbsoluteURL(itemURL); 384 CFRelease(itemURL); 385 itemURL = NULL; 386 if (absURL != NULL) { 387 CFStringRef scheme = CFURLCopyScheme(absURL); 388 itemURL = absURL; 389 if (scheme == NULL) { 390 CFRelease(itemURL); 391 itemURL = NULL; 392 } 393 } 472 argStr = NULL; 473 if (strcmp(argv[i], "-") == 0) { 474 TEMPFILE = stdinAsTempFile(); 475 itemURL = CFURLCreateFromFileSystemRepresentation(NULL, TEMPFILE, strlen(TEMPFILE), false); 476 LSPEC.launchFlags ^= kLSLaunchAsync; 477 } else { 478 argStr = CFStringCreateWithCString(NULL, argv[i], CFStringGetSystemEncoding()); 479 // check for URLs 480 itemURL = normalizedURLFromString(argStr); 481 if (itemURL == NULL && OPTS.action == ACTION_LAUNCH_URLS) { 482 // check for email addresses 483 if (strchr(argv[i], '@') != NULL && strchr(argv[i], '/') == NULL) 484 itemURL = normalizedURLFromPrefixSlack(CFSTR("mailto:"), argStr); 485 // check for "slack" URLs 486 if (itemURL == NULL && strchr(argv[i], '.') != NULL && strchr(argv[i], '/') != argv[i]) 487 itemURL = normalizedURLFromPrefixSlack(CFSTR("http://"), argStr); 488 } 489 if (itemURL == NULL) { 490 // check for file paths 491 itemURL = CFURLCreateWithFileSystemPath(NULL, argStr, kCFURLPOSIXPathStyle, false); 492 err = LSCopyItemInfoForURL(itemURL, kLSRequestExtensionFlagsOnly, &docInfo); 493 if (err != noErr) osstatusexit(err, "unable to locate '%s'", argv[i]); 394 494 } 395 495 } 396 if (itemURL == NULL) {397 itemURL = CFURLCreateWithFileSystemPath(NULL, pathstr, kCFURLPOSIXPathStyle, false);398 err = LSCopyItemInfoForURL(itemURL, kLSRequestExtensionFlagsOnly, &docInfo);399 if (err != noErr) osstatusexit(err, "unable to locate '%s'", argv[i]);400 }401 496 CFArrayAppendValue((CFMutableArrayRef)LSPEC.itemURLs, itemURL); 402 CFRelease(pathstr); 497 // don't CFRelease the itemURL because CFArray doesn't retain it by default 498 if (argStr != NULL) CFRelease(argStr); 403 499 } 404 500 } … … 616 712 } 617 713 618 int main (int argc, c onst char *argv[]) {714 int main (int argc, char * const argv[]) { 619 715 OSStatus err; 620 716 … … 670 766 } 671 767 768 if (TEMPFILE != NULL) { 769 // the application may take a while to finish opening the temporary file 770 daemon(0, 0); 771 sleep(60); 772 unlink(TEMPFILE); 773 } 774 672 775 return 0; 673 776 }
Note:
See TracChangeset
for help on using the changeset viewer.