├── Actions ├── Notes Navigator.lbaction │ ├── Contents │ │ ├── Resources │ │ │ └── en.lproj │ │ │ │ └── InfoPlist.strings │ │ ├── Scripts │ │ │ └── default.scpt │ │ └── Info.plist │ ├── images │ │ └── Notes_Demo.gif │ └── README.md ├── Screen Sharing.lbaction │ ├── Contents │ │ ├── Resources │ │ │ └── en.lproj │ │ │ │ └── InfoPlist.strings │ │ ├── Scripts │ │ │ ├── default.js │ │ │ └── suggestions.py │ │ └── Info.plist │ ├── images │ │ ├── ScreenSharing.png │ │ └── ScreenSharing_Demo.gif │ └── README.md ├── RAM Drive.lbaction │ ├── Contents │ │ ├── Resources │ │ │ ├── en.lproj │ │ │ │ └── InfoPlist.strings │ │ │ ├── fat.png │ │ │ ├── hfs.png │ │ │ ├── exfat.png │ │ │ ├── extfs.png │ │ │ ├── ntfs.png │ │ │ ├── RAMDrive.png │ │ │ └── default.png │ │ ├── Info.plist │ │ └── Scripts │ │ │ ├── listFS.py │ │ │ └── createVolume.py │ ├── images │ │ ├── RAMDrive.gif │ │ └── RAMDrive_Intro.png │ └── README.md ├── Link Sharing.lbaction │ ├── Contents │ │ ├── Resources │ │ │ ├── en.lproj │ │ │ │ └── InfoPlist.strings │ │ │ ├── Document.png │ │ │ └── Link Sharing.png │ │ ├── Scripts │ │ │ ├── copy_link.rb │ │ │ └── format_link.rb │ │ └── Info.plist │ ├── images │ │ ├── LinkSharing_Demo.gif │ │ └── LinkSharing_Intro.png │ └── README.md ├── Paths.lbaction │ ├── Contents │ │ ├── Resources │ │ │ ├── en.lproj │ │ │ │ └── InfoPlist.strings │ │ │ └── Icon.png │ │ ├── Scripts │ │ │ └── Paths.scpt │ │ └── Info.plist │ ├── images │ │ └── Paths_Intro.png │ └── README.md ├── Open in Bugzilla.lbaction │ ├── Contents │ │ ├── Resources │ │ │ ├── en.lproj │ │ │ │ └── InfoPlist.strings │ │ │ ├── Safari.png │ │ │ ├── Bugzilla.png │ │ │ └── Documents.png │ │ ├── Scripts │ │ │ ├── script.py │ │ │ └── open_url.py │ │ └── Info.plist │ ├── images │ │ ├── Bugzilla_Demo.gif │ │ └── Bugzilla_Intro.png │ └── README.md ├── Skype Copy Clipboard.lbaction │ ├── images │ │ ├── Skype_req_auth.png │ │ ├── Skype_CopyClipboard_Demo.gif │ │ └── Skype_CopyClipboard_Intro.png │ ├── Contents │ │ ├── Scripts │ │ │ ├── friends.scpt │ │ │ ├── default.py │ │ │ └── suggestions.py │ │ └── Info.plist │ └── README.md ├── Skype Open Chat.lbaction │ ├── Contents │ │ ├── Scripts │ │ │ ├── friends.scpt │ │ │ ├── default.py │ │ │ └── suggestions.py │ │ └── Info.plist │ ├── images │ │ ├── Skype_Open_Chat_Demo.gif │ │ └── Skype_Open_Chat_Intro.png │ └── README.md └── Text Expander Snippets.lbaction │ ├── Images │ ├── te_preferences.png │ ├── te_native_window.png │ └── text_expander_snippets.gif │ ├── Contents │ ├── Scripts │ │ ├── te_put.scpt │ │ ├── te_get_abbr.scpt │ │ ├── te_get_label.scpt │ │ ├── default.js │ │ └── suggestions.js │ └── Info.plist │ └── README.md └── Source ├── Paths.source.zip ├── RAM Drive.source.zip ├── Link Sharing.source.zip ├── Notes Navigator.source.zip ├── Screen Sharing.source.zip ├── Skype Open Chat.source.zip ├── Open in Bugzilla.source.zip ├── Skype Copy Clipboard.source.zip └── Text Expander Snippets.source.zip /Actions/Notes Navigator.lbaction/Contents/Resources/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Actions/Screen Sharing.lbaction/Contents/Resources/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Source/Paths.source.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Source/Paths.source.zip -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/Contents/Resources/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleName" = "RAM Drive"; 2 | -------------------------------------------------------------------------------- /Actions/Link Sharing.lbaction/Contents/Resources/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleName" = "Link Sharing"; 2 | -------------------------------------------------------------------------------- /Source/RAM Drive.source.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Source/RAM Drive.source.zip -------------------------------------------------------------------------------- /Actions/Paths.lbaction/Contents/Resources/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleName" = "Paths: copy a file path"; 2 | -------------------------------------------------------------------------------- /Source/Link Sharing.source.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Source/Link Sharing.source.zip -------------------------------------------------------------------------------- /Source/Notes Navigator.source.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Source/Notes Navigator.source.zip -------------------------------------------------------------------------------- /Source/Screen Sharing.source.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Source/Screen Sharing.source.zip -------------------------------------------------------------------------------- /Source/Skype Open Chat.source.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Source/Skype Open Chat.source.zip -------------------------------------------------------------------------------- /Actions/Open in Bugzilla.lbaction/Contents/Resources/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "CFBundleName" = "Bugzilla: ticket opener"; 2 | -------------------------------------------------------------------------------- /Source/Open in Bugzilla.source.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Source/Open in Bugzilla.source.zip -------------------------------------------------------------------------------- /Source/Skype Copy Clipboard.source.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Source/Skype Copy Clipboard.source.zip -------------------------------------------------------------------------------- /Source/Text Expander Snippets.source.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Source/Text Expander Snippets.source.zip -------------------------------------------------------------------------------- /Actions/Paths.lbaction/images/Paths_Intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Paths.lbaction/images/Paths_Intro.png -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/images/RAMDrive.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/RAM Drive.lbaction/images/RAMDrive.gif -------------------------------------------------------------------------------- /Actions/Screen Sharing.lbaction/Contents/Scripts/default.js: -------------------------------------------------------------------------------- 1 | function runWithString(argument) 2 | { 3 | LaunchBar.openURL('vnc://' + argument); 4 | } -------------------------------------------------------------------------------- /Actions/Paths.lbaction/Contents/Resources/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Paths.lbaction/Contents/Resources/Icon.png -------------------------------------------------------------------------------- /Actions/Paths.lbaction/Contents/Scripts/Paths.scpt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Paths.lbaction/Contents/Scripts/Paths.scpt -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/Contents/Resources/fat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/RAM Drive.lbaction/Contents/Resources/fat.png -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/Contents/Resources/hfs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/RAM Drive.lbaction/Contents/Resources/hfs.png -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/images/RAMDrive_Intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/RAM Drive.lbaction/images/RAMDrive_Intro.png -------------------------------------------------------------------------------- /Actions/Notes Navigator.lbaction/images/Notes_Demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Notes Navigator.lbaction/images/Notes_Demo.gif -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/Contents/Resources/exfat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/RAM Drive.lbaction/Contents/Resources/exfat.png -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/Contents/Resources/extfs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/RAM Drive.lbaction/Contents/Resources/extfs.png -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/Contents/Resources/ntfs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/RAM Drive.lbaction/Contents/Resources/ntfs.png -------------------------------------------------------------------------------- /Actions/Link Sharing.lbaction/images/LinkSharing_Demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Link Sharing.lbaction/images/LinkSharing_Demo.gif -------------------------------------------------------------------------------- /Actions/Link Sharing.lbaction/images/LinkSharing_Intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Link Sharing.lbaction/images/LinkSharing_Intro.png -------------------------------------------------------------------------------- /Actions/Open in Bugzilla.lbaction/images/Bugzilla_Demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Open in Bugzilla.lbaction/images/Bugzilla_Demo.gif -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/Contents/Resources/RAMDrive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/RAM Drive.lbaction/Contents/Resources/RAMDrive.png -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/Contents/Resources/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/RAM Drive.lbaction/Contents/Resources/default.png -------------------------------------------------------------------------------- /Actions/Screen Sharing.lbaction/images/ScreenSharing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Screen Sharing.lbaction/images/ScreenSharing.png -------------------------------------------------------------------------------- /Actions/Open in Bugzilla.lbaction/images/Bugzilla_Intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Open in Bugzilla.lbaction/images/Bugzilla_Intro.png -------------------------------------------------------------------------------- /Actions/Link Sharing.lbaction/Contents/Resources/Document.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Link Sharing.lbaction/Contents/Resources/Document.png -------------------------------------------------------------------------------- /Actions/Notes Navigator.lbaction/Contents/Scripts/default.scpt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Notes Navigator.lbaction/Contents/Scripts/default.scpt -------------------------------------------------------------------------------- /Actions/Open in Bugzilla.lbaction/Contents/Resources/Safari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Open in Bugzilla.lbaction/Contents/Resources/Safari.png -------------------------------------------------------------------------------- /Actions/Screen Sharing.lbaction/images/ScreenSharing_Demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Screen Sharing.lbaction/images/ScreenSharing_Demo.gif -------------------------------------------------------------------------------- /Actions/Skype Copy Clipboard.lbaction/images/Skype_req_auth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Skype Copy Clipboard.lbaction/images/Skype_req_auth.png -------------------------------------------------------------------------------- /Actions/Skype Open Chat.lbaction/Contents/Scripts/friends.scpt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Skype Open Chat.lbaction/Contents/Scripts/friends.scpt -------------------------------------------------------------------------------- /Actions/Link Sharing.lbaction/Contents/Resources/Link Sharing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Link Sharing.lbaction/Contents/Resources/Link Sharing.png -------------------------------------------------------------------------------- /Actions/Open in Bugzilla.lbaction/Contents/Resources/Bugzilla.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Open in Bugzilla.lbaction/Contents/Resources/Bugzilla.png -------------------------------------------------------------------------------- /Actions/Skype Open Chat.lbaction/images/Skype_Open_Chat_Demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Skype Open Chat.lbaction/images/Skype_Open_Chat_Demo.gif -------------------------------------------------------------------------------- /Actions/Skype Open Chat.lbaction/images/Skype_Open_Chat_Intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Skype Open Chat.lbaction/images/Skype_Open_Chat_Intro.png -------------------------------------------------------------------------------- /Actions/Text Expander Snippets.lbaction/Images/te_preferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Text Expander Snippets.lbaction/Images/te_preferences.png -------------------------------------------------------------------------------- /Actions/Open in Bugzilla.lbaction/Contents/Resources/Documents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Open in Bugzilla.lbaction/Contents/Resources/Documents.png -------------------------------------------------------------------------------- /Actions/Skype Copy Clipboard.lbaction/Contents/Scripts/friends.scpt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Skype Copy Clipboard.lbaction/Contents/Scripts/friends.scpt -------------------------------------------------------------------------------- /Actions/Text Expander Snippets.lbaction/Contents/Scripts/te_put.scpt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Text Expander Snippets.lbaction/Contents/Scripts/te_put.scpt -------------------------------------------------------------------------------- /Actions/Text Expander Snippets.lbaction/Images/te_native_window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Text Expander Snippets.lbaction/Images/te_native_window.png -------------------------------------------------------------------------------- /Actions/Skype Copy Clipboard.lbaction/images/Skype_CopyClipboard_Demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Skype Copy Clipboard.lbaction/images/Skype_CopyClipboard_Demo.gif -------------------------------------------------------------------------------- /Actions/Text Expander Snippets.lbaction/Contents/Scripts/te_get_abbr.scpt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Text Expander Snippets.lbaction/Contents/Scripts/te_get_abbr.scpt -------------------------------------------------------------------------------- /Actions/Text Expander Snippets.lbaction/Images/text_expander_snippets.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Text Expander Snippets.lbaction/Images/text_expander_snippets.gif -------------------------------------------------------------------------------- /Actions/Skype Copy Clipboard.lbaction/images/Skype_CopyClipboard_Intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Skype Copy Clipboard.lbaction/images/Skype_CopyClipboard_Intro.png -------------------------------------------------------------------------------- /Actions/Text Expander Snippets.lbaction/Contents/Scripts/te_get_label.scpt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/facetheheat/LaunchBar/HEAD/Actions/Text Expander Snippets.lbaction/Contents/Scripts/te_get_label.scpt -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/README.md: -------------------------------------------------------------------------------- 1 | # RAM Drive 2 | 3 | This action creates a RAM drive with selected size and format volume with any installed filesystem. 4 | 5 | ## Installation 6 | * Click "Download ZIP" on the right 7 | * Run LaunchBar/Ram Drive.lbaction to install 8 | 9 | 10 | ![](./images/RAMDrive_Intro.png) 11 | ![](./images/RAMDrive.gif) 12 | 13 | -------------------------------------------------------------------------------- /Actions/Paths.lbaction/README.md: -------------------------------------------------------------------------------- 1 | # Paths: copy a file path 2 | 3 | This action copies file path(from Finder window) to the clipboard. 4 | 5 | ## Features 6 | * support multiple files selection 7 | 8 | ## Installation 9 | * Click "Download ZIP" on the right 10 | * Run LaunchBar/Paths.lbaction to install 11 | 12 | 13 | ![](./images/Paths_Intro.png) 14 | 15 | -------------------------------------------------------------------------------- /Actions/Text Expander Snippets.lbaction/README.md: -------------------------------------------------------------------------------- 1 | # Text Expander Snippets 2 | 3 | ## Demo 4 | ![](./Images/text_expander_snippets.gif) 5 | 6 | ## By the way 7 | I know about 'Suggest Matching Abbreviations' shortcut in Text Expander preferences, but I want to get integration with LaunchBar. 8 | ![](./Images/te_preferences.png) 9 | ![](./Images/te_native_window.png) 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Actions/Text Expander Snippets.lbaction/Contents/Scripts/default.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author Pavel Miroshnichenko 3 | * @email pavel@miroshnichen.co 4 | **/ 5 | 6 | function run() 7 | { 8 | LaunchBar.openCommandURL('x-launchbar:hide'); 9 | } 10 | 11 | function runWithString(argument) 12 | { 13 | LaunchBar.debugLog(argument); 14 | LaunchBar.openCommandURL('x-launchbar:hide'); 15 | LaunchBar.executeAppleScriptFile('te_put.scpt', argument); 16 | } -------------------------------------------------------------------------------- /Actions/Screen Sharing.lbaction/README.md: -------------------------------------------------------------------------------- 1 | # VNC History: Screen Sharing.app history viewer with auto substitution 2 | 3 | This action - the viewer of history of screen sharing connections. 4 | 5 | ## Features 6 | * Get connections from *.vncloc files 7 | * Auto substitution 8 | 9 | ## Installation 10 | * Click "Download ZIP" on the right 11 | * Run LaunchBar/Screen Sharing.lbaction to install 12 | 13 | 14 | ![](./images/ScreenSharing_Demo.gif) 15 | 16 | 17 | -------------------------------------------------------------------------------- /Actions/Notes Navigator.lbaction/README.md: -------------------------------------------------------------------------------- 1 | # Notes Navigator 2 | 3 | An action for navigating between notes & folder from Notas.app. 4 | Hit 'Return' to open Notes.app with seleted note. 5 | 6 | ## Features 7 | * Hit 'Enter' to open note 8 | * Simple keyboard navigation 9 | * Groups notes by folders 10 | 11 | 12 | ## Installation 13 | * Click "Download ZIP" on the right 14 | * Run LaunchBar/Note Navigator.lbaction to install 15 | 16 | ![](./images/Notes_Demo.gif) 17 | -------------------------------------------------------------------------------- /Actions/Open in Bugzilla.lbaction/README.md: -------------------------------------------------------------------------------- 1 | # Open in Bugzilla: The clipboard link parser 2 | 3 | This action - the clipboard links parser. If someone send you short ticket to bugzilla bugtracker, you can easily open it in a seconds. 4 | 5 | 6 | ## Features 7 | * parsing multiple ticket numbers 8 | 9 | 10 | ## Installation 11 | * Click "Download ZIP" on the right 12 | * Run LaunchBar/Open In Bugzilla.lbaction to install 13 | 14 | 15 | ![](./images/Bugzilla_Intro.png) 16 | ![](./images/Bugzilla_Demo.gif) 17 | 18 | 19 | -------------------------------------------------------------------------------- /Actions/Skype Copy Clipboard.lbaction/README.md: -------------------------------------------------------------------------------- 1 | # Skype: Copy friend's name to the clipboard 2 | 3 | This action helps to copy skype friend's name & account to the clipboard. 4 | And you can easyly share it via email or other sharing channel. 5 | 6 | ## Features 7 | * Autocomplete Suggestions 8 | 9 | ## Installation 10 | * Click "Download ZIP" on the right 11 | * Run LaunchBar/Skype Copy Clipboard.lbaction to install 12 | 13 | ## Screenshot 14 | ![](./images/Skype_CopyClipboard_Intro.png) 15 | 16 | ## Demo 17 | ![](./images/Skype_CopyClipboard_Demo.gif) 18 | 19 | 20 | -------------------------------------------------------------------------------- /Actions/Link Sharing.lbaction/README.md: -------------------------------------------------------------------------------- 1 | # Link Sharing: convert any smb/cifs/afp/win/unix links 2 | 3 | This action - the sharing link converter. If someone send you a link, like \\server\share, you could easily convert it for Finder support. 4 | 5 | ## Features 6 | * Input: smb, cifs, windows sharing, unix links 7 | * Copy one or multiple links 8 | 9 | 10 | ## Installation 11 | * Click "Download ZIP" on the right 12 | * Run LaunchBar/Link Sharing.lbaction to install 13 | 14 | 15 | ![](./images/LinkSharing_Intro.png) 16 | ![](./images/LinkSharing_Demo.gif) 17 | 18 | 19 | -------------------------------------------------------------------------------- /Actions/Skype Open Chat.lbaction/README.md: -------------------------------------------------------------------------------- 1 | # Skype: Open friend's chat window 2 | 3 | This action helps to open skype chat window with your friend. 4 | Search friend's name with autocomplete suggestion. 5 | It's like: Open Skype window, Cmd+Alt+F(Search Contacts). 6 | 7 | ## Features 8 | * Autocomplete Suggestions 9 | 10 | ## Installation 11 | * Click "Download ZIP" on the right 12 | * Run LaunchBar/Skype Open Chat.lbaction to install 13 | 14 | ## Screenshot 15 | ![](./images/Skype_Open_Chat_Intro.png) 16 | 17 | ## Demo 18 | ![](./images/Skype_Open_Chat_Demo.gif) 19 | 20 | 21 | -------------------------------------------------------------------------------- /Actions/Link Sharing.lbaction/Contents/Scripts/copy_link.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby 2 | 3 | require 'json' 4 | 5 | url = JSON.parse(ARGV[0]) 6 | 7 | items = [] 8 | url.each do |value| 9 | #puts value.values 10 | items.push(value.values.to_s) 11 | end 12 | 13 | def copy_to_clipboard(value) 14 | `echo "#{value}" |pbcopy` 15 | return 0 16 | end 17 | 18 | report = '' 19 | i = 0 20 | itemsLength = items.length 21 | while i < itemsLength 22 | report << "#{items[i]}\n" 23 | i += 1 24 | end 25 | 26 | report.gsub!(/\[/, '') 27 | report.gsub!(/\]/, '') 28 | copy_to_clipboard(report) 29 | -------------------------------------------------------------------------------- /Actions/Skype Open Chat.lbaction/Contents/Scripts/default.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | __author__ = "Pavel Miroshnichenko" 4 | __email__ = "pavel@miroshnichen.co" 5 | 6 | import sys 7 | import re 8 | from subprocess import Popen, PIPE 9 | 10 | cmd = '/usr/bin/osascript "./friends.scpt"' 11 | p = Popen(cmd , shell=True, stdout=PIPE, stderr=PIPE) 12 | out, err = p.communicate() 13 | text = out.split(',') 14 | for item in text: 15 | item = item.split(';') 16 | display_name = item[0].strip() 17 | account_name = item[1].strip() 18 | search_name = sys.argv[1] 19 | match = re.search(account_name, search_name) 20 | if match: 21 | cmd = 'open skype:%s?chat' % account_name 22 | p = Popen(cmd , shell=True, stdout=PIPE, stderr=PIPE) 23 | -------------------------------------------------------------------------------- /Actions/Skype Copy Clipboard.lbaction/Contents/Scripts/default.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | __author__ = "Pavel Miroshnichenko" 4 | __email__ = "pavel@miroshnichen.co" 5 | 6 | import sys 7 | import re 8 | from subprocess import Popen, PIPE 9 | 10 | cmd = '/usr/bin/osascript "./friends.scpt"' 11 | p = Popen(cmd , shell=True, stdout=PIPE, stderr=PIPE) 12 | out, err = p.communicate() 13 | text = out.split(',') 14 | for item in text: 15 | item = item.split(';') 16 | display_name = item[0].strip() 17 | account_name = item[1].strip() 18 | search_name = sys.argv[1] 19 | match = re.search(account_name, search_name) 20 | if match: 21 | cmd = 'echo "%s, skype: %s" |pbcopy' % (display_name, account_name) 22 | p = Popen(cmd , shell=True, stdout=PIPE, stderr=PIPE) 23 | -------------------------------------------------------------------------------- /Actions/Paths.lbaction/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleName 6 | Paths 7 | CFBundleIconFile 8 | Icon.png 9 | CFBundleVersion 10 | 1.0 11 | CFBundleIdentifier 12 | com.facetheheat.paths 13 | LBScripts 14 | 15 | LBDefaultScript 16 | 17 | LBScriptName 18 | Paths.scpt 19 | LBReturnsResult 20 | 21 | 22 | 23 | LBDescription 24 | 25 | LBDownload 26 | https://github.com/facetheheat 27 | LBTwitter 28 | @previewthenew 29 | LBSummary 30 | Paths: copy a file path to the clipboard 31 | LBAuthor 32 | Pavel Miroshnichenko 33 | LBEmail 34 | pavel@miroshnichen.co 35 | LBWebsite 36 | http://pavel.miroshnichen.co 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Actions/Open in Bugzilla.lbaction/Contents/Scripts/script.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | __author__ = "Pavel Miroshnichenko" 4 | __email__ = "facetheheat@icloud.com" 5 | 6 | import sys 7 | import subprocess 8 | import re 9 | import json 10 | import time 11 | 12 | inputString = sys.argv[1] 13 | ticketsList = re.sub('[A-z.,\:-_=+%$^#{}\'\"/]', '', inputString) 14 | ticketsList = ticketsList.split(' ') 15 | 16 | items = [] 17 | openAll = {} 18 | openAll['title'] = 'Open All' 19 | openAll['icon'] = 'Safari.png' 20 | openAll['action'] = 'open_url.py' 21 | argumentList = [] 22 | for everyTicket in ticketsList: 23 | outputArguments = {} 24 | outputArguments[everyTicket] = everyTicket 25 | argumentList.append(outputArguments) 26 | openAll['actionArgument'] = json.dumps(argumentList) 27 | items.append(openAll) 28 | 29 | for ticket in ticketsList: 30 | item = {} 31 | item['title'] = ticket 32 | item['subtitle'] = "Open ticket in a browser..." 33 | item['icon'] = 'Documents.png' 34 | item['action'] = 'open_url.py' 35 | outputArguments = {} 36 | outputArguments[ticket] = ticket 37 | item['actionArgument'] = json.dumps([outputArguments]) 38 | items.append(item) 39 | 40 | print json.dumps(items) 41 | -------------------------------------------------------------------------------- /Actions/Skype Open Chat.lbaction/Contents/Scripts/suggestions.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | __author__ = "Pavel Miroshnichenko" 4 | __email__ = "pavel@miroshnichen.co" 5 | 6 | import sys 7 | import re 8 | import json 9 | from subprocess import Popen, PIPE 10 | 11 | def get_(): 12 | cmd = '/usr/bin/osascript "./friends.scpt"' 13 | p = Popen(cmd , shell=True, stdout=PIPE, stderr=PIPE) 14 | out, err = p.communicate() 15 | text = out.split(',') 16 | friends = [] 17 | for item in text: 18 | item = item.split(';') 19 | friend_properties = {} 20 | friend_properties['title'] = item[0].strip() 21 | friend_properties['icon'] = 'com.skype.skype' 22 | friend_properties['subtitle'] = item[1].strip() 23 | friend_properties['action'] = 'default.py' 24 | friend_properties['actionArgument'] = json.dumps(item[1].strip()) 25 | friends.append(friend_properties) 26 | 27 | filtered_text = [] 28 | for element in friends: 29 | match = re.search(friend.decode('utf-8').lower(), element['title'].decode('utf-8').lower()) 30 | if match: 31 | filtered_text.append(element) 32 | return filtered_text 33 | 34 | if __name__ == "__main__": 35 | if len(sys.argv) == 2: 36 | friend = sys.argv[1] 37 | print json.dumps(get_()) -------------------------------------------------------------------------------- /Actions/Skype Copy Clipboard.lbaction/Contents/Scripts/suggestions.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | __author__ = "Pavel Miroshnichenko" 4 | __email__ = "pavel@miroshnichen.co" 5 | 6 | import sys 7 | import re 8 | import json 9 | from subprocess import Popen, PIPE 10 | 11 | def get_(): 12 | cmd = '/usr/bin/osascript "./friends.scpt"' 13 | p = Popen(cmd , shell=True, stdout=PIPE, stderr=PIPE) 14 | out, err = p.communicate() 15 | text = out.split(',') 16 | friends = [] 17 | for item in text: 18 | item = item.split(';') 19 | friend_properties = {} 20 | friend_properties['title'] = item[0].strip() 21 | friend_properties['icon'] = 'com.skype.skype' 22 | friend_properties['subtitle'] = item[1].strip() 23 | friend_properties['action'] = 'default.py' 24 | friend_properties['actionArgument'] = json.dumps(item[1].strip()) 25 | friends.append(friend_properties) 26 | 27 | filtered_text = [] 28 | for element in friends: 29 | match = re.search(friend.decode('utf-8').lower(), element['title'].decode('utf-8').lower()) 30 | if match: 31 | filtered_text.append(element) 32 | return filtered_text 33 | 34 | if __name__ == "__main__": 35 | if len(sys.argv) == 2: 36 | friend = sys.argv[1] 37 | print json.dumps(get_()) -------------------------------------------------------------------------------- /Actions/Notes Navigator.lbaction/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LSMinimumSystemVersion 6 | 10.9 7 | LBDebugLogEnabled 8 | 9 | CFBundleIdentifier 10 | com.facetheheat.notesnavigator 11 | CFBundleIconFile 12 | com.apple.Notes 13 | CFBundleName 14 | Notes Navigator 15 | CFBundleVersion 16 | 1.0 17 | LBRequiredApplication 18 | com.apple.Notes 19 | LBScripts 20 | 21 | LBDefaultScript 22 | 23 | LBReturnsResult 24 | 25 | LBScriptName 26 | default.scpt 27 | 28 | 29 | LBDescription 30 | 31 | LBDownload 32 | https://github.com/facetheheat 33 | LBChangelog 34 | 35 | LBWebsite 36 | http://pavel.miroshnichen.co 37 | LBEmail 38 | pavel@miroshnichen.co 39 | LBSummary 40 | Simple notes.app navigator 41 | LBAuthor 42 | Pavel Miroshnichenko 43 | LBTwitter 44 | @previewthenew 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /Actions/Screen Sharing.lbaction/Contents/Scripts/suggestions.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | __author__ = "Pavel Miroshnichenko" 4 | __email__ = "pavel@miroshnichen.co" 5 | 6 | import os 7 | import sys 8 | import plistlib 9 | import re 10 | import json 11 | 12 | def fetch_hosts_from_vncloc(): 13 | hosts = [] 14 | for root, dirs, files in os.walk(history_folder): 15 | for file in files: 16 | if file.endswith(".vncloc"): 17 | hostPrefs = {} 18 | filePath = root + file 19 | connection_name = plistlib.readPlist(filePath) 20 | connection_name = connection_name['URL'] 21 | hostPrefs['title'] = connection_name[6::] 22 | hostPrefs['icon'] = 'com.apple.ScreenSharing' 23 | hostPrefs['subtitle'] = 'connect to vnc://%s via Screen Sharing.app' % hostPrefs['title'] 24 | hosts.append(hostPrefs) 25 | #creating filtered list 26 | filtered_hosts = [] 27 | for element in hosts: 28 | match = re.match(host, element['title']) 29 | if match: 30 | filtered_hosts.append(element) 31 | return filtered_hosts 32 | 33 | if __name__ == "__main__": 34 | user_name = os.getlogin() 35 | history_folder = ('/Users/'+ user_name +'/Library/Application Support/Screen Sharing/') 36 | if len(sys.argv) == 2: 37 | host = sys.argv[1] 38 | if host.startswith('vnc://'): 39 | host = host[6::] 40 | else: 41 | host = '' 42 | print json.dumps(fetch_hosts_from_vncloc()) -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LBDebugLogEnabled 6 | 7 | CFBundleName 8 | RAM Drive 9 | CFBundleIconFile 10 | RAMDrive.png 11 | CFBundleVersion 12 | 1.0 13 | CFBundleIdentifier 14 | com.facetheheat.ramdrive 15 | LBScripts 16 | 17 | LBDefaultScript 18 | 19 | LBRequiresArgument 20 | 21 | LBLiveFeedbackEnabled 22 | 23 | LBKeepWindowActive 24 | 25 | LBScriptName 26 | listFS.py 27 | 28 | 29 | LBTextInputTitle 30 | Enter size(clusters/Mb/Gb) of RAM Drive 31 | LBDescription 32 | 33 | LBTwitter 34 | @previewthenew 35 | LBDownload 36 | https://github.com/facetheheat 37 | LBChangelog 38 | 39 | LBSummary 40 | Create a RAM Drive 41 | LBAuthor 42 | Pavel Miroshnichenko 43 | LBEmail 44 | pavel@miroshnichen.co 45 | LBWebsite 46 | http://pavel.miroshnichen.co 47 | LBUpdate 48 | https://github.com/facetheheat 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /Actions/Skype Open Chat.lbaction/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LBTextInputTitle 6 | Search for someone to start a conversation 7 | LBDebugLogEnabled 8 | 9 | CFBundleName 10 | Skype: Open chat with friend 11 | CFBundleIconFile 12 | com.skype.skype 13 | CFBundleVersion 14 | 1.0 15 | CFBundleIdentifier 16 | com.facetheheat.skypeopenchat 17 | LBScripts 18 | 19 | LBDefaultScript 20 | 21 | LBLiveFeedbackEnabled 22 | 23 | LBKeepWindowActive 24 | 25 | LBRequiresArgument 26 | 27 | LBAcceptedArgumentTypes 28 | 29 | string 30 | 31 | LBScriptName 32 | suggestions.py 33 | LBReturnsResult 34 | 35 | 36 | 37 | LBDescription 38 | 39 | LBDownload 40 | https://github.com/facetheheat 41 | LBTwitter 42 | @previewthenew 43 | LBSummary 44 | Skype: Open chat with friend 45 | LBAuthor 46 | Pavel Miroshnichenko 47 | LBEmail 48 | pavel@miroshnichen.co 49 | LBWebsite 50 | http://pavel.miroshnichen.co 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /Actions/Skype Copy Clipboard.lbaction/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LBTextInputTitle 6 | Copy friend's name to the clipboard 7 | LBDebugLogEnabled 8 | 9 | CFBundleName 10 | Skype: Copy name to the clipboard 11 | CFBundleIconFile 12 | com.skype.skype 13 | CFBundleVersion 14 | 1.0 15 | CFBundleIdentifier 16 | com.facetheheat.skypecopyclipboard 17 | LBScripts 18 | 19 | LBDefaultScript 20 | 21 | LBKeepWindowActive 22 | 23 | LBLiveFeedbackEnabled 24 | 25 | LBRequiresArgument 26 | 27 | LBAcceptedArgumentTypes 28 | 29 | string 30 | 31 | LBScriptName 32 | suggestions.py 33 | LBReturnsResult 34 | 35 | 36 | 37 | LBDescription 38 | 39 | LBDownload 40 | https://github.com/facetheheat 41 | LBTwitter 42 | @previewthenew 43 | LBSummary 44 | Skype: Copy name to the clipboard 45 | LBAuthor 46 | Pavel Miroshnichenko 47 | LBEmail 48 | pavel@miroshnichen.co 49 | LBWebsite 50 | http://pavel.miroshnichen.co 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /Actions/Screen Sharing.lbaction/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleIconFile 6 | com.apple.ScreenSharing 7 | CFBundleIdentifier 8 | com.facetheheat.screensharing 9 | CFBundleName 10 | VNC History 11 | CFBundleVersion 12 | 1.0 13 | LBTextInputTitle 14 | Host IP/Name 15 | LBScripts 16 | 17 | LBDefaultScript 18 | 19 | LBAcceptedArgumentTypes 20 | 21 | string 22 | 23 | LBRequiresArgument 24 | 25 | LBScriptName 26 | default.js 27 | 28 | LBSuggestionsScript 29 | 30 | LBScriptName 31 | suggestions.py 32 | LBRunInBackground 33 | 34 | 35 | 36 | LBDescription 37 | 38 | LBTwitter 39 | @previewthenew 40 | LBUpdate 41 | https://github.com/facetheheat 42 | LBWebsite 43 | http://pavel.miroshnichen.co 44 | LBEmail 45 | pavel@miroshnichen.co 46 | LBChangelog 47 | 48 | LBDownload 49 | https://github.com/facetheheat 50 | LBSummary 51 | Screen Sharing history browser 52 | LBAuthor 53 | Pavel Miroshnichenko 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /Actions/Open in Bugzilla.lbaction/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LBKeepWindowActive 6 | 7 | LBRequiresArgument 8 | 9 | LBReturnsResult 10 | 11 | LBRunInBackground 12 | 13 | LBLiveFeedbackEnabled 14 | 15 | LBDebugLogEnabled 16 | 17 | CFBundleName 18 | Open in Bugzilla 19 | CFBundleIconFile 20 | Bugzilla.png 21 | CFBundleVersion 22 | 1.0 23 | CFBundleIdentifier 24 | com.facetheheat.openinbugzilla 25 | LBScripts 26 | 27 | LBDefaultScript 28 | 29 | LBRequiresArgument 30 | 31 | LBLiveFeedbackEnabled 32 | 33 | LBKeepWindowActive 34 | 35 | LBScriptName 36 | script.py 37 | 38 | 39 | LBTextInputTitle 40 | paste ticket(s) number 41 | LBDescription 42 | 43 | LBDownload 44 | https://github.com/facetheheat 45 | LBChangelog 46 | 47 | LBSummary 48 | Open Links from the clipboard in Bugzilla 49 | LBAuthor 50 | Pavel Miroshnichenko 51 | LBTwitter 52 | @previewthenew 53 | LBEmail 54 | pavel@miroshnichen.co 55 | LBWebsite 56 | http://pavel.miroshnichen.co 57 | LBUpdate 58 | https://github.com/facetheheat 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /Actions/Link Sharing.lbaction/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LBKeepWindowActive 6 | 7 | LBRequiresArgument 8 | 9 | LBReturnsResult 10 | 11 | LBRunInBackground 12 | 13 | LBLiveFeedbackEnabled 14 | 15 | LBDebugLogEnabled 16 | 17 | CFBundleName 18 | Link Sharing 19 | CFBundleIconFile 20 | Link Sharing.png 21 | CFBundleVersion 22 | 1.0 23 | CFBundleIdentifier 24 | com.facetheheat.linksharing 25 | LBScripts 26 | 27 | LBDefaultScript 28 | 29 | LBRequiresArgument 30 | 31 | LBLiveFeedbackEnabled 32 | 33 | LBKeepWindowActive 34 | 35 | LBScriptName 36 | format_link.rb 37 | 38 | 39 | LBTextInputTitle 40 | paste smb/cifs/afp link to convert 41 | LBDescription 42 | 43 | LBDownload 44 | https://github.com/facetheheat 45 | LBChangelog 46 | 47 | LBSummary 48 | Convert current shared link into os-specific format 49 | LBAuthor 50 | Pavel Miroshnichenko 51 | LBEmail 52 | pavel@miroshnichen.co 53 | LBWebsite 54 | http://pavel.miroshnichen.co 55 | LBTwitter 56 | @previewthenew 57 | LBUpdate 58 | https://github.com/facetheheat 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /Actions/Text Expander Snippets.lbaction/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | LBDebugLogEnabled 6 | 7 | LBRequiredApplication 8 | com.smileonmymac.textexpander 9 | LBAssociatedApplication 10 | com.smileonmymac.textexpander 11 | CFBundleIconFile 12 | com.smileonmymac.textexpander 13 | CFBundleIdentifier 14 | com.facetheheat.textexpanderjs 15 | CFBundleName 16 | Text Expander Snippets 17 | CFBundleVersion 18 | 1.0.1 19 | LBTextInputTitle 20 | Find a snippet 21 | LBScripts 22 | 23 | LBDefaultScript 24 | 25 | LBAcceptedArgumentTypes 26 | 27 | string 28 | 29 | LBRequiresArgument 30 | 31 | LBScriptName 32 | default.js 33 | 34 | LBSuggestionsScript 35 | 36 | LBScriptName 37 | suggestions.js 38 | LBRunInBackground 39 | 40 | 41 | 42 | LBDescription 43 | 44 | LBDownload 45 | https://github.com/facetheheat 46 | LBChangelog 47 | 48 | LBSummary 49 | Searches Text Expander 50 | LBRequirements 51 | Requires a Text Expander 52 | LBAuthor 53 | Pavel Miroshnichenko 54 | LBEmail 55 | pavel@miroshnichen.co 56 | LBWebsite 57 | http://pavel.miroshnichen.co 58 | LBTwitter 59 | @previewthenew 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /Actions/Open in Bugzilla.lbaction/Contents/Scripts/open_url.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | __author__ = "Pavel Miroshnichenko" 4 | __email__ = "facetheheat@icloud.com" 5 | 6 | import os 7 | import os.path 8 | import sys 9 | import subprocess 10 | import json 11 | import plistlib 12 | 13 | supportPath = os.environ.get('LB_SUPPORT_PATH') 14 | settingsPath = supportPath + "/Preferences.plist" 15 | 16 | 17 | def openTicket(ticket): 18 | bugzillaUrlFile = plistlib.readPlist(settingsPath) 19 | bugzillaUrl = bugzillaUrlFile.get('Bugzilla URL') 20 | if bugzillaUrl: 21 | cmd = ["open", bugzillaUrl + "/show_bug.cgi?id=" + ticket] 22 | proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 23 | (output, error_output) = proc.communicate() 24 | return 0 25 | else: 26 | print 'Error in Preferences.plist. File was Removed' 27 | cmd = ["rm", settingsPath] 28 | proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 29 | (output, error_output) = proc.communicate() 30 | return 0 31 | 32 | 33 | def createSettingsFile(): 34 | d = {'Bugzilla URL':"http://server.com/bugzilla",} 35 | settingsFile = open(settingsPath,'w') 36 | try: 37 | plistlib.writePlist(d, settingsFile) 38 | settingsFile.seek(0) 39 | finally: 40 | settingsFile.close() 41 | return 0 42 | 43 | 44 | def main(): 45 | if os.path.isfile(settingsPath): 46 | inputArguments = json.loads(sys.argv[1]) 47 | for item in inputArguments: 48 | openTicket(item.keys()[0]) 49 | else: 50 | createSettingsFile() 51 | openSettingsFile = {} 52 | openSettingsFile['title'] = 'Bugzilla URL is not set. Type ENTER' 53 | openSettingsFile['subtitle'] = 'in Preferences.plist' 54 | openSettingsFile['path'] = "%s" % settingsPath 55 | print json.dumps(openSettingsFile) 56 | return 0 57 | 58 | # Start program 59 | if __name__ == "__main__": 60 | main() 61 | -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/Contents/Scripts/listFS.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | __author__ = "Pavel Miroshnichenko" 4 | __email__ = "facetheheat@icloud.com" 5 | 6 | import sys 7 | import subprocess 8 | import re 9 | import json 10 | 11 | #Create unsorted output from disk utility 12 | #skips first 9 lines of the output 13 | cmd = ["/usr/sbin/diskutil", "listFilesystems"] 14 | proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 15 | (output, error_output) = proc.communicate() 16 | output = output.split('\n')[9:] 17 | 18 | #Create list of filesystems 19 | listFilesystems = [] 20 | for row in output: 21 | row = row.strip() 22 | match = re.search("\(or\)", row, re.I | re.S | re.M) 23 | if match or row == "": 24 | continue 25 | row = row.split(' ') 26 | if row[0] == 'Free Space': 27 | continue 28 | listFilesystems.append(row[0]) 29 | 30 | items = [] 31 | for fs in listFilesystems: 32 | item = {} 33 | item['title'] = fs 34 | item['subtitle'] = "Create %s RAM Drive" % fs 35 | if fs == 'MS-DOS' or fs == 'MS-DOS FAT32' or fs == 'MS-DOS FAT12' or fs == 'MS-DOS FAT16': 36 | item['icon'] = 'fat.png' 37 | elif fs == 'ExFAT': 38 | item['icon'] = 'exfat.png' 39 | elif fs == 'UFSD_NTFS' or fs == 'UFSD_NTFSCOMPR' or fs == 'Tuxera NTFS': 40 | item['icon'] = 'ntfs.png' 41 | elif fs == 'UFSD_EXTFS' or fs == 'UFSD_EXTFS3' or fs == 'UFSD_EXTFS4': 42 | item['icon'] = 'extfs.png' 43 | elif fs == 'HFS+' or fs == 'Journaled HFS+' or 'Case-sensitive HFS+' or 'Case-sensitive Journaled HFS+': 44 | item['icon'] = 'hfs.png' 45 | else: 46 | item['icon'] = 'default.png' 47 | item['action'] = 'createVolume.py' 48 | item['actionReturnsItems'] = True 49 | outputArguments = {} 50 | outputArguments['volumeSize'] = "%s" % sys.argv[1] 51 | outputArguments['filesystemType'] = "%s" % fs 52 | item['actionArgument'] = json.dumps(outputArguments) 53 | items.append(item) 54 | print json.dumps(items) 55 | -------------------------------------------------------------------------------- /Actions/Text Expander Snippets.lbaction/Contents/Scripts/suggestions.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author Pavel Miroshnichenko 3 | * @email pavel@miroshnichen.co 4 | **/ 5 | 6 | function runWithString(argument) 7 | { 8 | if (argument.length == 0){ 9 | LaunchBar.debugLog("EMPTY"); 10 | //return [{ title : "No arguments passed" }] 11 | } else { 12 | //creates 2 requests, getting labels and abbreviations 13 | //bad code 14 | var list_by_abbreviation = LaunchBar.executeAppleScriptFile('te_get_abbr.scpt', argument); 15 | var list_by_label = LaunchBar.executeAppleScriptFile('te_get_label.scpt', argument); 16 | LaunchBar.debugLog(list_by_abbreviation); 17 | LaunchBar.debugLog(list_by_label); 18 | 19 | //create array 20 | var list_by_abbreviation = list_by_abbreviation.split(' '); 21 | var list_by_label = list_by_label.split(' '); 22 | LaunchBar.debugLog(list_by_abbreviation); 23 | LaunchBar.debugLog(list_by_label); 24 | 25 | try { 26 | var launchbar_preview = []; 27 | var i = 0; 28 | for (i = 0; i < list_by_abbreviation.length; i++) { 29 | var the_abbreviation = list_by_abbreviation[i]; 30 | var the_label = list_by_label[i]; 31 | 32 | //remove ',' from the end of item 33 | if (the_abbreviation.substr(the_abbreviation.length - 1) === ','){ 34 | the_abbreviation = the_abbreviation.slice(0,-1); 35 | } 36 | LaunchBar.debugLog(the_abbreviation); 37 | LaunchBar.debugLog(the_label); 38 | 39 | launchbar_preview.push({ 40 | 'title' : the_abbreviation, 41 | 'subtitle' : the_label, 42 | 'icon' : 'com.smileonmymac.textexpander' 43 | }); 44 | } 45 | return launchbar_preview; 46 | } catch (exception) { 47 | LaunchBar.log('Exception while parsing result: ' + exception); 48 | return []; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Actions/Link Sharing.lbaction/Contents/Scripts/format_link.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby 2 | 3 | require 'json' 4 | 5 | url = ARGV[0] 6 | 7 | case url 8 | when /^(smb:\/\/)/ 9 | a1 = url.clone.gsub(/^(([^:\/??#]+?):)??(\/\/)/imx, "\\\\\\\\\\") 10 | a2 = a1.gsub!("\/", "\\") 11 | b1 = url.clone.gsub("smb", "afp") 12 | c1 = url.clone.gsub("smb", "cifs") 13 | printList = [a2, b1, c1, url] 14 | 15 | when /^(cifs:)/ 16 | a2 = url.clone.gsub(/^(([^:\/??#]+?):)??(\/\/)/imx, "\\\\\\\\\\") 17 | a3 = a2.gsub!("\/", "\\") 18 | b1 = url.clone.gsub("cifs", "afp") 19 | c1 = url.clone.gsub("cifs", "cifs") 20 | printList = [a3, b1, c1, url] 21 | 22 | when /^(\/\/)/ 23 | a1 = url.clone.gsub(/^(([^:\/??#]+?):)??(\/\/)/imx, "\\\\\\\\\\") 24 | a2 = a1.gsub!("\/", "\\") 25 | b1 = url.clone.gsub("//", "afp://") 26 | c1 = url.clone.gsub("//", "smb://") 27 | d1 = url.clone.gsub("//", "cifs://") 28 | printList = [a2, b1, c1, d1, url] 29 | 30 | when /^(\\)/ 31 | a1 = url.clone.gsub(/^(([\\+\\]))/imx, "//") 32 | a2 = a1.gsub!("\\", "/") 33 | a3 = a2.gsub!("///", "//") 34 | b1 = a3.clone.gsub("//", "afp://") 35 | c1 = a3.clone.gsub("//", "smb://") 36 | d1 = a3.clone.gsub("//", "cifs://") 37 | printList = [a3, b1, c1, d1, url] 38 | 39 | when /^(afp:)/ 40 | a2 = url.clone.gsub(/^(([^:\/??#]+?):)??(\/\/)/imx, "\\+\\") 41 | a3 = a2.gsub!("\/", "\\") 42 | b1 = url.clone.gsub("afp", "smb") 43 | c1 = url.clone.gsub("afp", "cifs") 44 | printList = [a3, b1, c1, url] 45 | else 46 | puts "Unknown URL\n" 47 | exit 0 48 | end 49 | 50 | items = [] 51 | 52 | item = {} 53 | item['title'] = 'Copy All' 54 | item['icon'] = 'Share Link.png' 55 | item['action'] = 'copy_link.rb' 56 | 57 | argumentList = [] 58 | printList.each do |selectedValue| 59 | outputArgument = {} 60 | outputArgument[selectedValue] = selectedValue 61 | argumentList.push(outputArgument) 62 | end 63 | item['actionArgument'] = argumentList.to_json 64 | 65 | items.push(item) 66 | 67 | printList.each do | value | 68 | item = {} 69 | item['title'] = value 70 | item['icon'] = 'Document.png' 71 | item['action'] = 'copy_link.rb' 72 | argumentOutput = [] 73 | actionOutput = {} 74 | actionOutput[value] = value 75 | argumentOutput.push(actionOutput) 76 | item['actionArgument'] = argumentOutput.to_json 77 | items.push(item) 78 | end 79 | 80 | puts items.to_json 81 | -------------------------------------------------------------------------------- /Actions/RAM Drive.lbaction/Contents/Scripts/createVolume.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import subprocess 5 | import json 6 | import re 7 | import sys 8 | import os 9 | import plistlib 10 | import StringIO 11 | from xml.parsers.expat import ExpatError 12 | from subprocess import Popen, PIPE 13 | 14 | INFO_FIELD_MAP = { 15 | 'DeviceNode': {'name': 'Device', 'value': lambda x: str(x)}, 16 | 'FilesystemName': {'name': 'Filesystem', 'value': lambda x: str(x)}, 17 | 'UsedSpace': {'name': 'Used', 'value': lambda x: x/1024}, 18 | 'UsedPercent': {'name': 'Percent', 'value': lambda x: x/1024}, 19 | 'FreeSpace': {'name': 'Free', 'value': lambda x: x/1024}, 20 | 'TotalSize': {'name': 'Sizd', 'value': lambda x: x/1024}, 21 | 'VolumeName': {'name': 'Volume Name', 'value': lambda x: str(x)}, 22 | 'VolumeUUID': {'name': 'UUID', 'value': lambda x: str(x)}, 23 | } 24 | INFO_FIELD_ORDER = [ 25 | 'DeviceNode', 26 | 'VolumeName', 27 | 'FilesystemName', 28 | 'VolumeUUID', 29 | 'UsedSpace', 30 | 'FreeSpace', 31 | 'TotalSize' 32 | ] 33 | 34 | class DiskUtilError(Exception): 35 | pass 36 | 37 | class DiskInfo(dict): 38 | def __init__(self, device): 39 | if not os.access(device, os.R_OK): 40 | raise DiskUtilError('Device not readable: %s' % device) 41 | 42 | cmd = ['diskutil', 'info', '-plist', device] 43 | p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) 44 | (stdout, stderr) = p.communicate() 45 | try: 46 | plist = StringIO.StringIO(stdout) 47 | self.update(plistlib.readPlist(plist)) 48 | except ExpatError, emsg: 49 | raise DiskUtilError('Error parsing plist: %s' % stdout) 50 | 51 | if self.has_key('TotalSize') and self.has_key('FreeSpace'): 52 | self['UsedSpace'] = self.TotalSize - self.FreeSpace 53 | self['UsedPercent'] = int(round(1-(float(self.FreeSpace) / float(self.TotalSize)))) 54 | 55 | def __getattr__(self, attr): 56 | try: 57 | return self[attr] 58 | except KeyError: 59 | raise AttributeError 60 | 61 | def keys(self): 62 | """ 63 | Return keys as sorted list 64 | """ 65 | return sorted(dict.keys(self)) 66 | 67 | def items(self): 68 | """ 69 | Return (key, value) sorted by key 70 | """ 71 | return [(k, self[k]) for k in self.keys()] 72 | 73 | def values(self): 74 | """ 75 | Return values sorted by key 76 | """ 77 | return [self[k] for k in self.keys()] 78 | 79 | 80 | def createVolume(inputSize, inputFilesystem): 81 | filesystemsList = listFilesystems() 82 | if inputFilesystem.strip() not in filesystemsList: 83 | print "%s does not appear to be a valid file system format" % inputFilesystem 84 | sys.exit(1) 85 | 86 | getSize = inputSize.lower() 87 | value = re.findall('\d+', getSize) 88 | digitValue = lambda nums: int(''.join(str(i) for i in value)) 89 | 90 | if getSize.isdigit(): 91 | getSize = ("ram://%s") % getSize 92 | elif re.findall('m', getSize): 93 | getSize = ("ram://%s") % str(digitValue(value) * 2048) 94 | elif re.findall('g', getSize): 95 | getSize = ("ram://%s") % str(digitValue(value) * 1024 * 2048) 96 | else: 97 | sys.exit('Unable to convert %s' % inputSize ) 98 | 99 | cmd_create = ["/usr/bin/hdiutil", "attach", "-nomount", getSize] 100 | proc = subprocess.Popen(cmd_create, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 101 | (output, error_output) = proc.communicate() 102 | blockDevice = output.split('\n') 103 | blockDevice = " ".join(blockDevice).strip() 104 | 105 | cmd_format = ["/usr/sbin/diskutil", "eraseVolume", inputFilesystem.strip(), "VOLINRAM", blockDevice] 106 | proc = subprocess.Popen(cmd_format, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 107 | (output, error_output) = proc.communicate() 108 | 109 | items = [] 110 | item = {} 111 | item['title'] = DiskInfo(blockDevice).MountPoint 112 | item['path'] = DiskInfo(blockDevice).MountPoint 113 | items.append(item) 114 | print json.dumps(items) 115 | 116 | 117 | def listFilesystems(): 118 | cmd_list_fs = ["/usr/sbin/diskutil", "listFilesystems"] 119 | proc = subprocess.Popen(cmd_list_fs, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 120 | (output, error_output) = proc.communicate() 121 | output = output.split('\n')[9:] 122 | listFilesystems = [] 123 | for row in output: 124 | row = row.strip() 125 | match = re.search("\(or\)", row, re.I | re.S | re.M) 126 | if match or row == "" or row[0] == "Free Space": 127 | continue 128 | row = row.split(' ') 129 | listFilesystems.append(row[0]) 130 | return listFilesystems 131 | 132 | def main(): 133 | inputArguments = json.loads(sys.argv[1]) 134 | volumeSize = inputArguments['volumeSize'] 135 | filesystemType = inputArguments['filesystemType'] 136 | if len(volumeSize) < 2: 137 | itemsError = [] 138 | itemError = {} 139 | itemError['title'] = "Unknown Disk Size" 140 | itemsError.append(itemError) 141 | print json.dumps(itemsError) 142 | else: 143 | createVolume(volumeSize, filesystemType) 144 | 145 | 146 | if __name__ == '__main__': 147 | main() 148 | --------------------------------------------------------------------------------