Thanks. The recommendations worked. Adding L:(…) around all the injections selector does the trick. I don’t know why it didn’t work for me then, but probably because of the second problem. Simplifying the other selectors and not trying to follow the ERB syntax makes everything a little bit easier to understand (and correctly syntax highlight both languages in the same file).
Thanks a lot for the help!
El lunes, 30 de mayo de 2016 a las 14:36, textmate-request(a)lists.macromates.com (mailto:textmate-request@lists.macromates.com) escribió:
> On 16 May 2016, at 17:29, Daniel Rodr?guez Troiti?o wrote:
>
> > A simple version of my grammar looks like this:
> > [?]
> > 'source.swift.gyb - (meta.embedded.block.gyb)' = {
> The injection scope selector should use L:(?) so your injected rules
> go before Swift?s (as you also write yourself).
>
> > { begin = '(^|\s*)(?=%\{(?![^\}]*\}%))';
> This seems to be the problem, this rule doesn?t actually match
> anything as it?s a ?begin of line? assertion and then a ?look
> ahead? assertion.
>
> So while the rule ?matches? when you have `%{` at the beginning of a
> line, no characters are consumed, so we descend into the rule?s
> patterns, but here we also have the Swift rules, and the L:(?) only
> affects the priority of the root rules injected (not their children), so
> the Swift rule will consume the `%` character because it was not
> consumed by the parent rule?s begin pattern.
>
> A minimal version of your grammar that works would be this:
>
> { injections = {
> 'L:(source.swift.gyb - meta.embedded.block.gyb)' = {
> patterns = (
> { name = 'meta.embedded.block.gyb';
> begin = '%\{';
> end = '\}%';
> contentName = 'source.python';
> patterns = ( { include = 'source.python'; } );
> },
> );
> };
> };
> patterns = ( { include = 'source.swift'; } );
> }
>
> I understand you wanted to scope the leading/trailing whitespace and
> then re-use the actual matching of %{ and %}, but I don?t think this
> is possible, though I think it will be simpler to add optional matches
> like this:
>
> begin = '(^\s*)?%\{';
> end = '\}%(\s*$)?';
>
> Then name these captures for
> `punctuation.whitespace.embedded.[leading|trailing].gyb`.
I tried to open a folder in TextMate today (one I open often) and it
crashed. (It was already running, as always.) Ever since, I’ve been
unable to get it to launch.
It detects the crash and asks about restoring open documents. It crashes
no matter what I choose there.
I haven’t changed any preferences or bundles or installed any updates
today.
I’ve tried:
* `defaults delete com.macromates.TextMate.preview.LSSharedFileList`
* `defaults delete com.macromates.TextMate.preview`
* `mv ~/.tm_properties ~/foo`
* trashed `~/Library/Saved Application
State/com.macromates.TextMate.preview.savedState`
* trashed `~/Library/Caches/com.macromates.TextMate.preview`
* restored `~/Library/Applicaiton Support/Avian` and `TextMate` from
a backup taken this morning
* downloaded the app again from the web site
* tried an older version (beta 7.3)
* rebooting, like a poor beleaguered Windows user
The only thing that *did* work was launching it as a different user, so
it’s something with my account, but what’s left?
I haven’t tried deleting all my bundles, but from the dates, I don’t
think any have changed since March.
From the crash log:
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_platform.dylib 0x00007fff94e40331
_platform_memmove$VARIANT$Ivybridge + 49
1 com.macromates.TextMate.OakTextView 0x000000010f92dfe1
oak::callbacks_t<ng::callback_t, false>::remove(ng::callback_t*) + 105
2 com.macromates.TextMate.OakTextView 0x000000010f8feeea
-[OakTextView setDocument:] + 437
3 com.macromates.TextMate.OakTextView 0x000000010f8f0584
-[OakDocumentView setDocument:] + 643
4 com.macromates.TextMate.OakTextView 0x000000010f8f01f4
-[OakDocumentView dealloc] + 457
5 libobjc.A.dylib 0x00007fff9676389c
objc_object::sidetable_release(bool) + 236
6 libobjc.A.dylib 0x00007fff96749e8f (anonymous
namespace)::AutoreleasePoolPage::pop(void*) + 575
7 com.apple.CoreFoundation 0x00007fff93a6b6f2
_CFAutoreleasePoolPop + 50
8 com.apple.Foundation 0x00007fff89f13762
-[NSAutoreleasePool drain] + 153
9 com.apple.Foundation 0x00007fff89f2d5cc
_NSAppleEventManagerGenericHandler + 121
10 com.apple.AE 0x00007fff8d45934c
aeDispatchAppleEvent(AEDesc const*, AEDesc*, unsigned int, unsigned
char*) + 531
11 com.apple.AE 0x00007fff8d4590c9
dispatchEventAndSendReply(AEDesc const*, AEDesc*) + 31
12 com.apple.AE 0x00007fff8d458fd3
aeProcessAppleEvent + 295
13 com.apple.HIToolbox 0x00007fff90935c6e
AEProcessAppleEvent + 56
14 com.apple.AppKit 0x00007fff8e357da2 _DPSNextEvent
+ 2249
15 com.apple.AppKit 0x00007fff8e356e58
-[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 346
16 com.apple.AppKit 0x00007fff8e34caf3
-[NSApplication run] + 594
17 com.apple.AppKit 0x00007fff8e2c9244
NSApplicationMain + 1832
18 com.macromates.TextMate.preview 0x000000010f533f19 main + 840
19 com.macromates.TextMate.preview 0x000000010f51e914 start + 52
Thanks!
--
Rob McBroom
http://www.skurfer.com/
Hello,
I have a few questions about the gutter and status bar:
Is there a way to fully turn off the gutter?
Is there a way to theme the gutter?
Is there a way to customize the gutter and only show the line numbers but not the fold markers, for example.
Is there a way to customize what is shown in the status bar, for example, to remove the record button? (I know the full status bar can be turned off with a ‘default’ command.)
Is there a way to fully turn off the “control bar” at the bottom of the file browser?
If the above are not currently possible, are there any plans to add support for such? Also, is the application architected in a way that (some of) the above would be straight forward to implement? If so, I would be willing to do it.
Thank you,
Erik
Hi,
I was trying to create a composed grammar for Gyb (https://github.com/apple/swift/blob/master/utils/gyb.py). Gyb is mostly Swift code, with some snippets of Python embedded. For embedding the Python code you surround the code with `%{ }%` or start the lines with `%`.
For parsing Swift or Python code I’m using the official bundles (https://github.com/textmate/swift.tmbundle and https://github.com/textmate/python.tmbundle). For the injection I based my grammar on HTML (Rails) (https://github.com/textmate/ruby-on-rails-tmbundle/blob/master/Syntaxes/HTM…) which is mostly the same idea.
The grammar almost works. The embedded blocks are marked and the syntax highlight works, but I need to include a space before the percent signs for it to work, which is not ideal. It looks like the percent sign are interpreted as keyword.operator.remainder.swift (https://github.com/textmate/swift.tmbundle/blob/master/Syntaxes/Swift.tmLan…) before being able to be part of the injected grammar.
I found some references that “left scope match” (L:) might be able to help, but I cannot find a way to get it working.
A simple version of my grammar looks like this:
```
{ injections = {
'source.swift.gyb - (meta.embedded.block.gyb)' = {
patterns = (
{ begin = '(^|\s*)(?=%\{(?![^\}]*\}%))';
end = '(?!\G)(\s*$\n)?';
beginCaptures = { 0 = { name = 'punctuation.whitespace.embedded.leading.gyb'; }; };
endCaptures = { 0 = { name = 'punctuation.whitespace.embedded.trailing.gyb'; }; };
patterns = ( { include = '#tags'; } );
},
{ include = '#tags'; },
);
};
};
patterns = ( { include = 'source.swift'; } );
repository = {
tags = {
patterns = (
{ name = 'meta.embedded.block.gyb';
begin = '%\{';
end = '(\})%';
beginCaptures = { 0 = { name = 'punctuation.section.embedded.begin.gyb'; }; };
endCaptures = {
0 = { name = 'punctuation.section.embedded.end.gyb'; };
1 = { name = 'source.python'; };
};
contentName = 'source.python';
patterns = ( { include = 'source.python'; } );
},
},
},
}
```
A text like this will work:
```
class MyClass {
%{
a = 1
}%
}
```
If I remove the space before the first percent sign, the grammar will not create the embedded block at all.
I tried using several scope selectors with `L:` to see if they work:
- `L:(source.swift.gyb - (meta.embedded.block.gyb))`
- `source.swift.gyb - (meta.embedded.block.gyb), L:source.swift.gyb`
- `source.swift.gyb - (meta.embedded.block.gyb), L:source.swift`
- `source.swift.gyb - (meta.embedded.block.gyb), L:source.swift keyword.operator.remainder.swift`
- `source.swift.gyb - (meta.embedded.block.gyb), L:keyword.operator.remainder.swift`
None of them seem to work.
Does someone has any tips about what should I try next?
Thanks!
Hello,
I am working around in the code, and I was trying to determine where the row iterator object used in layout.cc is defined so I might study it’s properties? Could anyone point me in the right direction? Much appreciated.
Josh
I just tried the new indent guides. I think it looks pretty ugly that
the indent guides are render over the full width of the document. In
most editors I've used which support this feature the indent guides are
rendered up to the start of the text on a given line.
--
/Jacob Carlborg
Hi -
For the last week or so, the contents of the Go to Symbol window have been totally scrambled for me in all the languages I’ve tried. Sometimes (After restarting TM) the Go to Symbol window contains the entire file on one line without linebreaks. Other times there are many lines, each with several lines worth of source in them, but no clear relation to any of the function definitions in the file.
I suspect this is a corrupted settings file somewhere; I’ve got my TM settings synced to Dropbox so when two different machines are open at the same time a number of things go screwy. I wasn’t sure how to start debugging this one though short of going spelunking in the source.
Is anybody familiar enough with the inner workings of this command to point me to what settings might be corrupted?
Cheers,
Evan
Example:
In the C code at the bottom, I would usually expect to see 4 lines in the list of symbols:
```
#include <stdio.h>
void other();
int main(){
void other(){
```
Instead, I get the entire contents of the file on one line:
```#include <stdio.h>void other();int main(){printf("line 1 after 'main' symbol\n");printf("line 2 after 'main' symbol\n");other();}void other(){printf("line 1 after 'other' symbol\n");printf("line 2 after 'other' symbol\n");}```
Source file:
```
#include <stdio.h>
void other();
int main(){
printf("line 1 after 'main' symbol\n");
printf("line 2 after 'main' symbol\n");
other();
}
void other(){
printf("line 1 after 'other' symbol\n");
printf("line 2 after 'other' symbol\n");
}
```
Hi,
what is the best way to share snippets or entire plugins, so that they can easily be installed and updated automatically by TextMate?
I still do not completely understand the Avian / Bundles mechanism and having to check manually for updates and “git pull” them is not very user friendly…
Fabian