Skip to content

Instantly share code, notes, and snippets.

@jsbain
Last active December 9, 2016 06:21
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jsbain/c9f42c81c53b276b6560 to your computer and use it in GitHub Desktop.
Save jsbain/c9f42c81c53b276b6560 to your computer and use it in GitHub Desktop.
add_action.py
# coding: utf-8
'''
Manipulate action (wrench) menu
example:
add_action('/stash/launch_stash.py','monitor')
save_defaults() # so it is stored for next launch
'''
from objc_util import *
NSUserDefaults = ObjCClass('NSUserDefaults')
def add_action(scriptName,iconName='python',iconColor='',title=''):
'''adds an editor action. scriptName should start with /
(e.g /stash/stash.py)
iconName should be an icon without leading prefix, or trailing size. i.e alert instead of iob:alert_256
iconColor should be a web style hex string, eg aa00ff
title is the alternative title
Call save_defaults() to store defaults
')'''
defaults=NSUserDefaults.standardUserDefaults()
kwargs=locals()
entry={ key:kwargs[key]
for key in
('scriptName','iconName','iconColor','title','arguments')
if key in kwargs and kwargs[key] }
editoractions=get_actions()
editoractions.append(ns(entry))
defaults.setObject_forKey_(editoractions,'EditorActionInfos')
def remove_action(scriptName):
''' remove all instances of a given scriptname.
Call save_defaults() to store for next session
'''
defaults=NSUserDefaults.standardUserDefaults()
editoractions=get_actions()
[editoractions.remove(x) for x in editoractions if str(x['scriptName'])==scriptName]
defaults.setObject_forKey_(editoractions,'EditorActionInfos')
def remove_action_at_index(index):
''' remove action at index. Call save_defaults() to save result.
'''
defaults=NSUserDefaults.standardUserDefaults()
editoractions = get_actions()
del editoractions[index]
defaults.setObject_forKey_(editoractions,'EditorActionInfos')
def get_defaults_dict():
'''return NSdictionary of defaults'''
defaults=NSUserDefaults.standardUserDefaults()
return defaults.dictionaryRepresentation()
def get_actions():
'''return action list'''
defaults=NSUserDefaults.standardUserDefaults()
return list(defaults.arrayForKey_('EditorActionInfos'))
def save_defaults():
'''save current set of defaults'''
defaults=NSUserDefaults.standardUserDefaults()
NSUserDefaults.setStandardUserDefaults_(defaults)
@ywangd
Copy link

ywangd commented Mar 4, 2016

@jsbain I am going to create a command "action" based on this script if you are OK with it.
I am thinking that the command would be used like:

action add ..
action remove ...
action list ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment