orbiton
Configuration-free text editor and IDE limited to VT100. Suitable for writing git commit messages, editing Markdown, config files, source code, man pages and for quick edit-format-compile cycles when programming. Has syntax highlighting, jump-to-error, rainbow parentheses, macros, llm tab completion, cut/paste portals and a simple gdb front-end.
Stars: 516
Orbiton is a text editor and simple IDE designed with minimal annoyance in mind, not highly configurable to help users stay focused, and supports rapid edit-format-compile cycles. It is suitable for writing git commit messages, editing README.md and TODO.md files, writing Markdown and exporting to HTML or PDF, learning programming languages, editing files within larger projects, solving Advent of Code tasks, and providing a distraction-free environment for writing. The tool offers unique features like smart cursor movement, paste and copy shortcuts, portal for copying lines across files, code building and formatting shortcuts, and more.
README:
Orbiton is a text editor and a simple IDE with the following goals in mind:
-
Minimal annoyance (within the limits of
VT100
) - Not be configurable (with the exception of themes) to help users stay focused
- Support for rapid edit-format-compile cycles
Please submit a PR if anything can be improved to help reach these goals.
Orbiton might be a good fit for:
- Writing git commit messages (using
EDITOR=o git commit
). - Editing
README.md
andTODO.md
files. - Writing Markdown and then exporting to HTML or PDF.
- Learning programming languages, like Rust or Zig.
- Editing files deep within larger Go or C++ projects.
- Solving Advent of Code tasks.
- Being placed on a live image for a Linux or BSD distro, since it supports VT100, is small and self-contained, has a built-in log, man page and image viewer, has an optional nano/pico mode, can be used as
EDITOR=o visudo
and has built-in support for neatly formatting/etc/fstab
files. - Writing any number of words in a distraction-free fullscreen environment (toggle the status bar by pressing
ctrl-g
to see the word count).
Screenshot of the VTE GUI application (that can be found in the gtk3
directory), running the o
editor:
Stepping through the assembly instructions of a Rust program by entering debug mode with the ctrl-o
menu and then stepping with ctrl-n
:
Editing a C source file in og
using the "synthwave" theme:
There are also light themes available:
orbiton |
---|
With Go 1.21, the development version of o
can be installed like this:
go install github.com/xyproto/orbiton/v2@latest && mv -i ~/go/bin/orbiton ~/go/bin/o
Adjust the mv
flags and the ~/go/bin
path as needed. Perhaps go install
will have an -o
flag in the future.
Alternatively, download and install a release version. For example, for Raspberry Pi 2, 3 or 4 running Linux:
curl -sL 'https://github.com/xyproto/orbiton/releases/download/v2.68.6/orbiton-2.68.6-linux_armv7_static.tar.xz' | tar JxC /tmp && sudo install -Dm755 /tmp/orbiton-2.68.6-linux_armv7_static/o /usr/bin/o && sudo install -Dm644 /tmp/orbiton-2.68.6-linux_armv7_static/o.1.gz /usr/share/man/man1/o.1.gz
To set:
git config --global core.editor o
To unset:
git config --global --unset core.editor
By setting the MANPAGER
environment variable, it's possible to use o
for viewing man pages:
export MANPAGER=o
An alternative to viewing man pages in o
is to use less
:
export MANPAGER='less -s -M +Gg'
Install o
manually, until an OpenSUSE package exists:
git clone https://github.com/xyproto/orbiton
cd orbiton
make && sudo make install
The following is not strictly needed, but it sets everything up to make full use of o
:
Add this to ~/.alias
:
alias o=/usr/bin/o
Add this to ~/.profile
:
export MANPAGER=/usr/bin/o
export EDITOR=/usr/bin/o
Log out and in again to activate the changes.
These features are unique to o
, as far as I am aware:
- If the loaded file is read-only, all text will be red by default.
- Smart cursor movement, trying to maintain the X position when moving up and down, across short and long lines.
- Press
ctrl-v
once to paste one line, pressctrl-v
again to paste the rest. - Press
ctrl-c
once to copy one line, pressctrl-c
again to copy a block of lines (until a blank line). - Open or close a portal with
ctrl-r
. When a portal is open, copy lines across files (or within the same file) withctrl-v
. - Build code with
ctrl-space
and format code withctrl-w
, for a wide range of programming languages. - Cycle git rebase keywords with
ctrl-w
orctrl-r
, when an interactive git rebase session is in progress. - Jump to a line with
ctrl-l
. Either enter a number to jump to a line or just pressreturn
(ort
) to jump to the top. Pressctrl-l
andreturn
again (orb
) to jump to the bottom. Pressc
to jump to the center. - When jumping to a specific line in a file with
ctrl-l
, jumping to a percentage (like50%
) or a fraction (like0.5
or.5
) is also possible. It is also possible to jump to one of the highlighted letters. - If tab completion in the terminal went wrong and you are trying to open a
main.
file that does not exist, butmain.cpp
andmain.o
does exists, thenmain.cpp
will be opened. - Search by pressing
ctrl-f
, entering text and pressingreturn
. Replace by pressingtab
instead ofreturn
, then enter the replacement text and pressreturn
. Searching for unicode runes on the formu+0000
is also supported. - Type
iferr
on a single line in a Go or Odin program and pressreturn
to insert a suitableif err != nil { return ... }
block, based on koron/iferr. - Use the built-in Markdown table editor by pressing
ctrl-t
when the cursor is on a table. This works best for tables that are not too wide. - Format Markdown tables by moving the cursor to a table and pressing
ctrl-w
. - For C-like languages, missing parentheses are added to statements like
if
,for
andwhile
when return is pressed. - Pressing
ctrl-f
twice searches for the word under the cursor. - Lines are highlighted only when the up and down arrow keys are used.
- It can display the name of the function that the cursor is within, in the upper right corner of the screen, for some programming languages.
- The syntax highlighting is instant.
- Opens files quickly.
- Can compile
"Hello, World"
in many popular programming languages simply by pressingctrl-space
. - Create, build and run a simple program in C, by running
o main.c
, pressingctrl-w
and then a doublectrl-space
. - Configuration-free, for better and for worse.
- Can preview
.png
,.jpg
,.jpeg
,.gif
,.ico
,.bmp
or.webp
images directly in the terminal (using a scaled down version and up to 16 colors). - The
-p
flag followed by a filename can be used for just pasting the clipboard to a new file, instead of editing a file. -
ctrl-t
can jump between a C++ header and source file, when editing C++ code. -
ctrl-t
shows the Markdown table editor, when editing Markdown and the cursor is on a Markdown table. - Can only edit one file at the time, by design.
- Provides syntax highlighting for Go, Rust, C++, Markdown, Bash and several other languages. There is generic syntax highlighting built-in.
- Will jump to the last visited line when opening a recent file.
- Is provided as a single self-contained executable.
- Loads faster than both
vim
andemacs
, for small files. - Can render text to PDF either by itself or by using
pandoc
. - Tested with
alacritty
,konsole
,st
,urxvt
,xfce4-terminal
,xterm
andzutty
. - Tested on Arch Linux, Debian, OpenSUSE, macOS, FreeBSD and OpenBSD.
- Never asks before saving or quitting. Be careful.
- The
NO_COLOR
environment variable can be set to disable all colors. - Rainbow parentheses makes lines with many parentheses easier to read.
- Limited to VT100, so hotkeys like
ctrl-a
andctrl-e
may need to be used instead ofHome
andEnd
. And for browsing up and down,ctrl-n
andctrl-p
may be used. - Compiles with either
go
orgccgo
. - Will strip trailing whitespace whenever it can.
- Must be given a filename at start.
- May provide smart indentation.
- Requires that
/dev/tty
is available. -
xclip
for X,wl-clipboard
for Wayland orpbcopy
for macOS needs to be installed to access the system clipboard. - May take a line number as the second argument, with an optional
+
or:
prefix. - If the filename is
COMMIT_EDITMSG
, the look and feel will be adjusted for git commit messages. - Supports
UTF-8
, but some runes may be displayed incorrectly. - Only UNIX-style line endings are supported (
\n
). - Will convert DOS/Windows line endings (
\r\n
) to UNIX line endings (just\n
), whenever possible. - Will replace non-breaking space (
0xc2 0xa0
) with a regular space (0x20
) whenever possible. - Will replace annoying tilde (
0xcc 0x88
) with a regular tilde (~
) whenever possible. - Will replace the greek question mark that looks like a semicolon (
0xcd 0xbe
) with a regular semicolon (;
) whenever possible. - If interactive rebase is launched with
git rebase -i
, then eitherctrl-w
orctrl-r
will cycle the keywords for the current line (fixup
,drop
,edit
etc). - If the editor executable is renamed to a word starting with
r
(or have a symlink with that name), the default theme will be red/black. - If the editor executable is renamed to a word starting with
l
(or have a symlink with that name), the default theme will be suitable for light backgrounds. - If the editor executable is renamed to a word starting with
s
(or have a symlink with that name), the default theme will be the "synthwave" theme. - Want to quickly convert Markdown to HTML? Try
o filename.md
, pressctrl-space
twice and quit withctrl-q
. - The default syntax highlighting theme aims to be as pretty as possible with less than 16 colors, but it mainly aims for clarity. It should be easy to spot a keyword, number, string or a stray parenthesis.
- Press
ctrl-space
orctrl-t
to toggle the check mark in- [ ] TODO item
boxes in Markdown. - Orbiton is written mostly in Orbiton, with some use of NeoVim for the initial development.
- Can load, edit and save gzipped text files or man pages that ends with a
.gz
extension. - Can organize imports, for Java and for Kotlin, when formatting code with
ctrl-w
. - Has a built-in spellchecker (press
ctrl-f
and thent
to search for a typo,ctrl-n
for next match and thenctrl-a
to add it andctrl-i
to ignore it). - Can jump directly to a selection of highlighted letters on the screen, when
ctrl-l
has been pressed.
- Some unicode runes may disrupt the text flow! This is generally not a problem for editing code and configuration files, but is an issue when editing files that contains text in many languages, or using emojis.
- The man page viewer can not display some special characters, such as the long dash (—), just yet.
- Using
tmux
and resizing the terminal emulator window may trigger text rendering issues. Try pressingesc
to redraw the text, orctrl-f
to search for text. SettingTERM
correctly might help. - For some terminal emulators, if
o
is busy performing an operation, pressingctrl-s
may lock the terminal. Some terminal emulators, likekonsole
, can be configured to turn off this behavior. Pressctrl-q
to unlock the terminal again (together with the unfortunate risk of quittingo
). To sidestep this issue, thectrl-o
menu can be used instead, for saving and quitting. - Using
mosh
may cause text rendering issues (in bothnvim
ando
). - Pressing
cmd-v
,cmd-x
andcmd-c
on macOS only works when using theog
GUI/VTE frontend. Foro
,ctrl-v
,ctrl-x
andctrl-c
can be used instead. - The Markdown table editor does not have scrolling, so the table must fit within the current terminal emulator width and height. Resize the terminal as needed.
There are pretty few hotkeys to remember:
-
ctrl-s
- Save. -
ctrl-q
- Quit. -
ctrl-r
- Open or close a portal. Text can be pasted from the portal into another (or the same) file withctrl-v
. For "git interactive rebase" mode (git rebase -i
), this will cycle the rebase keywords instead. -
ctrl-a
- Go to start of text, then start of line and then to the previous line. -
ctrl-e
- Go to end of line and then to the next line -
ctrl-n
- Scroll down 10 lines, or go to the next match if a search is active. Insert a column when in the Markdown table editor. -
ctrl-p
- Scroll up 10 lines, or go to the previous match if a search is active. Remove an empty column when in the Markdown table editor. -
ctrl-k
- Delete characters to the end of the line, then delete the line. -
ctrl-_
- Jump to a matching parenthesis or bracket, if the cursor is on one, otherwise insert a symbol by typing in a 2-letter digraph. -
ctrl-d
- Delete a single character. -
ctrl-t
- For C and C++: jump between the current header and source file. For Agda and Ivy, insert a symbol. For Markdown: toggle checkboxes, or launch the table editor if the cursor is over a table. For the rest: record and play back keypresses. PressEsc
to clear the current macro. -
ctrl-o
- Open a command menu with actions that can be performed. -
ctrl-x
- Cut the current line. Press twice to cut a block of text (to the next blank line). -
ctrl-c
- Copy one line. Press twice to copy a block of text. -
ctrl-v
- Paste one trimmed line. Press twice to paste multiple untrimmed lines. -
ctrl-space
- Build program, render to PDF or export to man page (see table below). For Markdown: toggle checkboxes, or double press to export to HTML. -
ctrl-j
- Join lines (or jump to the bookmark, if set). -
ctrl-u
- Undo (ctrl-z
is also possible, but may background the application). -
ctrl-l
- Jump to a specific line number or percentage. Pressreturn
to jump to the top. If at the top, pressreturn
to jump to the bottom. Press one of the highlighted on-screen letters to jump to that location. -
ctrl-f
- Search for a string. The search wraps around and is case sensitive. Presstab
instead ofreturn
to search and replace. To find typos, search for the lettert
, then pressctrl-n
for the next word,ctrl-a
to add it orctrl-i
to ignore it. -
ctrl-b
- Jump back after jumping to a definition withctrl-g
. Toggle a bookmark for the current line, or if set: jump to a bookmark on a different line. -
ctrl-w
- Format the current file (see the table below), or cycle git rebase keywords. For Markdown, format the table under the cursor. -
ctrl-g
- Jump to definition, for some programming languages (experimental feature), or toggle the status bar. -
ctrl-\
- Comment in or out a block of code. -
ctrl-~
- Jump to a matching parenthesis or bracket. -
esc
- Redraw everything and clear the last search.
- Press
ctrl-space
to build or export the current file. - Press
ctrl-w
to format the current file, in an opinionated way. If the current file is empty, a "Hello, World!" template will be inserted, for some file extensions. - If a build or export returns an error code and the status message is not specific enough, the last called command can be run from the command line with
$(o -l)
, to get more details.o -l
can be used to preview the command.
Programming language | File extensions | Jump to error | Build command | Format command |
---|---|---|---|---|
Ada |
.adb , .gpr , .ads , .ada
|
WIP | WIP | WIP |
Agda | .agda |
Yes | agda -c $filename |
N/A |
ALGOL 68 | .a68 |
WIP | a68g --compile $filename |
WIP |
Assembly |
.asm , .s , .S , .inc
|
Yes | yasm -f elf64 -o $output.o $filename |
N/A |
C |
.c , .h
|
Yes | gcc $filename -o $output |
clang-format -i --style=WebKit $filename |
C++ |
.cpp , .cc , .cxx , .h , .hpp , .h++ , .c++
|
Yes | g++ $filename -o $output |
clang-format -i --style=WebKit $filename |
C# | .cs |
Yes | dotnet build $filename |
astyle --mode=cs $filename |
C3 | .c3 |
Yes | c3c compile -o $output $filename |
c3fmt --rewrite $filename |
Clojure |
.clj , .cljs , .clojure
|
WIP | lein compile $filename |
WIP |
Crystal | .cr |
Yes | crystal build $filename --release |
crystal tool format $filename |
CSS | .css |
WIP | No | prettier --tab-width 2 -w $filename |
D | .d |
Yes | dmd $filename -of$output |
WIP |
Dart | .dart |
Yes | dart compile exe --output $output $filename |
dart format $filename |
Erlang | .erl |
Yes | erlc $filename |
WIP |
Fortran77, Fortran90 |
.f , .f90
|
Yes | gfortran -o $output $filename |
WIP |
Garnet | .gt |
WIP | garnetc -o $output $filename |
WIP |
GLSL |
.glsl , .vert , .frag
|
WIP | glslangValidator -V -o $output $filename |
WIP |
Go | .go |
Yes | go build $filename |
goimports -w $filename |
Hare | .ha |
Yes | hare build $filename |
N/A |
Haskell | .hs |
Yes | ghc -dynamic $filename |
brittany --write-mode=inplace $filename |
HTML | .html |
WIP | No | tidy -m $filename |
Ivy | .ivy |
WIP | WIP | N/A |
Java | .java |
Yes |
javac + jar , see details below |
google-java-format -a -i $filename |
JavaScript | .js |
WIP | No | prettier --tab-width 4 -w $filename |
Jakt | .jakt |
WIP | jakt $filename |
WIP |
Just |
justfile , .justfile
|
No | No | just --unstable --fmt -f $filename |
Kotlin |
.kt , .kts
|
Yes | kotlinc $filename -include-runtime -d $output.jar |
ktlint -F $filename |
Kotlin Native |
.kt , .kts
|
Yes | kotlinc-native -nowarn -opt -Xallocator=mimalloc -produce program -linker-option --as-needed $filename -o $output |
ktlint -F $filename |
Lua | .lua |
Yes | luac -o $output.luac $filename |
lua-format -i --no-keep-simple-function-one-line --column-limit=120 --indent-width=2 --no-use-tab $filename |
Markdown | .md |
WIP | No | prettier --write $filename |
Nim | .nim |
WIP | nim c -o:$output $filename |
WIP |
Objective-C | .m |
Yes | clang $filename -o $output |
clang-format -i --style=WebKit $filename |
Odin | .odin |
Yes | odin build $filename |
N/A |
Objective Pascal |
.pas , .pp , .lpr
|
Yes | fpc $filename |
WIP |
OCaml | .ml |
WIP | No | ocamlformat $filename |
Perl | .pl |
Yes | perl $filename |
/usr/bin/vendor_perl/perltidy -se -b -i=2 -ole=unix -bt=2 -pt=2 -sbt=2 -ce $filename |
Python | .py |
Yes | python -m py_compile $filename |
black $filename |
Ruby | .rb |
No | No | rubocop -A $filename |
Rust (with Cargo.toml) | .rs |
Yes | cargo build |
rustfmt $filename |
Rust | .rs |
Yes | rustc $filename |
rustfmt $filename |
Scala | .scala |
Yes | scalac $filename && jar cfe $output MainClass *.class |
scalafmt $filename |
Shell |
.sh , PKGBUILD , APKBUILD
|
WIP | makepkg |
shfmt -s -w -i 2 -bn -ci -sr -kp $filename |
Standard ML |
.sml , .fun , .mlb , .cm
|
Yes | mlton $filename |
WIP |
Swift | .swift |
WIP | WIP | WIP |
TypeScript | .ts |
WIP | No | prettier --tab-width 4 -w $filename |
V | .v |
Yes | v build $filename |
v fmt $filename |
XML | .xml |
WIP | No | tidy -w 80 -q -i -utf8 --show-errors 0 --show-warnings no --tidy-mark no -xml -m $filename |
Zig | .zig |
Yes | zig build-exe $filename |
zig fmt $filename |
/etc/fstab
, JSON and HTML files are also supported, and can be formatted with ctrl-w
.
-
o
will try to jump to the location where the error is and otherwise displaySuccess
. - For regular text files,
ctrl-w
will word wrap the lines to a length of 99. - If
kotlinc-native
is not available, this build command will be used instead:kotlinc $filename -include-runtime -d $name.jar
CXX can be downloaded here: GitHub project page for CXX.
File type | File extensions | Build or export command |
---|---|---|
AsciiDoc | .adoc |
asciidoctor -b manpage (writes to out.1 ) |
scdoc |
.scd , .scdoc
|
scdoc (writes to out.1 ) |
Markdown | .md |
pandoc -N --toc -V geometry:a4paper (writes to $filename.pdf ) |
This is a brand new feature and needs more testing.
- If
gdb
is installed, it's possible to select "Debug mode" from thectrl-o
menu and then build and step through a program withctrl-space
, or set a breakpoint withctrl-b
and continue withctrl-space
. - Messages printed to stdout are displayed as a status message when that line is reached.
- An indication of which line the program is at has not yet been added, and is a work in progress.
- There are status messages indicating when the debug session is started and ended.
While in the Markdown table editor:
- Cells can be typed into.
- The arrow keys can be used to move around.
-
tab
can be used to go to the next cell, or insert new cells if the last cell is reached. -
return
can be used to either jump to the blank cell below or to insert a new row below. -
backspace
can be used to delete letters, but also for deleting the current row if it is empty. -
ctrl-n
can be used to insert a new column to the right. -
ctrl-d
can be used to delete the current column (if all cells in the column are empty). -
esc
orctrl-t
can be used to close the Markdown table editor. -
ctrl-s
can be used to save.
Themes can be selected with the ctrl-o
menu. The theme menu also lists the theme names, which can be specified in the O_THEME
environment variable.
The O_THEME
environment variable is an exception to the claim that o
is configuration-free, but it is completely optional.
For using ie. the Synthwave theme, the /usr/bin/sw
symlink to /usr/bin/o
can be used, or this can be added to ~/.profile
:
export O_THEME=synthwave
- To insert a symbol, like
æ
, just pressctrl-_
and type inae
. To insertµ
, type inMy
. - These are the same digraphs as ViM uses.
- For a full overview of digraphs, see digraphs.txt.
git clone https://github.com/xyproto/orbiton
cd orbiton
make && sudo make install
And optionally:
make gui && sudo make gui-install
It is also possible to install the symlinks that are suggested further down in this document.
Install dependencies (use doas
if needed):
add_pkg git gmake go vte3
Build both the editor o
and the GUI frontend og
:
gmake CXX="clang++ -w" o og
Install both executables, a man page, an icon and a desktop shortcut file (use doas
if needed`):
PREFIX=/usr/local gmake install og-install
Just building and installing o
also works:
gmake
doas gmake install
It is also possible to install the symlinks that are suggested further down in this document.
C++
- For building code with
ctrl-space
,cxx
must be installed. - For formatting code with
ctrl-w
,clang-format
must be installed.
Go
- For building code with
ctrl-space
, Thego
compiler must be installed. - For formatting code with
ctrl-w
,goimports
must be installed.
Zig
- For building and formatting Zig code, only the
zig
command is needed.
V
- For building and formatting V code, only the
v
command is needed.
Rust
- For building code with
ctrl-space
,Cargo.toml
must exist andcargo
must be installed. - For formatting code with
ctrl-w
,rustfmt
must be installed.
Haskell
- For building the current file with
ctrl-space
, theghc
compiler must be installed. - For formatting code with
ctrl-w
,brittany
must be installed.
Python
-
ctrl-space
only checks the syntax, without executing. This only requirespython
to be available. - For formatting the code with
ctrl-w
,black
must be installed.
Crystal
- For building and formatting Crystal code, only the
crystal
command is needed.
Kotlin
- For building code with
ctrl-space
,kotlinc
must be installed. A.jar
file is created if the compilation succeeded. - For formatting code with
ctrl-w
,ktlint
must be installed.
Java
- For building code with
ctrl-space
,javac
andjar
must be installed. A.jar
file is created if the compilation succeeded. - For formatting code with
ctrl-w
,google-java-format
must be installed.
Scala
- For building code with
ctrl-space
,scalac
andjar
must be installed. A.jar
file is created if the compilation succeeded. - The jar file can be executed with
java -jar main.jar
. Usescalac -d main.jar MyFile.scala
if you want to produce a jar that can be executed withscala main.jar
. - For formatting code with
ctrl-w
,scalafmt
must be installed.
D
- For building code with
ctrl-space
,gdc
must be available.
JSON
- The JSON formatter is built-in. Note that for some files it may reorganize items in an undesirable order, so don't save the file if the result is unexpected.
fstab
- Formatting
fstab
files (usually/etc/fstab
) is a built-in feature. Just pressctrl-w
. If you need a standalone utility,fstabfmt
is available.
JavaScript
- For formatting JavaScript code with ,
prettier
must be installed.
Since kotlinc $filename -include-runtime -d
builds to a .jar
, I though I should do the same for Java. The idea is to easily compile a single or a small collection of .java
files, where one of the files has a main
function.
If you know about an easier way to build a .jar
file from *.java
, without using something like gradle, please let me know by submitting a pull request. This is pretty verbose...
javaFiles=$(find . -type f -name '*.java')
for f in $javaFiles; do
grep -q 'static void main' "$f" && mainJavaFile="$f"
done
className=$(grep -oP '(?<=class )[A-Z]+[a-z,A-Z,0-9]*' "$mainJavaFile" | head -1)
packageName=$(grep -oP '(?<=package )[a-z,A-Z,0-9,.]*' "$mainJavaFile" | head -1)
if [[ $packageName != "" ]]; then
packageName="$packageName."
fi
mkdir -p _o_build/META-INF
javac -d _o_build $javaFiles
cd _o_build
echo "Main-Class: $packageName$className" > META-INF/MANIFEST.MF
classFiles=$(find . -type f -name '*.class')
jar cmf META-INF/MANIFEST.MF ../main.jar $classFiles
cd ..
rm -rf _o_build
For Scala, this is the code that is used to produce a main.jar
file that can be run directly with java -jar main.jar
:
#!/bin/sh
scalaFiles=$(find . -type f -name '*.scala')
for f in $scalaFiles; do
grep -q 'def main' "$f" && mainScalaFile="$f"
grep -q ' extends App ' "$f" && mainScalaFile="$f"
done
objectName=$(grep -oP '(?<=object )[A-Z]+[a-z,A-Z,0-9]*' "$mainScalaFile" | head -1);
packageName=$(grep -oP '(?<=package )[a-z,A-Z,0-9,.]*' "$mainScalaFile" | head -1);
if [[ $packageName != "" ]]; then
packageName="$packageName."
fi
mkdir -p _o_build/META-INF
scalac -d _o_build $scalaFiles
cd _o_build
echo -e "Main-Class: $packageName$objectName\nClass-Path: /usr/share/scala/lib/scala-library.jar" > META-INF/MANIFEST.MF
classFiles=$(find . -type f -name '*.class')
jar cmf META-INF/MANIFEST.MF ../main.jar $classFiles
cd ..
rm -rf _o_build
- If
/usr/share/scala/lib/scala-library.jar
is not foundscalac -d run_with_scala.jar
is used instead. - If
scala-library.jar
was not found, then the resultingjar
file will needscala
to run.
ctrl-t
brings up a menu with a selection of special symbols.
There are also these shortcuts:
- Insert
⊤
by pressingctrl-t
and thent
. - Insert
ℕ
by pressingctrl-t
and thenn
.
When editing PKGBUILD
files, it is possible to press ctrl-o
and select Call Guessica
to update the pkgver=
and source=
fields, by a combination of guesswork and online searching. This functionality depends on the Guessica package update utility being installed, and will only work for some PKGBUILD
files.
-
a68g
- for compiling ALGOL 68 code -
agda
- for compiling Agda code -
asciidoctor
- for writing man pages -
astyle
- for formatting C# code -
black
- for formatting Python code -
brittany
- for formatting Haskell code -
cargo
- for compiling Rust -
clang
- for formatting C++ code withclang-format
-
clojure
- for compiling Clojure -
crystal
- for compiling Crystal -
cxx
- for compiling C++ -
fpc
- for compiling Object Pascal -
g++
- for compiling C++ code -
gdc
- for compiling D code -
ghc
- for compiling Haskell code -
go
- for compiling Go code -
go-tools
- for formatting Go code and handling imports withgoimports
-
google-java-format
- for formatting Java code -
jad
- decompile.class
files on the fly when opening them witho
-
java-environment
- for compiling Java code and creating.jar
files withjavac
andjar
-
kotlin
- for compiling Kotlin -
ktlint
- for formatting Kotlin code -
lua
- for compiling Lua to bytecode -
lua-format
- for formatting Lua code -
mlton
- for compiling Standard ML -
mono
- for compiling C# code -
ocaml
- for compiling and formatting OCaml code -
odin
- for compiling Odin -
pandoc
- for exporting Markdown to PDF -
prettier
- for formatting JavaScript, TypeScript and CSS -
python
- for compiling Python to bytecode -
rustc
- for compiling Rust -
rustfmt
- for formatting Rust -
scala
- for compiling Scala -
sdoc
- for writing man pages -
tidy
- for formatting XML -
v
- for compiling and formatting V code -
zig
- for compiling and formatting Zig code
- The
o
executable is 1.5M when built with GCC 12 (for 64-bit Linux) and compressed withupx
. - This isn't as small as e3, an editor written in assembly (which is 234k), but it's reasonably lean.
One way of building with gccgo
and upx
(in the v2
directory):
go build -mod=vendor -gccgoflags '-Os -s' -o o && upx --best --lzma o
If the o
executable is built with go
instead, the size can be 8.7M, or just 2.8M when packed with upx
:
go build -mod=vendor -ldflags='-s -w' -trimpath -o o && upx --best --lzma o
These four ways of opening file.txt
at line 7
are supported:
o file.txt 7
o file.txt +7
o file.txt:7
o file.txt+7
This also means that filenames containing +
or :
, and then followed by a number, are not supported.
-
-f
can be used to open a file, regardless of if there are any locks. It can also be used for overwriting files together with-p
. -
-c FILENAME
can be used to copy the contents of the given file to the clipboard and then exit. -
-p FILENAME
can be used to paste the contents of the clipboard to the givenFILENAME
(if it does not already exist) and then exit. -
-n
can be used to avoid writing lockfiles, build files, location history, search history and the game highscore to$XDG_CACHE_DIR/cache/o
or~/.cache/o
. Not recommended. -
-m
can be used to open a file as read-only, but monitor it for changes. -
--help
can be used to get a quick overview of the supported keybindings. -
--version
will print the current version and then exit.
When loading files that are large or from a slow disk, an animated spinner will appear. The loading operation can be interrupted by pressing esc
, q
or ctrl-q
.
This shell function works in zsh
and bash
and may be useful for both searching for and opening a file at the given line number (works best if there is only one matching file, if not it will open several files in succession):
fo() { find . -type f -wholename "*$1" -exec o {} $2 \;; }
If too many files are found, it is possible to stop opening them by selecting Stop parent and quit without saving
from the ctrl-o
menu, which will quit the editor and also kill the parent find
process.
Example use:
fo somefile.cpp 123
When using pandoc
to export from Markdown to PDF:
- If the
PAPERSIZE
environment variable is set to ie.a4
orletter
, it will be respected when exporting from Markdown to PDF using pandoc, at the press ofctrl-space
. - The
--pdf-engine=xelatex
and--listings
flags are used, soxelatex
and thelistings
package needs to be available. A standard installation of LaTeX and Pandoc should provide both. -
Render to PDF with pandoc
will only appear on thectrl-o
menu when editing a Markdown file andpandoc
is installed.
- Press the Konami code keys while in the
ctrl-o
menu to start a silly little game about feeding creatures with pellets before they are eaten. Alternatively, create a symlink for starting it directly, ie.:ln -sf /usr/bin/o /usr/bin/feedgame
. - Press
right, down, left
orleft, down, right
in rapid succession followed by eitherdown
to save orup
to save and quit. The only purpose of this unusual shortcut is to help avoid the painful Emacs pinky.
-
o
- for terminal emulators that supports at least VT100 -
og
- for the VTE GUI (optional)
# For starting o with the Light theme
ln -sf /usr/bin/o /usr/bin/li
# For starting o with the Red/Black theme
ln -sf /usr/bin/o /usr/bin/redblack
# For starting o with the Synthwave theme
ln -sf /usr/bin/o /usr/bin/sw
# For starting o with the Blue Edit theme
ln -sf /usr/bin/o /usr/bin/edi
# For starting o with the Light VS theme
ln -sf /usr/bin/o /usr/bin/vs
# For starting the GUI version of o with the Light theme
ln -sf /usr/bin/og /usr/bin/lig
# For starting the GUI version of o with the Red/Black theme
ln -sf /usr/bin/og /usr/bin/redblackg
# For starting the GUI version of o with the Synthwave theme
ln -sf /usr/bin/og /usr/bin/swg
# For starting the GUI version of o with the Blue Edit theme
ln -sf /usr/bin/og /usr/bin/edg
# For starting the GUI version of o with the Light VS theme
ln -sf /usr/bin/og /usr/bin/vg
Build:
make gui
Install (use sudo
or doas
, if needed):
make gui-install
- Press
ctrl-f
to search, and then type int
and press return to search for the next typo. - If a typo is found, press
ctrl-a
to (temporarily) add it to the dictionary orctrl-i
to (temporarily) ignore it. - The spellchecker uses a fixed English word list and does not store lists of custom words anywhere, yet.
- When in Nano mode (when
o
is launched by a symlink or executable namednan
ornano
),ctrl-t
searches for the next typo. - The spellchecker is an experimental feature.
The built-in spellchecker uses a list of words from this project that is licensed under this MIT license:
MIT License, Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- Orbiton passes the Moby Dick Workout here on my machine.
- Please create an issue if it is even a little bit slow on your machine (as long as your machine is at least as fast as a Raspberry Pi 3).
- Untick the
Flow control
option in the profile settings, to ensure thatctrl-s
will never freeze the terminal.
- An orbiton is a quasiparticle.
- Version: 2.68.6
- License: 3-clause BSD
- Author: Alexander F. Rødseth <[email protected]>
For Tasks:
Click tags to check more tools for each tasksFor Jobs:
Alternative AI tools for orbiton
Similar Open Source Tools
orbiton
Orbiton is a text editor and simple IDE designed with minimal annoyance in mind, not highly configurable to help users stay focused, and supports rapid edit-format-compile cycles. It is suitable for writing git commit messages, editing README.md and TODO.md files, writing Markdown and exporting to HTML or PDF, learning programming languages, editing files within larger projects, solving Advent of Code tasks, and providing a distraction-free environment for writing. The tool offers unique features like smart cursor movement, paste and copy shortcuts, portal for copying lines across files, code building and formatting shortcuts, and more.
bilingual_book_maker
The bilingual_book_maker is an AI translation tool that uses ChatGPT to assist users in creating multi-language versions of epub/txt/srt files and books. It supports various models like gpt-4, gpt-3.5-turbo, claude-2, palm, llama-2, azure-openai, command-nightly, and gemini. Users need ChatGPT or OpenAI token, epub/txt books, internet access, and Python 3.8+. The tool provides options to specify OpenAI API key, model selection, target language, proxy server, context addition, translation style, and more. It generates bilingual books in epub format after translation. Users can test translations, set batch size, tweak prompts, and use different models like DeepL, Google Gemini, Tencent TranSmart, and more. The tool also supports retranslation, translating specific tags, and e-reader type specification. Docker usage is available for easy setup.
nano-graphrag
nano-GraphRAG is a simple, easy-to-hack implementation of GraphRAG that provides a smaller, faster, and cleaner version of the official implementation. It is about 800 lines of code, small yet scalable, asynchronous, and fully typed. The tool supports incremental insert, async methods, and various parameters for customization. Users can replace storage components and LLM functions as needed. It also allows for embedding function replacement and comes with pre-defined prompts for entity extraction and community reports. However, some features like covariates and global search implementation differ from the original GraphRAG. Future versions aim to address issues related to data source ID, community description truncation, and add new components.
k8sgpt
K8sGPT is a tool for scanning your Kubernetes clusters, diagnosing, and triaging issues in simple English. It has SRE experience codified into its analyzers and helps to pull out the most relevant information to enrich it with AI.
ChatSim
ChatSim is a tool designed for editable scene simulation for autonomous driving via LLM-Agent collaboration. It provides functionalities for setting up the environment, installing necessary dependencies like McNeRF and Inpainting tools, and preparing data for simulation. Users can train models, simulate scenes, and track trajectories for smoother and more realistic results. The tool integrates with Blender software and offers options for training McNeRF models and McLight's skydome estimation network. It also includes a trajectory tracking module for improved trajectory tracking. ChatSim aims to facilitate the simulation of autonomous driving scenarios with collaborative LLM-Agents.
olah
Olah is a self-hosted lightweight Huggingface mirror service that implements mirroring feature for Huggingface resources at file block level, enhancing download speeds and saving bandwidth. It offers cache control policies and allows administrators to configure accessible repositories. Users can install Olah with pip or from source, set up the mirror site, and download models and datasets using huggingface-cli. Olah provides additional configurations through a configuration file for basic setup and accessibility restrictions. Future work includes implementing an administrator and user system, OOS backend support, and mirror update schedule task. Olah is released under the MIT License.
ChatDBG
ChatDBG is an AI-based debugging assistant for C/C++/Python/Rust code that integrates large language models into a standard debugger (`pdb`, `lldb`, `gdb`, and `windbg`) to help debug your code. With ChatDBG, you can engage in a dialog with your debugger, asking open-ended questions about your program, like `why is x null?`. ChatDBG will _take the wheel_ and steer the debugger to answer your queries. ChatDBG can provide error diagnoses and suggest fixes. As far as we are aware, ChatDBG is the _first_ debugger to automatically perform root cause analysis and to provide suggested fixes.
chatgpt-subtitle-translator
This tool utilizes the OpenAI ChatGPT API to translate text, with a focus on line-based translation, particularly for SRT subtitles. It optimizes token usage by removing SRT overhead and grouping text into batches, allowing for arbitrary length translations without excessive token consumption while maintaining a one-to-one match between line input and output.
gcop
GCOP (Git Copilot) is an AI-powered Git assistant that automates commit message generation, enhances Git workflow, and offers 20+ smart commands. It provides intelligent commit crafting, customizable commit templates, smart learning capabilities, and a seamless developer experience. Users can generate AI commit messages, add all changes with AI-generated messages, undo commits while keeping changes staged, and push changes to the current branch. GCOP offers configuration options for AI models and provides detailed documentation, contribution guidelines, and a changelog. The tool is designed to make version control easier and more efficient for developers.
QA-Pilot
QA-Pilot is an interactive chat project that leverages online/local LLM for rapid understanding and navigation of GitHub code repository. It allows users to chat with GitHub public repositories using a git clone approach, store chat history, configure settings easily, manage multiple chat sessions, and quickly locate sessions with a search function. The tool integrates with `codegraph` to view Python files and supports various LLM models such as ollama, openai, mistralai, and localai. The project is continuously updated with new features and improvements, such as converting from `flask` to `fastapi`, adding `localai` API support, and upgrading dependencies like `langchain` and `Streamlit` to enhance performance.
mods
AI for the command line, built for pipelines. LLM based AI is really good at interpreting the output of commands and returning the results in CLI friendly text formats like Markdown. Mods is a simple tool that makes it super easy to use AI on the command line and in your pipelines. Mods works with OpenAI, Groq, Azure OpenAI, and LocalAI To get started, install Mods and check out some of the examples below. Since Mods has built-in Markdown formatting, you may also want to grab Glow to give the output some _pizzazz_.
moly
Moly is an AI LLM client written in Rust, showcasing the capabilities of the Makepad UI toolkit and Project Robius, a framework for multi-platform application development in Rust. It is currently in beta, allowing users to build and run Moly on macOS, Linux, and Windows. The tool provides packaging support for different platforms, such as `.app`, `.dmg`, `.deb`, AppImage, pacman, and `.exe` (NSIS). Users can easily set up WasmEdge using `moly-runner` and leverage `cargo` commands to build and run Moly. Additionally, Moly offers pre-built releases for download and supports packaging for distribution on Linux, Windows, and macOS.
tenere
Tenere is a TUI interface for Language Model Libraries (LLMs) written in Rust. It provides syntax highlighting, chat history, saving chats to files, Vim keybindings, copying text from/to clipboard, and supports multiple backends. Users can configure Tenere using a TOML configuration file, set key bindings, and use different LLMs such as ChatGPT, llama.cpp, and ollama. Tenere offers default key bindings for global and prompt modes, with features like starting a new chat, saving chats, scrolling, showing chat history, and quitting the app. Users can interact with the prompt in different modes like Normal, Visual, and Insert, with various key bindings for navigation, editing, and text manipulation.
assistant
The WhatsApp AI Assistant repository offers a chatbot named Sydney that serves as an AI-powered personal assistant. It utilizes Language Model (LLM) technology to provide various features such as Google/Bing searching, Google Calendar integration, communication capabilities, group chat compatibility, voice message support, basic text reminders, image recognition, and more. Users can interact with Sydney through natural language queries and voice messages. The chatbot can transcribe voice messages using either the Whisper API or a local method. Additionally, Sydney can be used in group chats by mentioning her username or replying to her last message. The repository welcomes contributions in the form of issue reports, pull requests, and requests for new tools. The creators of the project, Veigamann and Luisotee, are open to job opportunities and can be contacted through their GitHub profiles.
moxin
Moxin is an AI LLM client written in Rust to demonstrate the functionality of the Robius framework for multi-platform application development. It is currently in early stages of development and not fully functional. The tool supports building and running on macOS and Linux systems, with packaging options available for distribution. Users can install the required WasmEdge WASM runtime and dependencies to build and run Moxin. Packaging for distribution includes generating `.deb` Debian packages, AppImage, and pacman installation packages for Linux, as well as `.app` bundles and `.dmg` disk images for macOS. The macOS app is not signed, leading to a warning on installation, which can be resolved by removing the quarantine attribute from the installed app.
1.5-Pints
1.5-Pints is a repository that provides a recipe to pre-train models in 9 days, aiming to create AI assistants comparable to Apple OpenELM and Microsoft Phi. It includes model architecture, training scripts, and utilities for 1.5-Pints and 0.12-Pint developed by Pints.AI. The initiative encourages replication, experimentation, and open-source development of Pint by sharing the model's codebase and architecture. The repository offers installation instructions, dataset preparation scripts, model training guidelines, and tools for model evaluation and usage. Users can also find information on finetuning models, converting lit models to HuggingFace models, and running Direct Preference Optimization (DPO) post-finetuning. Additionally, the repository includes tests to ensure code modifications do not disrupt the existing functionality.
For similar tasks
orbiton
Orbiton is a text editor and simple IDE designed with minimal annoyance in mind, not highly configurable to help users stay focused, and supports rapid edit-format-compile cycles. It is suitable for writing git commit messages, editing README.md and TODO.md files, writing Markdown and exporting to HTML or PDF, learning programming languages, editing files within larger projects, solving Advent of Code tasks, and providing a distraction-free environment for writing. The tool offers unique features like smart cursor movement, paste and copy shortcuts, portal for copying lines across files, code building and formatting shortcuts, and more.
For similar jobs
lollms-webui
LoLLMs WebUI (Lord of Large Language Multimodal Systems: One tool to rule them all) is a user-friendly interface to access and utilize various LLM (Large Language Models) and other AI models for a wide range of tasks. With over 500 AI expert conditionings across diverse domains and more than 2500 fine tuned models over multiple domains, LoLLMs WebUI provides an immediate resource for any problem, from car repair to coding assistance, legal matters, medical diagnosis, entertainment, and more. The easy-to-use UI with light and dark mode options, integration with GitHub repository, support for different personalities, and features like thumb up/down rating, copy, edit, and remove messages, local database storage, search, export, and delete multiple discussions, make LoLLMs WebUI a powerful and versatile tool.
Azure-Analytics-and-AI-Engagement
The Azure-Analytics-and-AI-Engagement repository provides packaged Industry Scenario DREAM Demos with ARM templates (Containing a demo web application, Power BI reports, Synapse resources, AML Notebooks etc.) that can be deployed in a customer’s subscription using the CAPE tool within a matter of few hours. Partners can also deploy DREAM Demos in their own subscriptions using DPoC.
minio
MinIO is a High Performance Object Storage released under GNU Affero General Public License v3.0. It is API compatible with Amazon S3 cloud storage service. Use MinIO to build high performance infrastructure for machine learning, analytics and application data workloads.
mage-ai
Mage is an open-source data pipeline tool for transforming and integrating data. It offers an easy developer experience, engineering best practices built-in, and data as a first-class citizen. Mage makes it easy to build, preview, and launch data pipelines, and provides observability and scaling capabilities. It supports data integrations, streaming pipelines, and dbt integration.
AiTreasureBox
AiTreasureBox is a versatile AI tool that provides a collection of pre-trained models and algorithms for various machine learning tasks. It simplifies the process of implementing AI solutions by offering ready-to-use components that can be easily integrated into projects. With AiTreasureBox, users can quickly prototype and deploy AI applications without the need for extensive knowledge in machine learning or deep learning. The tool covers a wide range of tasks such as image classification, text generation, sentiment analysis, object detection, and more. It is designed to be user-friendly and accessible to both beginners and experienced developers, making AI development more efficient and accessible to a wider audience.
tidb
TiDB is an open-source distributed SQL database that supports Hybrid Transactional and Analytical Processing (HTAP) workloads. It is MySQL compatible and features horizontal scalability, strong consistency, and high availability.
airbyte
Airbyte is an open-source data integration platform that makes it easy to move data from any source to any destination. With Airbyte, you can build and manage data pipelines without writing any code. Airbyte provides a library of pre-built connectors that make it easy to connect to popular data sources and destinations. You can also create your own connectors using Airbyte's no-code Connector Builder or low-code CDK. Airbyte is used by data engineers and analysts at companies of all sizes to build and manage their data pipelines.
labelbox-python
Labelbox is a data-centric AI platform for enterprises to develop, optimize, and use AI to solve problems and power new products and services. Enterprises use Labelbox to curate data, generate high-quality human feedback data for computer vision and LLMs, evaluate model performance, and automate tasks by combining AI and human-centric workflows. The academic & research community uses Labelbox for cutting-edge AI research.