Joe's Own Editor
Joe's Own Editor (JOE) is a free and open-source terminal-based text editor designed for Unix-like operating systems, blending features from WordStar and GNU Emacs while providing a mode-less interface similar to user-friendly PC editors.[1] Developed originally by Joseph Allen in 1988, JOE has been continuously maintained and is distributed under the GNU General Public License (GPL), making it a lightweight alternative to more complex editors.[1] It is written in C, resulting in a compact binary size of approximately 300 KB that depends solely on the standard C library (libc), which contributes to its portability across various Unix-like systems and inclusion in numerous Linux distributions.[1] Key features of JOE include unlimited undo and redo capabilities, multi-file search and replace operations, mouse support, UTF-8 character encoding, and syntax highlighting for over 40 programming languages.[1] Additional functionalities encompass hexadecimal editing mode, shell window integration, block manipulation tools, and customization through a configuration file named "joerc."[1] Variants such as jmacs (Emacs-like), jstar (WordStar-like), and jpico (Pico-like) extend its usability by emulating popular editor interfaces.[1] Hosted on SourceForge with Mercurial version control, the latest stable release is version 4.6, released on January 9, 2018.[1]Overview
General Description
Joe's Own Editor (JOE) is a curses-based, full-featured terminal screen editor designed for Unix-like systems.[1] It serves as an accessible alternative to more complex editors such as vi and Emacs, prioritizing simplicity and an intuitive interface that echoes the familiarity of WordStar for users transitioning from PC-based editing environments.[1] Distributed under the GNU General Public License version 2 or later, JOE emphasizes ease of use without modal complexities, making it suitable for both novice and experienced terminal users.[2] Initially created by Joseph H. Allen in 1988, JOE evolved from earlier prototypes and saw its first public release around 1989–1990.[3] The editor's core purpose remains providing efficient text manipulation in resource-constrained terminal environments, supporting emulation modes for WordStar, Pico, and Emacs to broaden its appeal.[4] The latest stable release is version 4.6, dated January 9, 2018.[5] Technically, JOE compiles to a compact binary of approximately 300 KB on x86 architectures and depends solely on the libc library, facilitating straightforward installation and portability across Unix-like platforms.[1] Its user interface supports internationalization via gettext, allowing localized prompts and messages.[6]Design Philosophy
Joe's Own Editor (JOE) was developed with a core philosophy centered on mode-less operation to eliminate user confusion associated with modal editors like vi, enabling direct access to editing functions through intuitive key combinations such as Ctrl-K followed by a letter for commands.[7] This approach draws inspiration from the command structure of legacy editors like WordStar, aiming to make text editing feel natural and accessible for non-expert users operating on terminal interfaces.[7][8] Embracing minimalism, JOE prioritizes a small footprint and efficiency, requiring only a single executable to support multiple editor variants while avoiding a steep learning curve through its straightforward, user-friendly interface reminiscent of PC editors.[7] It fully utilizes Unix features, such as pipes and shell integration for tasks like filtering text blocks via external commands, without introducing unnecessary complexity that could hinder usability.[7] The design emphasizes broad accessibility as free software licensed under the GNU General Public License (GPL), encouraging adoption in educational and hobbyist environments by providing a lightweight tool that compiles quickly and runs on resource-constrained systems.[7] This philosophy positions JOE as an editor for users intimidated by more complex tools, supporting modern encodings like UTF-8 to ensure compatibility across diverse text-handling needs.[7][8]Features
Core Editing Functions
Joe's Own Editor (JOE) implements an unlimited undo and redo system that records all changes made during an editing session, allowing users to revert or reapply edits as needed without a fixed limit, provided sufficient memory is available. This system is complemented by a yank buffer, functioning as a kill-ring, which stores multiple blocks of text from cut, copy, or delete operations for subsequent pasting, enabling efficient management of text segments across edits. JOE supports UTF-8 character encoding with optional auto-detection.[1] The editor supports powerful search and replace operations based on regular expressions, adhering to standard POSIX syntax or JOE's extended variant, which handles special characters and Unicode patterns. These functions extend to multi-file operations, where searches and replacements can apply across a list of files either provided at startup or dynamically generated by Unix commands such as grep or find executed internally.[7] Block operations form a core capability, permitting users to select arbitrary regions of text for manipulation, including cutting, copying, moving, and deleting entire blocks. Indentation of blocks is also supported, with options to shift text left or right by configurable amounts, facilitating structured editing of code or documents.[7] JOE handles files through a multi-buffer architecture, where multiple documents can be loaded and edited concurrently, with seamless switching between them to maintain workflow efficiency. Backup files are automatically created upon saving, appending a tilde (~) to the original filename for version preservation. JOE includes shell window integration, accessible via Ctrl-K followed by ', providing pop-up shells with full terminal emulation.[7] For binary file editing, JOE includes a hexadecimal mode that represents the buffer as a hex dump, allowing direct insertion and modification of byte values while preserving the file's integrity. This mode integrates with the standard block operations, enabling targeted edits in non-textual data without corrupting the structure.[7]User Interface and Controls
Joe's Own Editor (JOE) features a terminal-based user interface driven by the ncurses library, providing a mode-less editing environment that emulates the simplicity of classic PC editors like WordStar.[7] The interface displays the editable text in the main window, with a persistent bottom status line that indicates the current editing mode (such as insert or overwrite), the cursor's row and column position, and a rotating set of help prompts for common commands.[7] This status line can be customized through options in the joerc configuration file or command-line flags like -lmsg for the left portion and -smsg for the status messages, using escape sequences such as %r for row and %c for column to embed dynamic information.[7] An integrated help system is accessible directly from within the editor by pressing Ctrl-K followed by H, which opens a dedicated help screen listing available commands and topics.[7] Users can navigate through help pages using Esc followed by a comma (,) for the previous topic or a period (.) for the next, and dismiss the help with another Ctrl-K H.[7] The help screens themselves are customizable by editing the relevant sections in the joerc file, allowing users to tailor explanations to their preferred workflow.[7] Default key bindings in JOE emphasize Ctrl-based shortcuts for intuitive control, with Ctrl-K serving as the primary prefix for accessing the main menu and initiating most commands, such as Ctrl-K F for search operations.[7] Cursor movement is handled using arrow keys or Ctrl key combinations such as Ctrl-F and Ctrl-B for character movement, Ctrl-P and Ctrl-N for line movement, and Ctrl-A and Ctrl-E for line beginnings and ends.[7] For terminals supporting mouse input, JOE enables mouse functionality with the -mouse command-line option, allowing users to select text blocks by clicking and dragging, navigate menus by clicking entries, and resize split windows interactively.[7] Interactive operations like search, replace, and file saving are conducted through prompt-based dialogs that appear at the bottom of the screen, where users enter text directly and can recall previous inputs using up/down arrow keys for history navigation or Tab for auto-completion in file paths.[7] To streamline repetitive tasks, JOE includes a macro recording feature: pressing Ctrl-K followed by an opening bracket ([) begins recording keystrokes, which can be stopped with Ctrl-K followed by a closing bracket (]), and the captured sequence can then be replayed by pressing Ctrl-K and a digit from 0 to 9.[7] This system supports automation of sequences involving core editing functions like undo, without altering the default interface behavior.[7]Emulation Modes and Customization
Joe's Own Editor (JOE) provides built-in emulation modes to mimic the key bindings and behaviors of popular editors, allowing users familiar with those interfaces to transition seamlessly. When invoked as jmacs, JOE emulates GNU Emacs, remapping keys such as Ctrl-X for file operations and Ctrl-C for quitting, while retaining JOE's core functionality. Similarly, jstar closely imitates WordStar, including its classic command structure with many JOE extensions for enhanced features like multi-buffer support. The jpico mode replicates the Pine mail composer's Pico editor, offering a simplified interface with arrow-key navigation and menu-driven commands, ideal for quick editing tasks.[7] For environments requiring security restrictions, the variant rjoe limits functionality to editing only the files specified on the command line, disabling commands that could access the shell or external processes, making it suitable for read-only or controlled setups.[7] Customization in JOE is primarily handled through the joerc configuration file, typically located at~/.joerc or /etc/joe/joerc, which allows users to redefine key bindings, alter menus, and adjust color schemes without modifying the source code. Key rebinding is achieved by editing sections that map keystrokes to commands, such as reassigning Ctrl-K sequences or defining custom macros for repetitive tasks. Menu alterations involve the :defmenu directive to customize the ^T options prompt, enabling tailored help screens and behavior defaults like auto-indentation or word wrap. Color schemes can be personalized using the colors option, supporting up to 256 colors for interface elements and syntax highlighting, with predefined schemes loadable via the file.[7]
Syntax highlighting is configurable for over 40 programming languages, tied to file extensions through .jsf (JOE Syntax File) definitions in the syntax directory, such as c.jsf for C/C++ or php.jsf for PHP; users can enable it via ^T H and select modes with ^T Y, or globally set it in joerc for automatic detection.[9]
JOE includes macro support for automation, where users record sequences with ^K [ followed by a number and replay them with ^K followed by that number; these can also be defined persistently in joerc for complex operations like paragraph reformatting. Command history enhances usability with bash-like features, including up/down arrow navigation in prompts and Tab completion for commands, filenames, and options, facilitating efficient recall and partial matching during interactive sessions.[7]
Development
Origins and Early Versions
Joe's Own Editor (JOE) was created by Joseph H. Allen in 1988 as a personal project to recreate the familiar feel of WordStar on Unix terminals.[1] This initiative stemmed from Allen's desire to provide a lightweight, intuitive screen editor suitable for terminal-based environments, drawing inspiration from WordStar's command structure.[1] The first public release, version 1.0, arrived in 1991, focusing on fundamental screen editing functions without modal interfaces to ensure accessibility for users transitioning from other systems.[2] Early iterations emphasized core text manipulation and display handling, with integrations like termcap support enabling compatibility across various Unix terminals.[1] Development progressed steadily through the early 1990s under Allen's sole guidance, culminating in version 2.8 in 1995, which introduced multi-buffer support for handling multiple files simultaneously.[1] This version marked a significant enhancement in usability for more complex editing tasks. Following its release, active development paused after 1995 due to Allen's other professional commitments; JOE was initially distributed as freeware and subsequently relicensed under the GNU General Public License.[1]Later Maintenance and Releases
Development of Joe's Own Editor (JOE) resumed in 2001 under the leadership of Marek Grac, who, along with Vitezslav Samel, hosted the project on SourceForge, reformatted the codebase to Linux kernel standards, and incorporated features such as spell-checking to address user needs.[3] This revival followed a period of limited activity, with Grac focusing on bug fixes, portability improvements, and security patches in the 2.9 series.[10] Joseph Allen, the original author, rejoined the project in 2004, contributing to version 3.0 and subsequent releases by enhancing core functionality.[3] Under Allen and Grac's primary stewardship, JOE saw steady progress, with community members providing input through mailing lists for bug reports and feature suggestions.[11] Key milestones included version 3.0 in 2004, which introduced syntax highlighting for over 40 programming languages and UTF-8 support to enable better handling of international text.[6] Version 4.0, released in 2015, added pop-up shell windows, customizable status commands, per-buffer current directories, and improved file prompts.[6] The project culminated in the stable version 4.6 on January 9, 2018, featuring upgrades to Unicode 10.0.0, addition of Gnome .desktop files, support for strikeout and double-underline, and fixes including a shell script crash bug.[1] As of 2025, no major releases have followed version 4.6, though the project remains maintained on SourceForge and GitHub with occasional patches for compatibility and minor issues, with commits continuing into 2024 including a C99 port and minor updates.[2][4][12] JOE continues to be distributed under the GNU General Public License, fostering open contributions from its user base.[2]Availability and Usage
Supported Platforms
JOE primarily supports Unix-like operating systems, including Linux distributions such as Ubuntu, Fedora, and Debian, as well as BSD variants and Solaris, where it runs natively using the ncurses library for terminal handling.[13][14] It is distributed as standard packages in these environments, enabling seamless integration into command-line workflows.[1] Ports extend JOE's availability to other systems, including DOS via the DJGPP compiler, Windows through Cygwin or a native Win32 build, and macOS via package managers like Homebrew and MacPorts.[15][16] Experimental support exists for Android, typically through the Termux terminal emulator.[17] JOE operates on terminals supporting ANSI escape codes and offers full UTF-8 compatibility on modern systems, though older DOS ports are limited to 8-bit character sets.[7] The compiled binary measures approximately 300 KB on x86 architectures, with source builds requiring only a standard C compiler and optional ncurses for enhanced terminfo support.[1] Installation on supported platforms is available via respective package managers.[13]Installation and Basic Usage
Joe's Own Editor (JOE) can be installed on Debian-based systems using the Advanced Package Tool (APT) with the commandsudo apt install joe.[13] On Fedora and related distributions, it is available via the DNF package manager as sudo dnf install joe.[13] For systems without a pre-built package, JOE can be compiled from source by downloading the latest release (version 4.6 as of 2018) from the official SourceForge project page, extracting the archive, and running ./configure && make && [sudo](/page/Sudo) make install.[1] This process requires only the standard C library (libc) as a dependency, making it straightforward for most Unix-like environments.[1]
To invoke JOE, enter joe [filename] in the terminal, where [filename] is optional; if omitted, a new buffer opens for untitled editing.[7] Command-line options allow customization at startup, such as -lines 25 to set the number of screen lines for terminals lacking window size detection.[7] Variants like jmacs emulate Emacs key bindings, jstar mimics WordStar, and jpico imitates Pico, each loading predefined configurations for specific workflows.[7]
Once launched, basic navigation uses arrow keys or control combinations: Ctrl-P and Ctrl-N for up and down, Ctrl-B and Ctrl-F for left and right, Ctrl-A for line start, and Ctrl-E for line end.[7] To open an additional file within the editor, press Ctrl-K O to prompt for the filename and load it into a new buffer.[7] Saving changes is done with Ctrl-K D, which writes the buffer to the associated file or prompts for a name if unnamed.[7] Exiting requires Ctrl-K X, which saves modified buffers if confirmed and closes JOE; unmodified sessions exit without prompting.[7]
Configuration defaults can be personalized by copying the system-wide /etc/joerc to ~/.joerc and editing it to adjust key bindings, auto-indentation, word wrap, or syntax highlighting rules.[7] For troubleshooting, issues with screen updates or key recognition often stem from terminal emulation; using xterm or screen and setting the TERM environment variable (e.g., export TERM=xterm-256color) resolves most compatibility problems.[7] If flow control causes delays, options like -baud can tune performance for slower connections.[7]