+ All Categories
Home > Technology > Ingo Muschenetz: Titanium Studio Deep Dive

Ingo Muschenetz: Titanium Studio Deep Dive

Date post: 26-Dec-2014
Category:
Upload: appcelerator-inc
View: 1,020 times
Download: 0 times
Share this document with a friend
Description:
Have questions about how to script or integrate a desired feature? Titanium Studio offers a wealth of opportunities for modifying and extending behavior through both Eclipse plugins and Rubles, Studio's own scripting interface.Ingo Muschenetz, Director of Tools Engineering, will lead a deep dive into the scripting interface of Titanium Studio to show how you can customize and extend Studio to better fit your preferences and workflow. We'll cover themes, scopes, commands, snippets, project templates and content assist showing possible approaches and solutions to easily modifying existing functionality, providing your own, and sharing with others.This session is for developers of all skill levels, with discussion and explanation of several use cases.
47
Titanium Studio Deep Dive Ingo Muschenetz
Transcript
Page 1: Ingo Muschenetz: Titanium Studio Deep Dive

Titanium Studio Deep Dive

Ingo Muschenetz

Page 2: Ingo Muschenetz: Titanium Studio Deep Dive

Pimp My RIDE Customizing your Titanium Studio

Photo: babawheels.com

Page 3: Ingo Muschenetz: Titanium Studio Deep Dive

Director, Tools Engineering, Appcelerator

Leads both the Titanium Studio and Aptana Studio products and communities

10+ years designing developer tools and experiences

Page 4: Ingo Muschenetz: Titanium Studio Deep Dive

Titanium Studio

Aptana Studio

Eclipse Platform

Page 5: Ingo Muschenetz: Titanium Studio Deep Dive

Titanium Studio Mobile/Desktop platform support specific to Titanium Development. Titanium-specific content assist, Android/iOS debugging.

Aptana Studio Web language support(HTML, JS, CSS, Ruby, PHP, Python). FTP/SFTP, JavaScript debugging infrastructure. Git, Rubles.

Eclipse Platform IDE Shell, project management, basic editor architecture. Default preference layout. Toolbars. Update mechanisms.

Page 6: Ingo Muschenetz: Titanium Studio Deep Dive
Page 7: Ingo Muschenetz: Titanium Studio Deep Dive

What is a Ruble?

Scripting interface to Studio

Coded in Ruby

Contributes:

Themes Commands Snippets Templates Content Assist

Page 8: Ingo Muschenetz: Titanium Studio Deep Dive

Creating a New Ruble

1. File > New > Ruby Project 2. Name your Ruble. Click Next 3. Select the Ruble Template 4. Click Finish

Ruble template is itself a template contributed by a Ruble

Page 9: Ingo Muschenetz: Titanium Studio Deep Dive
Page 10: Ingo Muschenetz: Titanium Studio Deep Dive

Modifying an Existing Ruble

1. Commands > Ruble Name > Edit this bundle… 2. Ruble cloned into your workspace 3. Update to latest version with Git pulls

http://wiki.appcelerator.org/display/tis/Rubles

Page 11: Ingo Muschenetz: Titanium Studio Deep Dive
Page 12: Ingo Muschenetz: Titanium Studio Deep Dive

CSS Document:

body!{!! background:#000000;!! text-align:left;!

}!

1.  Colorize “background”? 2.  Specify a valid region for property proposals?

Scopes

Page 13: Ingo Muschenetz: Titanium Studio Deep Dive

Scopes

"   Scopes describe a subset of the document tree "   Often closely map to language tokens "   Scopes provide colorization and context

"   Themes collect scope colorization rules "   Content assist/commands use scope context

http://wiki.appcelerator.org/display/tis/Themes

Page 14: Ingo Muschenetz: Titanium Studio Deep Dive

body!{!! background : #000000 ;!! text-align : left ;!

}!

Document Scope

source.css

Page 15: Ingo Muschenetz: Titanium Studio Deep Dive

body!{!! background : #000000 ;!! text-align : left ;!

}!

Token Scopes support.type.property-name.css

entity.name.tag.css

punctuation.separator.key-value.css

constant.other.color.rgb-value.css

support.constant.property-value.css

punctuation.rule.terminator.css

Page 16: Ingo Muschenetz: Titanium Studio Deep Dive

body!{!! background : #000000 ;!! text-align : left ;!

}!

Meta Scopes meta.property-name.css

meta.selector.css

meta.property-value.css

meta.property-list.css

Page 17: Ingo Muschenetz: Titanium Studio Deep Dive

Scope Example

Colorization and Context "   source.css "   support.type.property-name.css

Context "   meta.property-list.css "   meta.property-name.css

Page 18: Ingo Muschenetz: Titanium Studio Deep Dive

Matching Rules

Most specific scope matches first

text.html vs. text

Descendant selectors

text.html source.php

Page 19: Ingo Muschenetz: Titanium Studio Deep Dive

<html>!!<body>!! !<?php!! !!! !?>! !!!</body>!

</html>!

Embedded Scopes

text.html

source.php

Page 20: Ingo Muschenetz: Titanium Studio Deep Dive

Scopes are Hierarchial

Generally follow a convention of category.sub-category.language-extension

comment All comments

comment.line All line comments

comment.line.js All line comments in JavaScript files

Page 21: Ingo Muschenetz: Titanium Studio Deep Dive

The Properties View helps discern relevant scopes

Page 22: Ingo Muschenetz: Titanium Studio Deep Dive
Page 23: Ingo Muschenetz: Titanium Studio Deep Dive

Commands

A script triggered manually or automatically

