+22
Need ability to open file to specific line from external applications (OSX)
When the Unity3D authoring tool shows warnings or errors about a line of code, you can double click the line in the Unity console to open the specified file in an external text editor.
In TextMate, BBEdit, Smultron, and MonoDevelop the specified file opens with the cursor at the specified line. This is not the behavior in Sublime Text 2. It would be very useful to include this behavior in Sublime Text, I'm assuming that the line number is passed as an argument in the open file event.
Служба підтримки клієнтів працює на UserEcho
Already exists. From "subl --help":
"Filenames may be given a :line or :line:column suffix to open at a specific location."It's the one thing that's keeping me on the fence about Sublime Text. I know a number of Unity3D developers evaluating the editor are also asking about this feature too.
Similar feature request:
http://sublimetext.userecho.com/topic/111445-barebones-api-support-on-osx-to-get-unity-3d-working-with-sublime/
It seems like sublime text 2 isn't paying attention to the 'kpos' parameter of the 'odoc' apple event. If I do this with BBEdit the apple even sent is the same but the insertion point is place in the correct place:
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 1 } 'aevt': aevt/rapp (i386){
Oct 22 12:30:33 com.barebones.bbedit[32725]: return id: 32699 (0x7fbb)
Oct 22 12:30:33 com.barebones.bbedit[32725]: transaction id: 0 (0x0)
Oct 22 12:30:33 com.barebones.bbedit[32725]: interaction level: 112 (0x70)
Oct 22 12:30:33 com.barebones.bbedit[32725]: reply required: 0 (0x0)
Oct 22 12:30:33 com.barebones.bbedit[32725]: remote: 0 (0x0)
Oct 22 12:30:33 com.barebones.bbedit[32725]: for recording: 0 (0x0)
Oct 22 12:30:33 com.barebones.bbedit[32725]: reply port: 10507 (0x290b)
Oct 22 12:30:33 com.barebones.bbedit[32725]: target:
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 1 } 'psn ': 8 bytes {
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 0x0, 0x2f02f0 } (Unity)
Oct 22 12:30:33 com.barebones.bbedit[32725]: }
Oct 22 12:30:33 com.barebones.bbedit[32725]: fEventSourcePSN: { 0x0,0x2f02f0 } (Unity)
Oct 22 12:30:33 com.barebones.bbedit[32725]: optional attributes:
Oct 22 12:30:33 com.barebones.bbedit[32725]: < empty record >
Oct 22 12:30:33 com.barebones.bbedit[32725]: event data:
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 1 } 'aevt': - 0 items {
Oct 22 12:30:33 com.barebones.bbedit[32725]: }
Oct 22 12:30:33 com.barebones.bbedit[32725]: }
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 1 } 'aevt': aevt/odoc (i386){
Oct 22 12:30:33 com.barebones.bbedit[32725]: return id: 32700 (0x7fbc)
Oct 22 12:30:33 com.barebones.bbedit[32725]: transaction id: 0 (0x0)
Oct 22 12:30:33 com.barebones.bbedit[32725]: interaction level: 16 (0x10)
Oct 22 12:30:33 com.barebones.bbedit[32725]: reply required: 0 (0x0)
Oct 22 12:30:33 com.barebones.bbedit[32725]: remote: 0 (0x0)
Oct 22 12:30:33 com.barebones.bbedit[32725]: for recording: 0 (0x0)
Oct 22 12:30:33 com.barebones.bbedit[32725]: reply port: 10507 (0x290b)
Oct 22 12:30:33 com.barebones.bbedit[32725]: target:
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 1 } 'psn ': 8 bytes {
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 0x0, 0x2f02f0 } (Unity)
Oct 22 12:30:33 com.barebones.bbedit[32725]: }
Oct 22 12:30:33 com.barebones.bbedit[32725]: fEventSourcePSN: { 0x0,0x2f02f0 } (Unity)
Oct 22 12:30:33 com.barebones.bbedit[32725]: optional attributes:
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 1 } 'reco': - 1 items {
Oct 22 12:30:33 com.barebones.bbedit[32725]: key 'shas' -
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 1 } 'list': - 1 elements {
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 1 } 'TEXT': 218 bytes {
Oct 22 12:30:33 com.barebones.bbedit[32725]: "7a4094ec7aca52f44c117bac760ca3116372834c;00000000;0000000000000020;com.apple.app-sandbox.read-write;00000001;0e000002;0000000000a9cf30;/users/private/documents/work/projects/tests/terraintest2-unity/assets/terraintest.cs"
Oct 22 12:30:33 com.barebones.bbedit[32725]: }
Oct 22 12:30:33 com.barebones.bbedit[32725]: }
Oct 22 12:30:33 com.barebones.bbedit[32725]: }
Oct 22 12:30:33 com.barebones.bbedit[32725]: event data:
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 1 } 'aevt': - 3 items {
Oct 22 12:30:33 com.barebones.bbedit[32725]: key '----' -
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 1 } 'fsrf': 80 bytes {
Oct 22 12:30:33 com.barebones.bbedit[32725]: 000: 9cff 0080 0000 0000 30cf a900 9ed7 9000 ........0.......
Oct 22 12:30:33 com.barebones.bbedit[32725]: 001: 0000 0000 0000 0000 0000 0000 0000 0000 ................
Oct 22 12:30:33 com.barebones.bbedit[32725]: 002: 0000 0000 0000 0000 0000 0000 0000 0000 ................
Oct 22 12:30:33 com.barebones.bbedit[32725]: 003: 0000 0000 0000 0000 0000 0000 0000 0000 ................
Oct 22 12:30:33 com.barebones.bbedit[32725]: 004: 0000 0000 0000 0000 0000 0000 0000 0000 ................
Oct 22 12:30:33 com.barebones.bbedit[32725]:
Oct 22 12:30:33 com.barebones.bbedit[32725]: }
Oct 22 12:30:33 com.barebones.bbedit[32725]: key 'kpos' -
Oct 22 12:30:33 com.barebones.bbedit[32725]: { 1 } 'TEXT': 20 bytes {
Oct 22 12:30:33 com.barebones.bbedit[32725]: "
basically seems like the sublime text 2 programmers aren't paying attention to that last appleevent arguement 'kpos' that Unity is sending out. Maybe someone knows them and can suggest/request that they add this ASAP! :)
BTW - this is nothing to do with a BareBones API - this is straight up Apple Events Open Document Apple Event parameter documented here:
http://developer.apple.com/legacy/mac/library/documentation/mac/pdf/Interapplication_Communication/AE_Term_Resources.pdf
search for "keyAEPosition"
Indeed it's straight up Apple Events handling. The reason, apparently that TextMate and MacVim work correctly when Unity3d launches them, is because of their scripting implementation. It doesn't work with SublimeText 2 or 3. So yeah, big bump here!
On the Mac OS X side, I have gotten a start at a Cocoa app to proxy the Apple Event over to Sublime Text. When I get the event, however, the kpos param looks like an empty string:
5/19/13 11:53:37.002 PM Unity[5720]: AE2000 (5720 ): Sending an event:
------oo start of event oo------
aevt('aevt'\'odoc' transactionID=0 sourcePSN=[0x0,6e06e "MonoDevelop-Unity"] timeout=7200 eventSource=3 { '----':fsrf("/Users/tkeating/hg-repos/Kingdoms/Assets/Scripts/maps/TraverseWaypointAI.cs"), 'kpos':TEXT(""), 'FSnd':type('UNED') })
------oo end of event oo------
(AESendMessage()/AEMach.cp #2482) main
I'm sure there's actually some data in the NSAppleEventDescriptor, because (as you can tell if you look carefully at that example) this is actually an event that Unity sent to MonoDevelop, which correctly jumps to the indicated line. However, I can't seem to figure out how to extract it.
If anyone has a wild hair and wants to try and take a crack at figuring out how to get valid data out of the event descriptor, the project is available at https://github.com/MrTact/SublimeProxy.
Hey,
so I forked Tim's project and made it work. Check out the blog post explaining how I did it, along with a link to the Github page, here:
http://twistedoakstudios.com/blog/Post5204_making-sublime-text-2-jump-to-the-correct-line-with-unity-on-os-x