{"id":28266027,"url":"https://github.com/sillyutility/rx-editor","last_synced_at":"2025-06-15T07:30:51.222Z","repository":{"id":288146131,"uuid":"329706694","full_name":"SillyUtility/Rx-Editor","owner":"SillyUtility","description":"Alternative macOS scripting dialect and editor","archived":false,"fork":false,"pushed_at":"2022-03-11T22:27:38.000Z","size":16204,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-20T13:15:32.331Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SillyUtility.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-01-14T18:53:04.000Z","updated_at":"2022-03-12T00:50:45.000Z","dependencies_parsed_at":"2025-04-15T20:01:37.471Z","dependency_job_id":null,"html_url":"https://github.com/SillyUtility/Rx-Editor","commit_stats":null,"previous_names":["sillyutility/rx-editor"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SillyUtility/Rx-Editor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SillyUtility%2FRx-Editor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SillyUtility%2FRx-Editor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SillyUtility%2FRx-Editor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SillyUtility%2FRx-Editor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SillyUtility","download_url":"https://codeload.github.com/SillyUtility/Rx-Editor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SillyUtility%2FRx-Editor/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259940443,"owners_count":22935283,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-20T13:14:18.393Z","updated_at":"2025-06-15T07:30:51.209Z","avatar_url":"https://github.com/SillyUtility.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"#+TITLE: Rx Editor\n#+DATE: 2021-01-14\n#+STARTUP: showall\n\n[[./assets/icon-sm.png]]\n\nRx Editor is a script editor with a interactive interpreter ([[https://wiki.c2.com/?ReadEvalPrintLoop][REPL]]). Rx\nis also a dialect of AppleScript expressed in JavaScript that should\nbe easier and more familiar than the Apple JS binding.\n\nAppleScript drives me crazy. It isn't interactive like /every/ other\nscripting language. It is too verbose (and that's coming from someone\nthat loves ObjC). Worst of all, it isn't discoverable.\n\nAt some point Apple attempted to fix AppleScript by providing\nJavaScript bindings. Unfortunately, the JS bindings don't make\nscripting much better. The Apple provided JS bindings suffer from all\nthe afflictions of AppleScript, but with a vaguely JS feel.\n\nRx Editor is my attempt to make scripting suck less.\n\n* Requirements\n\n- JavaScriptCore with the ObjC API requires macOS 10.9\n- XPC requires macOS 10.8\n- =NSXMLDocumentXInclude= requires macOS 10.12\n- ScriptingBridge requires macOS 10.5\n- OSAKit some requires macOS 10.6, some macOS 10.10\n- =stringByApplyingTransform:reverse:= requires macOS 10.11\n\nThe minimum macOS version supported is therefore macOS 10.12 because\nof the use of =NSXMLDocumentXInclude=.\n\n* Development Notes\n\nMostly reference materials I fing myself needing as I develop Rx.\n\n** Scripting headers\n\n- OSAKit/OSAKit.h\n- ScriptingBridge/ScriptingBridge.h\n- Foundation/NSAppleEventDescriptor.h\n- Foundation/NSAppleEventManager.h\n- Foundation/NSAppleScript.h\n- Foundation/NSObjectScripting.h\n- Foundation/NSUserScriptTask.h\n- Foundation/NSScriptSuiteRegistry.h\n- Foundation/NSScriptClassDescription.h\n- Foundation/NSScriptCoercionHandler.h\n- Foundation/NSScriptCommand.h\n- Foundation/NSScriptCommandDescription.h\n- Foundation/NSScriptExecutionContext.h\n- Foundation/NSScriptKeyValueCoding.h\n- Foundation/NSScriptObjectSpecifiers.h\n- Foundation/NSScriptStandardSuiteCommands.h\n- Foundation/NSScriptSuiteRegistry.h\n- Foundation/NSScriptWhoseTests.h\n- CoreServices/AE/AE.h\n- Carbon/OpenScripting/OpenScripting.h\n- Carbon/HIToolbox/AEInteraction.h\n- AppKit/NSAppleScriptExtensions.h\n- AppKit/NSApplicationScripting.h\n- AppKit/NSDocumentScripting.h\n- AppKit/NSTextStorageScripting.h\n- AppKit/NSWindowScripting.h\n- AppleScriptKit/ASKPluginObject.h\n- AppleScriptObjC/AppleScriptObjC.h\n\n** Apple scripting documentation\n\n- [[https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/EnablingAppSandbox.html#//apple_ref/doc/uid/TP40011195-CH4-SW25][Enabling Scripting of Other Apps]]\n- [[https://developer.apple.com/documentation/bundleresources/information_property_list/nsappleeventsusagedescription?language=objc][NSAppleEventsUsageDescription]]\n- [[https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html][ObjC Type Encodings]]\n- [[https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html#//apple_ref/doc/uid/TP40008048-CH101-SW1][Property Declarations \u0026 Encodings]]\n\n** Scripting type equivalents\n\n| Objective-C type  | JavaScript type                     | AppleScript type               |\n|-------------------+-------------------------------------+--------------------------------|\n| nil               | undefined                           | null                           |\n| NSNull            | null                                | missing value                  |\n| NSString          | string                              | text                           |\n| long              | number                              | integer                        |\n| long long         | number                              | double integer                 |\n| double            | number                              | real                           |\n| NSNumber          | number, boolean                     | integer, real, number, boolean |\n| NSNumber (BOOL)   | boolean                             | boolean                        |\n| NSNumber (OSType) | number                              | type                           |\n| NSDictionary      | Object object                       | record                         |\n| NSArray           | Array object                        | list                           |\n| NSDate            | Date object                         | date                           |\n| NSBlock (1)       | Function object (1)                 | script                         |\n| id (2)            | Wrapper object (2)                  | any                            |\n| Class (3)         | Constructor object (3)              |                                |\n|-------------------+-------------------------------------+--------------------------------|\n| CGPoint           | { x: #, y: # }                      | point                          |\n| NSRange           | { location: #, length: # }          |                                |\n| CGRect            | { x: #, y: #, width: #, height: # } | rectangle                      |\n| CGSize            | { width: #, height: # }             |                                |\n\n\n** TODO Implemented AppleScript types\n\n- [ ] any\n- [X] text\n- [X] integer\n- [X] real\n- [X] number\n- [X] boolean\n- [ ] specifier, reference\n- [ ] location specifier\n- [X] record\n- [X] date\n- [ ] file, alias\n- [X] point\n- [X] rectangle\n- [X] type\n- [ ] missing value\n- or the name of a class, enumeration, record-type, or value-type\n  defined elsewhere in the sdef\n- To specify a complex type such as \"list of integer\" or \"number or\n  text\", use a type element ~\u003ctype type=\"integer\" list=\"yes\"/\u003e~, or\n\n#+begin_src xml\n  \u003cproperty name=\"frequency\"\u003e\n    \u003ctype type=\"number\"/\u003e\n    \u003ctype type=\"text\"/\u003e\n  \u003c/property\u003e\n#+end_src\n\nWhat is a specifier? It's an unevaluated path to an object.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsillyutility%2Frx-editor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsillyutility%2Frx-editor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsillyutility%2Frx-editor/lists"}