Execute on: "   Menu selection "   Content assist "   Tab activation "   File listener "   Eclipse “Command” execution

Page 24: Ingo Muschenetz: Titanium Studio Deep Dive

Sample Commands

"   Compile CoffeeScript "   Post editor selection as gist "   Execute editor selection as bash command "   Strip HTML tags from a document "   Run JSHint/HTMLTidy "   Deploy app to cloud service "   Execute any Java, Ruby, or Eclipse code

http://wiki.appcelerator.org/display/tis/Ruble+Cookbook

Page 25: Ingo Muschenetz: Titanium Studio Deep Dive

Command Example

command 'Swap Case' do |cmd|! cmd.key_binding = 'SHIFT+CTRL+A'! cmd.scope = 'source'! cmd.input = :selection! cmd.output = :replace_selection! cmd.invoke do |context|! word = $stdin.gets! context.exit_discard if word.nil?! print word.swapcase! end!end!

Page 26: Ingo Muschenetz: Titanium Studio Deep Dive

Command Demo

Page 27: Ingo Muschenetz: Titanium Studio Deep Dive

Inputs & Outputs Input Specifiers selection left_character right_character word line document clipboard none

Output Specifiers insert_as_text insert_as_snippet replace_selection replace_document copy_to_clipboard show_as_html show_as_tooltip create_new_document discard replace_line replace_word

Page 28: Ingo Muschenetz: Titanium Studio Deep Dive

Listener Example

command "Show Save Information" do |cmd|! cmd.input = :none! cmd.output = :discard! cmd.trigger = :execution_listener, ! "org.eclipse.ui.file.save"! cmd.invoke do |context|! # code here! end!end !

Page 29: Ingo Muschenetz: Titanium Studio Deep Dive
Page 30: Ingo Muschenetz: Titanium Studio Deep Dive

Snippets

Snippets focus on inserting small pieces of content.

Commonly use activation triggers (tab)

Support: "   Tab stops "   Mirrored variables "   Very similar to TextMate snippets

http://wiki.appcelerator.org/display/tis/Snippets

Page 31: Ingo Muschenetz: Titanium Studio Deep Dive

Snippet Example

snippet "background: color" do |s|! s.scope = "meta.property-list.css" ! s.trigger = "bgr"! s.expansion = "background:${1:red};$0"!end!

Page 32: Ingo Muschenetz: Titanium Studio Deep Dive

Snippet Example (Mirrored)

snippet "background-foreground" do |s|! s.scope = "meta.property-list.css" ! s.trigger = "bgfr"! s.expansion = "background: ${1:red};!! ! ! ! ! foreground: ${1}$0"!

end!

Page 33: Ingo Muschenetz: Titanium Studio Deep Dive

Snippet Demo

Page 34: Ingo Muschenetz: Titanium Studio Deep Dive
Page 35: Ingo Muschenetz: Titanium Studio Deep Dive

Project Templates

Provide default content for a new project

"   Packaged as .zip file "   Variable substitutions "   Contributed via Ruble or Extension point

http://wiki.appcelerator.org/display/tis/Templates

Page 36: Ingo Muschenetz: Titanium Studio Deep Dive

Project Template Example

project_template "Ruble Template" do |t|! t.type = :ruby! t.location = "templates/ruble_template.zip"! t.description = "A simple Ruble sample"! t.replace_parameters = true!end!

Page 37: Ingo Muschenetz: Titanium Studio Deep Dive

File Templates

Provide default content for a particular file type

"   Variable substitutions "   Contributed via Ruble

http://wiki.appcelerator.org/display/tis/Templates

Page 38: Ingo Muschenetz: Titanium Studio Deep Dive

File Template Example

template("HTML 5 Template") do |t|! t.filetype = "*.html"! t.location = "templates/html5.html"!end!

Page 39: Ingo Muschenetz: Titanium Studio Deep Dive
Page 40: Ingo Muschenetz: Titanium Studio Deep Dive

JSCA Files

"   3rd-party library content assist "  XML- and JSON-based "   Forthcoming tools to generate from TiDoc

http://wiki.appcelerator.org/display/tis/JSCA+1.0+Specification

Page 41: Ingo Muschenetz: Titanium Studio Deep Dive

JSCA Example

{! "types": [! {! "name": "Titanium.Android.NotificationManager", ! "examples": [], ! "functions": [! {! "name": "addEventListener", ! "parameters": [! {! "name": "name", ! "usage": "", ! "type": "String", ! "description": "name of the event"! },!

Page 42: Ingo Muschenetz: Titanium Studio Deep Dive

Documentation Example

In bundle.rb:

require 'ruble'!

bundle 'Titanium' do |bundle|! bundle.project_build_path["Titanium 1.8"] = ! "#{File.dirname($0)}/titanium.1.8.jsca"!end!

Page 43: Ingo Muschenetz: Titanium Studio Deep Dive
Page 44: Ingo Muschenetz: Titanium Studio Deep Dive

Plugins

"  Eclipse-based so most Eclipse plugins work "   Database Explorer "   Mobile Tooling

"   Java extensibility via extension points "  Eclipse Marketplace

Page 45: Ingo Muschenetz: Titanium Studio Deep Dive

Resources

Titanium-specific Rubles "  https://github.com/mschmulen/appfab.ruble "  https://github.com/aptana/titanium.ruble

Additional Rubles: "  https://github.com/aptana/

Page 46: Ingo Muschenetz: Titanium Studio Deep Dive

AppFab Demo

Page 47: Ingo Muschenetz: Titanium Studio Deep Dive

Recommended