For five years, FlashDevelop has been my code editor of choice.
This is not a bad thing if you are running Windows, but when you boot into Ubuntu or OS X, which editor do you use?
I am not implying that Linux and Mac do not have their share of excellent editors, but I am most productive when I have FlashDevelop. Many people actually boot Windows in a VM in order to use FlashDevelop on OS X or Linux. I literally went from using Linux full-time for five months, on all my machines, to using Windows because of FlashDevelop.
There is a long story behind efforts to port FlashDevelop to Mac and Linux. There are instructions for using FlashDevelop in Wine, but I can’t get it to work. There have been efforts to compile using Mono, but some of the components of FlashDevelop, namely ScintillaNET and DockPanelSuite, do not work outside of Windows.
If you are interested in knowing more of the details behind the possible approaches to porting FlashDevelop, and the pitfalls, I would be more than happy to go into further detail, later
I picked this up again as I began using Ubuntu 12.04 as my full-time OS. I’ve already worked on porting FlashDevelop in the past, so I was (fortunately) able to fast-forward through a lot of the “what if?” conjecture that comes along with a porting effort.
Philippe Elsass is one of the lead developers for the FlashDevelop project, and one of my close friends. As we discussed this idea again, we both felt that there were two “ideal” options on the table.
Either we could:
- Compile FlashDevelop using elements from MonoDevelop (like Mono.Texteditor and MonoDevelop.Ide.Gui)
- Create a MonoDevelop add-in using logic from FlashDevelop
I explored the first approach, but satisfying the dependencies for all of MonoDevelop’s controls is difficult. Also, Philippe made the excellent point that much of an IDE is common features, like find and replace, so it would make sense to try and focus on the important things, like haxe language support.
This week I’ve been working on the second approach — extending MonoDevelop using FlashDevelop functionality. This is actually something Philippe and I worked on a year ago. I am working with MonoDevelop 2.8, which is in the Ubuntu 12.04 repositories. I have had much better success extending MonoDevelop this time than I did with MonoDevelop 2.6 in the past, and have enjoyed the editor a lot more.
Here is a list of features I have working:
- NME project generation
- Haxe language highlighting
- Haxe compiler-based code completion
- Build and run support for NME projects
With these features in-place, I feel that my “HaxeBinding” add-in for MonoDevelop is mature enough to share with you. Generic haxe project support is not working, but I would like to add it in the future. If you’re working with NME, you might be interested in giving this a try.
I have put the source on GitHub so you can take a look or try it out if you are interested. I have only used MonoDevelop 2.8 with the add-in, but if you are using a different version, I can try and see if it is compatible. The next steps are to continue to improve haxe language support, NME project and haxe project support, as well to add more polish to install and distribution process.
FlashDevelop is written in C#, and so is MonoDevelop. That means that extending MonoDevelop using code from FlashDevelop is really feasible. You may be surprised if you try it how similar MonoDevelop feels to FlashDevelop.