Hi,
Over the past years I wrote some very tiny code snippets in order to
save time while using TM. I copy&pasted it from one code to a new
command etc. Then I had the idea to put everything together in a
plugin to use my code snippets more flexible.
Ok, I did this. I took the idea of tm_dialog, Joachim Mårtensson's
completion menu, and me tiny code snippets. The result is the TMTOOLS
plugin.
usage:
"$TMTOOLS" -[fsgiem] -p PLIST
f --extended-popup
s --set
g --get
i --insert
e --execute
m --play macro
Each of the following commands can be used within any tmCommand/
script written in bash, ruby, perl, etc.
(tentative) LIST OF COMMANDS:
-----------------------------------------------
Show as completion menu:
-TM's internal word list completion
-Word completion with Cocoa's spellchecker dictionaries of different
languages
(TM's internal word completion list is added before the
spellchecker's list :)
-File/Path Completion
-Insert text
-Insert text as snippet
Set: (also as batch)
-set word characters
-place the caret to
-select something within the document
-set tab size
-set soft tabs
-set soft wrap
-set the language/grammar by its name
-set show line numbers
-set font size
-set font name
-set bookmarks for lines
-set userdefault for a key
-play a dynamic generated macro
Get:
-get the _current_ text from the document
-get the XML representation of the document
-get the XML representation of the selection
-get the position under the caret
-get all bookmarks out the current document
-get all symbols
-is document edited?
-get font size
-get font name
-get current stylesheet
-get all opened files in a project
-get the default for a key
-get the head of the current line according to the caret
-get the tail of the current line according to the caret
-get the head of the current word according to the caret
-get the tail of the current word according to the caret
Execute: (also as batch)
-reloadBundles
-select current scope
-run any macro, command, template, or snippet by its name
-open saveAs panel
-open open Panel
-open web preview
-open bundle editor
-open print panel
-center selection in window
-delete all bookmarks
-go to next/previous snippet field
-convert a text according to unicode's mapping [(de)compose]
and some more...
One can do very nice things with TMTOOLS.
E.g., by myself I'm using very often
-go to next snippet field and show suggestions according the selected
text, select a suggestion, and go to the next snippet field
(It was always annoying to see only 'NSStringEncoding'. Now, if the
snippet field is 'NSStringEncoding' it shows me 'NSUTF8Encoding,
NSASCIIStringEncoding, NSJapaneseEUCStringEncoding, ...'. Or if the
snippet field is something like uft8|ascii|utf16, it gives me these
items as inline menu. )
-create an HTML page out of my document, change the font size, and
open the web preview
-get all bookmarks, show a inline menu, and go to the selected bookmark
-open a text document *.txt, set my grammar to a language which
highlights consonat clusters, hide line numbers
-open a text document *_jp.txt, set the font name to ForMateKonaVe
and size to 14pt, to input Japanese
-the chance to execute dynamic generated macros - very helpful ;)
-if you have a long text you can set bookmarks to line
50,100,150,200,...
To illustrate the syntax of such commands here some examples:
play a macro:
"$TMTOOLS" -m -p '{
commands = (
{command = "moveWordRight:"; },
{command = "moveWordLeftAndModifySelection:"; },
{command = "moveWordLeftAndModifySelection:"; },
{command = "moveWordLeftAndModifySelection:"; }
);
}' $val
set a grammar:
"$TMTOOLS" --set -p '{grammar;to="Objective-C++";}'
set as batch:
"$TMTOOLS" -s -p '{
batch=(
{grammar;to=Perl;},
{wordchars;to="_$";}, <= this is very useful ;)
{caret;toLine=2;toColumn=2;},
{selection;toColumn=end;}
);
}'
execute as batch:
"$TMTOOLS" -e -p '{
batch=(
{command;name="Add Line Numbers to Document / Selection";},
{command;name="Duplicate Line / Selection";},
{macro;name="Move to EOL and Insert “.”";}
);
}'
go to next snippet field and show according to its selection a inline
menu with suggestions:
"$TMTOOLS" -e -p '{nextsnippetfield;}'
"$TMTOOLS" -e -p '{command;name="ShowAsList";}'
prepare a coloured print version of my document:
"$TMTOOLS" -e -p '{command;name="Create HTML From Document /
Selection";}'
"$TMTOOLS" -m -p '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://
www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>commands</key>
<array>
<dict>
<key>argument</key>
<dict>
<key>action</key>
<string>replaceAll</string>
<key>findInProjectIgnoreCase</key>
<false/>
<key>findString</key>
<string>font-size: .*?px</string>
<key>ignoreCase</key>
<true/>
<key>regularExpression</key>
<true/>
<key>replaceAllScope</key>
<string>document</string>
<key>replaceString</key>
<string>font-size: 8px</string>
<key>wrapAround</key>
<true/>
</dict>
<key>command</key>
<string>findWithOptions:</string>
</dict>
</array>
</dict>
</plist>
'
"$TMTOOLS" -e -p '{showwebpreview;}'
convert the unicode mapping of the entire document:
IN=$(cat)
PLIST="{convert;what=\"$IN\";using="nfd";}"
"$TMTOOLS" -g -p "$PLIST"
# allowed parameters for key 'using'
#
# nfd = decompose according to canonical mapping
# nfc = compose according to canonical mapping
# kd = decompose according to canonical compatibility mapping
# kc = compose according to canonical compatibility mapping
#
# see more at http://www.unicode.org/reports/tr15/
set the selection from the caret 4 chars back:
"$TMTOOLS" --set -p '{selection;length=-4;}'
one has the line "This is rub|bish and" [| = caret]:
"$TMTOOLS" -g -p '{wordaftercaret;}'
gives you "bish"
Up to now this plugin is more or less a collection. I have to fixed
some error handlings, unify the output, etc.
So, my question whether it would be worth to clean the code and
publish it. In other words: Is someone interested in such a plugin?
One has to mention that TMTOOLS depends on Allan's code. If he
changes the code maybe one has to adjust TMTOOLS' code as well. Then
Allan plans to include some of these commands in TM2.
Any feedback?
Cheers,
Hans
> On 9/18/07, Jacob Rus <jacobolus(a)gmail.com> wrote:
>
>>
>> I'm planning to someday turn my right ⌘ key into an ⎋ key.
>> I've been
>> too lazy so far to figure out how though.
>>
>>
>
>
> Check Ukelele[1], it probably does that without too much hassle...
>
> [1]: <http://scripts.sil.org/cms/scripts/page.php?
> site_id=nrsi&item_id=ukelele>
Has anyone managed to make this swap with Ukelele? An obstruction I
found is that left ⌘ and right ⌘ are linked together.
Jenny
hello
I find in a post :
> I had been playing around with the language grammars and snippets,
> and started thinking that Allan probably has thought of some better
> way to edit the grammar.. I felt really stupid when I came across
> this blog that stated the obvious: while in bundle editor,
> naturally select Edit in TextMate.. - Voilá, the Language is set to
> 'Language Grammar' and colored nicely.
1) But If I select all the latex grammar I can't edit in textmate
do't work
but if I copy the text and textedit now I can edit the text with TM.
Now that we have a bundle development and language grammar snippets,
I suppose
that we make in a more elegant way. But how that' my question ?
2) I have an other problem we have show scope and copy scope but for
Show TM_*variables how to copy the result ?
regards Alain
Jacob Rus <jacobolus(a)gmail.com> wrote:
> DushanM wrote:
> > When reformatting a paragraph using ^Q, TextMate starts reformatting
> > from the beginning of the paragraph, puts just one space between
> > sentences, then leaves the cursor in that paragraph.
> >
> > Is there an option to specify two spaces between sentences?
> No. Make a macro which first reformats the paragraph, then selects it,
> and replaces ". " with ". ", etc.
Okay, thanks. Time for me to learn how to make macros in TextMate.
> > - reformat starting from the line containing the cursor
> > - when done with one paragraph, place cursor at start of the next one
>
> These can also be done with macros.
> > - when in a window for saving or opening a file, right below the name
> > is the folder being looked at; is it possible to arrange to have that
> > show the full path to the folder instead of just the folder name?
> > I sometimes have similarly-named folders in different places, and
> > seeing the full path would let me distinguish between them.
> I doubt it.
This saves me trying to change the unchangable.
Thanks for the tips.
- Dushan
Hello everyone,
Auto-completion of text is marvelous, but I have to decide each time
whether it is worth the trouble to reach all the way up to esc. For
me, this requires taking my left hand off the keyboard. I wanted to
remap caps lock to esc but have not been able to find this anywhere.
(Do any of you know how to do this?) I have worked out a little fix
that approximates this ideal.
1. Remap caps lock to ctrl via System Preference -> Keyboard & Mouse
-> Keyboard -> Modifier Keys.
2. In Quicksilver, make a trigger to activate Next Completion from
the TextMate Menu. (Current Application (tab) Show Menu Items
(enter) and type Next Completion). I use control-A for my trigger so
the hand motion is minimal. (Be sure to hit caps lock before A,
though!)
For this to work, be sure to turn on Proxy Objects under Quicksilver -
> Preferences -> Catalog, as well as Enable Advanced Features
under Preferences -> Application.
Now auto-complete to your heart's content!
Jenny
Department of Mathematics
University of California, Berkeley
I wrote a little script a while back to help with some of this. You
can grab the bundle at
http://homepage.mac.com/calfeld/SimpleWrap.tgz
It defines two commands:
WrapSelection wraps the selection. I bind it to ^Q for myself but I
left it unbound in the bundle.
WrapAtLine Cmd-Ctrl-Q. Wrap the paragraph around the current line.
Unlike the text mate wrapping it'll look for an initial prefix of
symbols and preserve it. This makes it wrap most comments properly.
I.e.,
# some sample comments
# that span multiple lines
Wraps to
# some sample comments that span multiple lines
I use it extensively in my own development and while it's not always
right it's more useful than the built in version.
It's not very advanced and, at this time, I have no intentions of
supporting it or adding features. But it might handle the first item
in your wish list or serve as a starting point for your own custom
wrapper.
c.
On Sep 18, 2007, at 3:05 AM, DushanM wrote:
> This is my third attempt to send these questions.
>
> When reformatting a paragraph using ^Q, TextMate starts reformatting
> from the beginning of the paragraph, puts just one space between
> sentences, then leaves the cursor in that paragraph.
>
> Is there an option to specify two spaces between sentences?
>
> Might as well mention two other items in my wish list:
>
> - reformat starting from the line containing the cursor
>
> - when done with one paragraph, place cursor at start of the next one
>
> Are any of these doable at present in TextMate?
>
>
> ... while I'm at it I'll repeat an even earlier question that I never
> saw show up:
>
> - when in a window for saving or opening a file, right below the name
> is the folder being looked at; is it possible to arrange to have
> that
> show the full path to the folder instead of just the folder name?
> I sometimes have similarly-named folders in different places, and
> seeing the full path would let me distinguish between them.
>
>
> Thanks.
>
> - Dushan
>
> ______________________________________________________________________
> For new threads USE THIS: textmate(a)lists.macromates.com
> (threading gets destroyed and the universe will collapse if you don't)
> http://lists.macromates.com/mailman/listinfo/textmate
>
--
[PGP Key available at www.keyserver.net - http://homepage.mac.com/
calfeld]
This is my third attempt to send these questions.
When reformatting a paragraph using ^Q, TextMate starts reformatting
from the beginning of the paragraph, puts just one space between
sentences, then leaves the cursor in that paragraph.
Is there an option to specify two spaces between sentences?
Might as well mention two other items in my wish list:
- reformat starting from the line containing the cursor
- when done with one paragraph, place cursor at start of the next one
Are any of these doable at present in TextMate?
... while I'm at it I'll repeat an even earlier question that I never
saw show up:
- when in a window for saving or opening a file, right below the name
is the folder being looked at; is it possible to arrange to have that
show the full path to the folder instead of just the folder name?
I sometimes have similarly-named folders in different places, and
seeing the full path would let me distinguish between them.
Thanks.
- Dushan
hello
I work actually on a new bundle LaTeX_Author and I would like If
someone have an idea to code the control's structures below :
I think that's that's very common in a lot of languages :
% from package ifthen.sty
* \ifthenelse{test}{then clause}{else clause}
* \whiledo{test}{while clause}
% from package pgffor.sty
* \foreach \var in {list}{ }
\from TeX
* \@for\var:={list}\do{ }
I would like to have a color for the control words and for {}
Thanks
Regards Alain
PS : i've a problem to understand this line :
{ name = 'meta.space-after-command.latex';
match = '(?=\s)(?<=\\[\w@]|\\[\w@]{2}|\\[\w@]{3}|\\[\w@]{4}|\\[\w@]
{5}|\\[\w@]{6})\s';
Hello,
some months ago, I changed TextMate's Transmit Bundle to work with
YummyFTP (to be accurate: I duplicated the Transmit Bundle before
playing aroung with it).
"DockSend File" works fine with Yummy.
But when I select "Send File with Active Connnection", I get the
following error message:
37:41: syntax error: Expected ", " but found class name (-2741)
Using the original Transmit bundle, "Send File with Active
Connnection" _will_ trigger Transmit to upload the file, but my
modified version for Yummy does not work.
I only replaced 'Transmit' with 'Yummy FTP' in the bundle editor:
================================================
osascript -e "tell application \"Yummy FTP\"
(upload item \"$TM_FILEPATH\") in current session of first document
end tell"
================================================
So, what is going wrong?
Kind regards,
Tobias Jung