mirror of
https://github.com/xi-editor/xi-mac.git
synced 2024-10-05 19:49:12 +03:00
Rename project to xi-editor; add license info
Rename project to xi-editor, and supply various bits of license and explanation.
This commit is contained in:
parent
688e8b79db
commit
92f0c79f15
24
CONTRIBUTING.md
Normal file
24
CONTRIBUTING.md
Normal file
@ -0,0 +1,24 @@
|
||||
Want to contribute? Great! First, read this page (including the small print at the end).
|
||||
|
||||
### Before you contribute
|
||||
Before we can use your code, you must sign the
|
||||
[Google Individual Contributor License Agreement](https://developers.google.com/open-source/cla/individual?csw=1)
|
||||
(CLA), which you can do online. The CLA is necessary mainly because you own the
|
||||
copyright to your changes, even after your contribution becomes part of our
|
||||
codebase, so we need your permission to use and distribute your code. We also
|
||||
need to be sure of various other things—for instance that you'll tell us if you
|
||||
know that your code infringes on other people's patents. You don't have to sign
|
||||
the CLA until after you've submitted your code for review and a member has
|
||||
approved it, but you must do it before we can put your code into our codebase.
|
||||
Before you start working on a larger contribution, you should get in touch with
|
||||
us first through the issue tracker with your idea so that we can help out and
|
||||
possibly guide you. Coordinating up front makes it much easier to avoid
|
||||
frustration later on.
|
||||
|
||||
### Code reviews
|
||||
All submissions, including submissions by project members, require review. We
|
||||
use Github pull requests for this purpose.
|
||||
|
||||
### The small print
|
||||
Contributions made by corporations are covered by a different agreement than
|
||||
the one above, the Software Grant and Corporate Contributor License Agreement.
|
202
LICENSE
Normal file
202
LICENSE
Normal file
@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
90
README.md
Normal file
90
README.md
Normal file
@ -0,0 +1,90 @@
|
||||
# xi editor
|
||||
|
||||
The xi editor is an attempt to build a high quality text editor,
|
||||
using modern software engineering techniques. It is initially built for
|
||||
Mac OS X, using Cocoa for the user interface, but other targets are planned.
|
||||
|
||||
Goals include:
|
||||
|
||||
* Insanely high performance. All editing operations should commit and paint
|
||||
in under 16ms. The editor should never make you wait for anything.
|
||||
|
||||
* Beauty. The editor should fit well on a modern desktop, and not look like a
|
||||
throwback from the ’80s or ’90s. Text drawing should be done with the best
|
||||
technology available (Core Text on Mac, DirectWrite on Windows, etc.), and
|
||||
support Unicode fully.
|
||||
|
||||
* Reliability. Crashing, hanging, or losing work should never happen.
|
||||
|
||||
* Developer friendliness. It should be easy to customize xi editor, whether
|
||||
by adding plug-ins or hacking on the core.
|
||||
|
||||
== Design decisions
|
||||
|
||||
Here are some of the design decisions, and motivation why they should
|
||||
contribute to the above goals:
|
||||
|
||||
* Separation into front-end and back-end (the latter also known as “core”)
|
||||
modules. The front-end is responsible for presenting the user interface and
|
||||
drawing a screen full of text. The back-end holds the file buffers and is
|
||||
responsible for all potentially expensive editing operations.
|
||||
|
||||
* Native UI. Cross-platform UI toolkits never look and feel quite right. The
|
||||
best technology for building a UI is the native framework of the platform.
|
||||
On Mac, that’s Cocoa.
|
||||
|
||||
* Rust. The back-end needs to be extremely performant. In particular, it
|
||||
should use little more memory than the buffers being edited. That level of
|
||||
performance is possible in C++, but Rust offers a much more reliable, and
|
||||
in many ways, higher level programming platform.
|
||||
|
||||
* A persistent rope data structure. Persistent ropes are efficient even for
|
||||
very large files. In addition, they present a simple interface to their
|
||||
clients - conceptually, they're a sequence of characters just like a string,
|
||||
and the client need not be aware of any internal structure.
|
||||
|
||||
* Asynchronous operations. The editor should never, ever block and prevent the
|
||||
user from getting their work done. For example, autosave will spawn a
|
||||
thread with a snapshot of the current editor buffer (the peristent rope
|
||||
data structure is copy-on-write so this operation is nearly free), which can
|
||||
then proceed to write out to disk at its leisure, while the buffer is still
|
||||
fully editable.
|
||||
|
||||
* Plug-ins over scripting. Most text editors have an associated scripting
|
||||
language for extending functionality. However, these languages are usually
|
||||
both more arcane and less powerful than “real” languages. The xi editor will
|
||||
communicate with plugins through pipes, letting them be written in any
|
||||
language, and making it easier to integrate with other systems such as
|
||||
version control, deeper static analyzers of code, etc.
|
||||
|
||||
* JSON. The protocol for front-end / back-end communication, as well as
|
||||
between the back-end and plug-ins, is based on simple JSON messages. I
|
||||
considered binary formats, but the actual improvement in performance would
|
||||
be completely in the noise. Using JSON considerably lowers friction for
|
||||
developing plug-ins, as it’s available out of the box for most modern
|
||||
languages, and there are plenty of the libraries available for the other
|
||||
ones.
|
||||
|
||||
## Current status
|
||||
|
||||
This is still a project in its early stages. The Mac build has basic editing
|
||||
functionality (it was used to write this README), but looks very spare and
|
||||
is still missing essentials such as syntax highlighting and auto-indent. At
|
||||
the moment, it’s expected that its main community will be developers
|
||||
interested in hacking on a text editor.
|
||||
|
||||
|
||||
## Authors
|
||||
|
||||
The main author is Raph Levien.
|
||||
|
||||
## Contributions
|
||||
|
||||
We gladly accept contributions via GitHub pull requests, as long as the author
|
||||
has signed the Google Contributor License. Please see CONTRIBUTIONS.md for
|
||||
more details.
|
||||
|
||||
### Disclaimer
|
||||
|
||||
This is not an official Google product (experimental or otherwise), it
|
||||
is just code that happens to be owned by Google.
|
@ -7,12 +7,12 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
AE228F5D1C897CE7000E9B0F /* dimercore in Resources */ = {isa = PBXBuildFile; fileRef = AE228F5C1C897CE7000E9B0F /* dimercore */; };
|
||||
AE228F5D1C897CE7000E9B0F /* xicore in Resources */ = {isa = PBXBuildFile; fileRef = AE228F5C1C897CE7000E9B0F /* xicore */; };
|
||||
AE499DD01C82BB2B002D68AF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE499DCF1C82BB2B002D68AF /* AppDelegate.swift */; };
|
||||
AE499DD21C82BB2B002D68AF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AE499DD11C82BB2B002D68AF /* Assets.xcassets */; };
|
||||
AE499DD51C82BB2B002D68AF /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = AE499DD31C82BB2B002D68AF /* MainMenu.xib */; };
|
||||
AE499DE01C82BB2B002D68AF /* DimerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE499DDF1C82BB2B002D68AF /* DimerTests.swift */; };
|
||||
AE499DEB1C82BB2B002D68AF /* DimerUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE499DEA1C82BB2B002D68AF /* DimerUITests.swift */; };
|
||||
AE499DE01C82BB2B002D68AF /* XiEditorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE499DDF1C82BB2B002D68AF /* XiEditorTests.swift */; };
|
||||
AE499DEB1C82BB2B002D68AF /* XiEditorUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE499DEA1C82BB2B002D68AF /* XiEditorUITests.swift */; };
|
||||
AE499DF91C82C835002D68AF /* CoreConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE499DF81C82C835002D68AF /* CoreConnection.swift */; };
|
||||
AEB66A791CAEFC8F002F686A /* ShadowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB66A781CAEFC8F002F686A /* ShadowView.swift */; };
|
||||
AEBAAA651C83BB1A005637A3 /* python in Resources */ = {isa = PBXBuildFile; fileRef = AEBAAA601C83B503005637A3 /* python */; };
|
||||
@ -27,29 +27,29 @@
|
||||
containerPortal = AE499DC41C82BB2B002D68AF /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = AE499DCB1C82BB2B002D68AF;
|
||||
remoteInfo = Dimer;
|
||||
remoteInfo = XiEditor;
|
||||
};
|
||||
AE499DE71C82BB2B002D68AF /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = AE499DC41C82BB2B002D68AF /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = AE499DCB1C82BB2B002D68AF;
|
||||
remoteInfo = Dimer;
|
||||
remoteInfo = XiEditor;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
AE228F5C1C897CE7000E9B0F /* dimercore */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = dimercore; path = rust/target/debug/dimercore; sourceTree = "<group>"; };
|
||||
AE499DCC1C82BB2B002D68AF /* Dimer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Dimer.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
AE228F5C1C897CE7000E9B0F /* xicore */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = xicore; path = rust/target/debug/xicore; sourceTree = "<group>"; };
|
||||
AE499DCC1C82BB2B002D68AF /* XiEditor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XiEditor.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
AE499DCF1C82BB2B002D68AF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
AE499DD11C82BB2B002D68AF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
AE499DD41C82BB2B002D68AF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||
AE499DD61C82BB2B002D68AF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
AE499DDB1C82BB2B002D68AF /* DimerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DimerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
AE499DDF1C82BB2B002D68AF /* DimerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DimerTests.swift; sourceTree = "<group>"; };
|
||||
AE499DDB1C82BB2B002D68AF /* XiEditorTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XiEditorTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
AE499DDF1C82BB2B002D68AF /* XiEditorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XiEditorTests.swift; sourceTree = "<group>"; };
|
||||
AE499DE11C82BB2B002D68AF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
AE499DE61C82BB2B002D68AF /* DimerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DimerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
AE499DEA1C82BB2B002D68AF /* DimerUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DimerUITests.swift; sourceTree = "<group>"; };
|
||||
AE499DE61C82BB2B002D68AF /* XiEditorUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XiEditorUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
AE499DEA1C82BB2B002D68AF /* XiEditorUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XiEditorUITests.swift; sourceTree = "<group>"; };
|
||||
AE499DEC1C82BB2B002D68AF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
AE499DF81C82C835002D68AF /* CoreConnection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreConnection.swift; sourceTree = "<group>"; };
|
||||
AEB66A781CAEFC8F002F686A /* ShadowView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShadowView.swift; sourceTree = "<group>"; };
|
||||
@ -87,11 +87,11 @@
|
||||
AE499DC31C82BB2B002D68AF = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AE228F5C1C897CE7000E9B0F /* dimercore */,
|
||||
AE228F5C1C897CE7000E9B0F /* xicore */,
|
||||
AEBAAA601C83B503005637A3 /* python */,
|
||||
AE499DCE1C82BB2B002D68AF /* Dimer */,
|
||||
AE499DDE1C82BB2B002D68AF /* DimerTests */,
|
||||
AE499DE91C82BB2B002D68AF /* DimerUITests */,
|
||||
AE499DCE1C82BB2B002D68AF /* XiEditor */,
|
||||
AE499DDE1C82BB2B002D68AF /* XiEditorTests */,
|
||||
AE499DE91C82BB2B002D68AF /* XiEditorUITests */,
|
||||
AE499DCD1C82BB2B002D68AF /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
@ -99,14 +99,14 @@
|
||||
AE499DCD1C82BB2B002D68AF /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AE499DCC1C82BB2B002D68AF /* Dimer.app */,
|
||||
AE499DDB1C82BB2B002D68AF /* DimerTests.xctest */,
|
||||
AE499DE61C82BB2B002D68AF /* DimerUITests.xctest */,
|
||||
AE499DCC1C82BB2B002D68AF /* XiEditor.app */,
|
||||
AE499DDB1C82BB2B002D68AF /* XiEditorTests.xctest */,
|
||||
AE499DE61C82BB2B002D68AF /* XiEditorUITests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
AE499DCE1C82BB2B002D68AF /* Dimer */ = {
|
||||
AE499DCE1C82BB2B002D68AF /* XiEditor */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AE499DCF1C82BB2B002D68AF /* AppDelegate.swift */,
|
||||
@ -119,33 +119,33 @@
|
||||
AED23F141C83C689002246CE /* AppWindowController.xib */,
|
||||
AE499DD61C82BB2B002D68AF /* Info.plist */,
|
||||
);
|
||||
path = Dimer;
|
||||
path = XiEditor;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
AE499DDE1C82BB2B002D68AF /* DimerTests */ = {
|
||||
AE499DDE1C82BB2B002D68AF /* XiEditorTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AE499DDF1C82BB2B002D68AF /* DimerTests.swift */,
|
||||
AE499DDF1C82BB2B002D68AF /* XiEditorTests.swift */,
|
||||
AE499DE11C82BB2B002D68AF /* Info.plist */,
|
||||
);
|
||||
path = DimerTests;
|
||||
path = XiEditorTests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
AE499DE91C82BB2B002D68AF /* DimerUITests */ = {
|
||||
AE499DE91C82BB2B002D68AF /* XiEditorUITests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
AE499DEA1C82BB2B002D68AF /* DimerUITests.swift */,
|
||||
AE499DEA1C82BB2B002D68AF /* XiEditorUITests.swift */,
|
||||
AE499DEC1C82BB2B002D68AF /* Info.plist */,
|
||||
);
|
||||
path = DimerUITests;
|
||||
path = XiEditorUITests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
AE499DCB1C82BB2B002D68AF /* Dimer */ = {
|
||||
AE499DCB1C82BB2B002D68AF /* XiEditor */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = AE499DEF1C82BB2B002D68AF /* Build configuration list for PBXNativeTarget "Dimer" */;
|
||||
buildConfigurationList = AE499DEF1C82BB2B002D68AF /* Build configuration list for PBXNativeTarget "XiEditor" */;
|
||||
buildPhases = (
|
||||
AE499DC81C82BB2B002D68AF /* Sources */,
|
||||
AE499DC91C82BB2B002D68AF /* Frameworks */,
|
||||
@ -156,14 +156,14 @@
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Dimer;
|
||||
productName = Dimer;
|
||||
productReference = AE499DCC1C82BB2B002D68AF /* Dimer.app */;
|
||||
name = XiEditor;
|
||||
productName = XiEditor;
|
||||
productReference = AE499DCC1C82BB2B002D68AF /* XiEditor.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
AE499DDA1C82BB2B002D68AF /* DimerTests */ = {
|
||||
AE499DDA1C82BB2B002D68AF /* XiEditorTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = AE499DF21C82BB2B002D68AF /* Build configuration list for PBXNativeTarget "DimerTests" */;
|
||||
buildConfigurationList = AE499DF21C82BB2B002D68AF /* Build configuration list for PBXNativeTarget "XiEditorTests" */;
|
||||
buildPhases = (
|
||||
AE499DD71C82BB2B002D68AF /* Sources */,
|
||||
AE499DD81C82BB2B002D68AF /* Frameworks */,
|
||||
@ -174,14 +174,14 @@
|
||||
dependencies = (
|
||||
AE499DDD1C82BB2B002D68AF /* PBXTargetDependency */,
|
||||
);
|
||||
name = DimerTests;
|
||||
productName = DimerTests;
|
||||
productReference = AE499DDB1C82BB2B002D68AF /* DimerTests.xctest */;
|
||||
name = XiEditorTests;
|
||||
productName = XiEditorTests;
|
||||
productReference = AE499DDB1C82BB2B002D68AF /* XiEditorTests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.unit-test";
|
||||
};
|
||||
AE499DE51C82BB2B002D68AF /* DimerUITests */ = {
|
||||
AE499DE51C82BB2B002D68AF /* XiEditorUITests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = AE499DF51C82BB2B002D68AF /* Build configuration list for PBXNativeTarget "DimerUITests" */;
|
||||
buildConfigurationList = AE499DF51C82BB2B002D68AF /* Build configuration list for PBXNativeTarget "XiEditorUITests" */;
|
||||
buildPhases = (
|
||||
AE499DE21C82BB2B002D68AF /* Sources */,
|
||||
AE499DE31C82BB2B002D68AF /* Frameworks */,
|
||||
@ -192,9 +192,9 @@
|
||||
dependencies = (
|
||||
AE499DE81C82BB2B002D68AF /* PBXTargetDependency */,
|
||||
);
|
||||
name = DimerUITests;
|
||||
productName = DimerUITests;
|
||||
productReference = AE499DE61C82BB2B002D68AF /* DimerUITests.xctest */;
|
||||
name = XiEditorUITests;
|
||||
productName = XiEditorUITests;
|
||||
productReference = AE499DE61C82BB2B002D68AF /* XiEditorUITests.xctest */;
|
||||
productType = "com.apple.product-type.bundle.ui-testing";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
@ -220,7 +220,7 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = AE499DC71C82BB2B002D68AF /* Build configuration list for PBXProject "Dimer" */;
|
||||
buildConfigurationList = AE499DC71C82BB2B002D68AF /* Build configuration list for PBXProject "XiEditor" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
@ -233,9 +233,9 @@
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
AE499DCB1C82BB2B002D68AF /* Dimer */,
|
||||
AE499DDA1C82BB2B002D68AF /* DimerTests */,
|
||||
AE499DE51C82BB2B002D68AF /* DimerUITests */,
|
||||
AE499DCB1C82BB2B002D68AF /* XiEditor */,
|
||||
AE499DDA1C82BB2B002D68AF /* XiEditorTests */,
|
||||
AE499DE51C82BB2B002D68AF /* XiEditorUITests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
@ -245,7 +245,7 @@
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
AE228F5D1C897CE7000E9B0F /* dimercore in Resources */,
|
||||
AE228F5D1C897CE7000E9B0F /* xicore in Resources */,
|
||||
AEBAAA651C83BB1A005637A3 /* python in Resources */,
|
||||
AED23F161C83C689002246CE /* AppWindowController.xib in Resources */,
|
||||
AE499DD21C82BB2B002D68AF /* Assets.xcassets in Resources */,
|
||||
@ -303,7 +303,7 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
AE499DE01C82BB2B002D68AF /* DimerTests.swift in Sources */,
|
||||
AE499DE01C82BB2B002D68AF /* XiEditorTests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -311,7 +311,7 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
AE499DEB1C82BB2B002D68AF /* DimerUITests.swift in Sources */,
|
||||
AE499DEB1C82BB2B002D68AF /* XiEditorUITests.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -320,12 +320,12 @@
|
||||
/* Begin PBXTargetDependency section */
|
||||
AE499DDD1C82BB2B002D68AF /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = AE499DCB1C82BB2B002D68AF /* Dimer */;
|
||||
target = AE499DCB1C82BB2B002D68AF /* XiEditor */;
|
||||
targetProxy = AE499DDC1C82BB2B002D68AF /* PBXContainerItemProxy */;
|
||||
};
|
||||
AE499DE81C82BB2B002D68AF /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = AE499DCB1C82BB2B002D68AF /* Dimer */;
|
||||
target = AE499DCB1C82BB2B002D68AF /* XiEditor */;
|
||||
targetProxy = AE499DE71C82BB2B002D68AF /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
@ -427,9 +427,9 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
INFOPLIST_FILE = Dimer/Info.plist;
|
||||
INFOPLIST_FILE = XiEditor/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.levien.Dimer;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.levien.XiEditor;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Debug;
|
||||
@ -439,9 +439,9 @@
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
INFOPLIST_FILE = Dimer/Info.plist;
|
||||
INFOPLIST_FILE = XiEditor/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.levien.Dimer;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.levien.XiEditor;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Release;
|
||||
@ -451,11 +451,11 @@
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
INFOPLIST_FILE = DimerTests/Info.plist;
|
||||
INFOPLIST_FILE = XiEditorTests/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.levien.DimerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.levien.XiEditorTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Dimer.app/Contents/MacOS/Dimer";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/XiEditor.app/Contents/MacOS/XiEditor";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@ -464,11 +464,11 @@
|
||||
buildSettings = {
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
INFOPLIST_FILE = DimerTests/Info.plist;
|
||||
INFOPLIST_FILE = XiEditorTests/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.levien.DimerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.levien.XiEditorTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Dimer.app/Contents/MacOS/Dimer";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/XiEditor.app/Contents/MacOS/XiEditor";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
@ -476,11 +476,11 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
INFOPLIST_FILE = DimerUITests/Info.plist;
|
||||
INFOPLIST_FILE = XiEditorUITests/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.levien.DimerUITests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.levien.XiEditorUITests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TEST_TARGET_NAME = Dimer;
|
||||
TEST_TARGET_NAME = XiEditor;
|
||||
USES_XCTRUNNER = YES;
|
||||
};
|
||||
name = Debug;
|
||||
@ -489,11 +489,11 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
INFOPLIST_FILE = DimerUITests/Info.plist;
|
||||
INFOPLIST_FILE = XiEditorUITests/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.levien.DimerUITests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.levien.XiEditorUITests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TEST_TARGET_NAME = Dimer;
|
||||
TEST_TARGET_NAME = XiEditor;
|
||||
USES_XCTRUNNER = YES;
|
||||
};
|
||||
name = Release;
|
||||
@ -501,7 +501,7 @@
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
AE499DC71C82BB2B002D68AF /* Build configuration list for PBXProject "Dimer" */ = {
|
||||
AE499DC71C82BB2B002D68AF /* Build configuration list for PBXProject "XiEditor" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
AE499DED1C82BB2B002D68AF /* Debug */,
|
||||
@ -510,7 +510,7 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
AE499DEF1C82BB2B002D68AF /* Build configuration list for PBXNativeTarget "Dimer" */ = {
|
||||
AE499DEF1C82BB2B002D68AF /* Build configuration list for PBXNativeTarget "XiEditor" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
AE499DF01C82BB2B002D68AF /* Debug */,
|
||||
@ -519,7 +519,7 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
AE499DF21C82BB2B002D68AF /* Build configuration list for PBXNativeTarget "DimerTests" */ = {
|
||||
AE499DF21C82BB2B002D68AF /* Build configuration list for PBXNativeTarget "XiEditorTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
AE499DF31C82BB2B002D68AF /* Debug */,
|
||||
@ -528,7 +528,7 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
AE499DF51C82BB2B002D68AF /* Build configuration list for PBXNativeTarget "DimerUITests" */ = {
|
||||
AE499DF51C82BB2B002D68AF /* Build configuration list for PBXNativeTarget "XiEditorUITests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
AE499DF61C82BB2B002D68AF /* Debug */,
|
@ -2,6 +2,6 @@
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:Dimer.xcodeproj">
|
||||
location = "self:XiEditor.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
@ -24,7 +24,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
// show main app window
|
||||
appWindowController = AppWindowController.init(windowNibName: "AppWindowController")
|
||||
|
||||
let corePath = NSBundle.mainBundle().pathForResource("dimercore", ofType: "")
|
||||
let corePath = NSBundle.mainBundle().pathForResource("xicore", ofType: "")
|
||||
if let corePath = corePath {
|
||||
coreConnection = CoreConnection(path: corePath) { [weak self] data -> () in
|
||||
self?.handleCoreCmd(data)
|
@ -5,7 +5,7 @@
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9532"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="AppWindowController" customModule="Dimer" customModuleProvider="target">
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="AppWindowController" customModule="XiEditor" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="editView" destination="hxn-ZY-xOb" id="lo9-GC-nJN"/>
|
||||
<outlet property="scrollView" destination="ddX-9c-KvF" id="Ogv-mH-WSU"/>
|
||||
@ -30,7 +30,7 @@
|
||||
<rect key="frame" x="1" y="1" width="480" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hxn-ZY-xOb" customClass="EditView" customModule="Dimer" customModuleProvider="target">
|
||||
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hxn-ZY-xOb" customClass="EditView" customModule="XiEditor" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
|
||||
</customView>
|
||||
</subviews>
|
||||
@ -44,7 +44,7 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
</scrollView>
|
||||
<customView misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5Jy-03-fcM" customClass="ShadowView" customModule="Dimer" customModuleProvider="target">
|
||||
<customView misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5Jy-03-fcM" customClass="ShadowView" customModule="XiEditor" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="265"/>
|
||||
</customView>
|
||||
</subviews>
|
@ -12,15 +12,15 @@
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Dimer" customModuleProvider="target"/>
|
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="XiEditor" customModuleProvider="target"/>
|
||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||
<items>
|
||||
<menuItem title="Dimer" id="1Xt-HY-uBw">
|
||||
<menuItem title="Xi Editor" id="1Xt-HY-uBw">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Dimer" systemMenu="apple" id="uQy-DD-JDr">
|
||||
<menu key="submenu" title="Xi Editor" systemMenu="apple" id="uQy-DD-JDr">
|
||||
<items>
|
||||
<menuItem title="About Dimer" id="5kV-Vb-QxS">
|
||||
<menuItem title="About Xi Editor" id="5kV-Vb-QxS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
|
||||
@ -34,7 +34,7 @@
|
||||
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
|
||||
<menuItem title="Hide Dimer" keyEquivalent="h" id="Olw-nP-bQN">
|
||||
<menuItem title="Hide Xi Editor" keyEquivalent="h" id="Olw-nP-bQN">
|
||||
<connections>
|
||||
<action selector="hide:" target="-1" id="PnN-Uc-m68"/>
|
||||
</connections>
|
||||
@ -52,7 +52,7 @@
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
|
||||
<menuItem title="Quit Dimer" keyEquivalent="q" id="4sb-4s-VLi">
|
||||
<menuItem title="Quit Xi Editor" keyEquivalent="q" id="4sb-4s-VLi">
|
||||
<connections>
|
||||
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
|
||||
</connections>
|
||||
@ -653,7 +653,7 @@
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
|
||||
<items>
|
||||
<menuItem title="Dimer Help" keyEquivalent="?" id="FKE-Sm-Kum">
|
||||
<menuItem title="Xi Editor Help" keyEquivalent="?" id="FKE-Sm-Kum">
|
||||
<connections>
|
||||
<action selector="showHelp:" target="-1" id="y7X-2Q-9no"/>
|
||||
</connections>
|
@ -22,7 +22,7 @@ class CoreConnection {
|
||||
var callback: AnyObject -> ()
|
||||
|
||||
// RPC state
|
||||
var queue = dispatch_queue_create("com.levien.dimer.CoreConnection", DISPATCH_QUEUE_SERIAL)
|
||||
var queue = dispatch_queue_create("com.levien.xi.CoreConnection", DISPATCH_QUEUE_SERIAL)
|
||||
var rpcIndex = 0
|
||||
var pending = Dictionary<Int, AnyObject? -> ()>()
|
||||
|
@ -72,7 +72,7 @@ class EditView: NSView {
|
||||
attributes = [String(kCTFontAttributeName): font]
|
||||
fontWidth = getFontWidth(font)
|
||||
selcolor = NSColor(colorLiteralRed: 0.7, green: 0.85, blue: 0.99, alpha: 1.0)
|
||||
updateQueue = dispatch_queue_create("com.levien.dimer.update", DISPATCH_QUEUE_SERIAL)
|
||||
updateQueue = dispatch_queue_create("com.levien.xi.update", DISPATCH_QUEUE_SERIAL)
|
||||
super.init(frame: frameRect)
|
||||
widthConstraint = NSLayoutConstraint(item: self, attribute: .Width, relatedBy: .GreaterThanOrEqual, toItem: nil, attribute: .Width, multiplier: 1, constant: 400)
|
||||
widthConstraint!.active = true
|
@ -13,9 +13,9 @@
|
||||
// limitations under the License.
|
||||
|
||||
import XCTest
|
||||
@testable import Dimer
|
||||
@testable import XiEditor
|
||||
|
||||
class DimerTests: XCTestCase {
|
||||
class XiEditorTests: XCTestCase {
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
@ -14,7 +14,7 @@
|
||||
|
||||
import XCTest
|
||||
|
||||
class DimerUITests: XCTestCase {
|
||||
class XiEditorUITests: XCTestCase {
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
Loading…
Reference in New Issue
Block a user