Fact-checked by Grok 2 weeks ago

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. 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. 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. Key features of JOE include unlimited undo and redo capabilities, multi-file search and replace operations, mouse support, character encoding, and for over 40 programming languages. Additional functionalities encompass editing mode, window integration, block manipulation tools, and customization through a named "joerc." Variants such as jmacs (Emacs-like), jstar (WordStar-like), and jpico (Pico-like) extend its usability by emulating popular editor interfaces. Hosted on with , the latest stable release is version 4.6, released on January 9, 2018.

Overview

General Description

Joe's Own Editor (JOE) is a curses-based, full-featured screen editor designed for systems. It serves as an accessible alternative to more complex editors such as and , prioritizing simplicity and an intuitive interface that echoes the familiarity of for users transitioning from PC-based editing environments. 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 users. Initially created by Joseph H. Allen in 1988, JOE evolved from earlier prototypes and saw its first public release around 1989–1990. The editor's core purpose remains providing efficient text manipulation in resource-constrained terminal environments, supporting emulation modes for , , and to broaden its appeal. The latest stable release is version 4.6, dated January 9, 2018. Technically, compiles to a compact of approximately 300 on x86 architectures and depends solely on the libc library, facilitating straightforward installation and portability across platforms. Its user interface supports via , allowing localized prompts and messages.

Design Philosophy

Joe's Own Editor () was developed with a core philosophy centered on mode-less operation to eliminate user confusion associated with modal editors like , enabling direct access to editing functions through intuitive key combinations such as Ctrl-K followed by a letter for commands. This approach draws inspiration from the command structure of legacy editors like , aiming to make text editing feel natural and accessible for non-expert users operating on interfaces. Embracing , prioritizes a small and , requiring only a single to support multiple editor variants while avoiding a steep through its straightforward, user-friendly interface reminiscent of PC editors. It fully utilizes Unix features, such as and for tasks like filtering text blocks via external commands, without introducing unnecessary complexity that could hinder usability. 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. This philosophy positions JOE as an editor for users intimidated by more complex tools, supporting modern encodings like to ensure compatibility across diverse text-handling needs.

Features

Core Editing Functions

Joe's Own Editor (JOE) implements an unlimited and redo 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 is complemented by a yank buffer, functioning as a kill-ring, which stores multiple blocks of text from , or delete operations for subsequent pasting, enabling efficient management of text segments across edits. JOE supports character encoding with optional auto-detection. The editor supports powerful search and replace operations based on regular expressions, adhering to standard syntax or JOE's extended variant, which handles special characters and 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 or find executed internally. 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. JOE handles files through a multi-buffer , where multiple documents can be loaded and edited concurrently, with seamless switching between them to maintain efficiency. files are automatically created upon saving, appending a (~) to the original filename for version preservation. JOE includes shell window integration, accessible via Ctrl-K followed by ', providing pop-up shells with full emulation. For editing, JOE includes a mode that represents the buffer as a , 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.

User Interface and Controls

Joe's Own Editor (JOE) features a terminal-based driven by the library, providing a mode-less environment that emulates the simplicity of classic PC editors like . 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. This status line can be customized through options in the 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. 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. 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. The help screens themselves are customizable by editing the relevant sections in the joerc file, allowing users to tailor explanations to their preferred workflow. 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. Cursor movement is handled using 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. For terminals supporting 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. 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 for history navigation or for auto-completion in file paths. To streamline repetitive tasks, includes a macro recording feature: pressing Ctrl-K followed by an opening ([) 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. This system supports automation of sequences involving core editing functions like , without altering the default interface behavior.

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 , remapping keys such as Ctrl-X for file operations and Ctrl-C for quitting, while retaining JOE's core functionality. Similarly, jstar closely imitates , 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 editor, offering a simplified interface with arrow-key navigation and menu-driven commands, ideal for quick editing tasks. For environments requiring security restrictions, the variant rjoe limits functionality to only the files specified on the command line, disabling commands that could the or external processes, making it suitable for read-only or controlled setups. Customization in 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 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 , with predefined schemes loadable via the file. 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. 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.

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 on Unix terminals. 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. 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. Early iterations emphasized core text manipulation and display handling, with integrations like support enabling compatibility across various Unix terminals. Development progressed steadily through the early under Allen's sole guidance, culminating in version 2.8 in 1995, which introduced multi-buffer support for handling multiple files simultaneously. This version marked a significant enhancement in for more complex editing tasks. Following its release, active development paused after 1995 due to Allen's other professional commitments; was initially distributed as freeware and subsequently relicensed under the GNU General Public License.

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 , reformatted the codebase to standards, and incorporated features such as spell-checking to address user needs. This revival followed a period of limited activity, with Grac focusing on bug fixes, portability improvements, and security patches in the 2.9 series. Joseph Allen, the original author, rejoined the project in 2004, contributing to version 3.0 and subsequent releases by enhancing core functionality. 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. Key milestones included version 3.0 in 2004, which introduced for over 40 programming languages and support to enable better handling of international text. Version 4.0, released in 2015, added pop-up shell windows, customizable status commands, per-buffer current directories, and improved file prompts. The project culminated in the stable version 4.6 on January 9, 2018, featuring upgrades to 10.0.0, addition of .desktop files, support for and double-underline, and fixes including a crash bug. As of 2025, no major releases have followed version 4.6, though the project remains maintained on and with occasional patches for compatibility and minor issues, with commits continuing into 2024 including a port and minor updates. JOE continues to be distributed under the GNU General Public License, fostering open contributions from its user base.

Availability and Usage

Supported Platforms

JOE primarily supports operating systems, including distributions such as , , and , as well as BSD variants and , where it runs natively using the library for terminal handling. It is distributed as standard packages in these environments, enabling seamless integration into command-line workflows. 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. Experimental support exists for Android, typically through the Termux terminal emulator. 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. 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. Installation on supported platforms is available via respective package managers.

Installation and Basic Usage

Joe's Own Editor (JOE) can be installed on Debian-based systems using the Advanced Package Tool (APT) with the command sudo apt install joe. On and related distributions, it is available via the DNF package manager as sudo dnf install joe. For systems without a pre-built package, JOE can be compiled from by downloading the latest release (version 4.6 as of 2018) from the official project page, extracting the archive, and running ./configure && make && [sudo](/page/Sudo) make install. This process requires only the standard C library (libc) as a dependency, making it straightforward for most environments. To invoke JOE, enter joe [filename] in the terminal, where [filename] is optional; if omitted, a new buffer opens for untitled editing. Command-line options allow customization at startup, such as -lines 25 to set the number of screen lines for terminals lacking window size detection. Variants like jmacs emulate Emacs key bindings, jstar mimics WordStar, and jpico imitates Pico, each loading predefined configurations for specific workflows. Once launched, basic navigation uses 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. To open an additional file within the editor, press Ctrl-K O to prompt for the filename and load it into a new buffer. Saving changes is done with Ctrl-K D, which writes the buffer to the associated file or prompts for a name if unnamed. Exiting requires Ctrl-K X, which saves modified buffers if confirmed and closes JOE; unmodified sessions exit without prompting. Configuration defaults can be personalized by copying the system-wide /etc/joerc to ~/.joerc and it to adjust key bindings, auto-indentation, word wrap, or rules. For troubleshooting, issues with screen updates or key recognition often stem from terminal emulation; using xterm or screen and setting the TERM (e.g., export TERM=xterm-256color) resolves most compatibility problems. If flow control causes delays, options like -baud can tune performance for slower connections.

References

  1. [1]
    Joe's Own Editor: Home
    JOE is a full featured terminal-based screen editor which is distributed under the GNU General Public License (GPL). JOE has been around since 1988.User Manual · 4.5 · JOE 4.6 · JOE 4.1Missing: documentation | Show results with:documentation
  2. [2]
    JOE - Joe's own editor download | SourceForge.net
    Rating 4.9 (37) · FreeLicense. GNU General Public License version 2.0 (GPLv2). Follow JOE - Joe's own editor. JOE - Joe's own editor Web Site. Other Useful Business Software. Gen AI ...
  3. [3]
    History - Joe's Own Editor
    WordStar - 1984. At age 15, I got my first high-tech job at a small company called Video Data Systems in Hauppauge Long Island New York.Missing: license | Show results with:license
  4. [4]
    joe-editor/joe: Joe is world-famous Wordstar like text editor. - GitHub
    JOE is a full featured terminal-based screen editor which is distributed under the GNU General Public License (GPL). JOE has been around since 1988.Missing: specs | Show results with:specs
  5. [5]
    Changelog - Joe's Own Editor - SourceForge
    JOE now supports ... Fix German and French .po files: they were cause search&replace to break. Look at LC_MESSAGES to get the language to use for editor messages.
  6. [6]
    User Manual - Joe's Own Editor - SourceForge
    To start the editor, type joe followed by zero or more names of files you want to edit. Each file name may be preceded by a local option setting (see the local ...JOE - Joe's Own Editor · Usage · Searching for text · How JOE syntax highlighting...
  7. [7]
    Professor Norm Matloff's Joe Editor Web Page
    Official joe documentation. My introduction to joe. I usually myself use the elvis text editor, a greatly enhanced version of vi, featuring windows, mouse ...
  8. [8]
    jhallen/joe-editor: Joe's Own Editor - GitHub
    JOE is a full featured terminal-based screen editor which is distributed under the GNU General Public License (GPL). JOE has been around since 1988.
  9. [9]
    JOE - Joe's own editor / News - SourceForge
    JOE 4.2 Released! ... This version has many changes, please see the release notes. Posted by Joe Allen 2016-03-06. JOE 4.1 Released!Missing: history | Show results with:history
  10. [10]
    Joe's own editor / Wiki / Home - SourceForge
    JOE is a full featured terminal-based screen editor which is distributed under the GNU General Public License (GPL). JOE has been around since 1988.
  11. [11]
    Joe Download for Linux (apk deb eopkg ipk pkg rpm tgz txz xbps)
    Download joe packages for ALT Linux, Alpine, Debian, Fedora, FreeBSD, Mageia, NetBSD, OpenMandriva, OpenWrt, PCLinuxOS, Red Hat Enterprise Linux, Slackware, ...
  12. [12]
    joe - Solaris package - OpenCSW
    Install joe on Solaris 10 and 11: pkgadd -d http://get.opencsw.org/now /opt/csw/bin/pkgutil -U /opt/csw/bin/pkgutil -y -i joe /usr/sbin/pkgchk -L CSWjoe ...
  13. [13]
    joe - Homebrew Formulae
    Full featured terminal-based screen editor. https://joe-editor.sourceforge.io/. License: GPL-1.0-or-later. Formula JSON API: /api/formula/joe.json.Missing: MacPorts | Show results with:MacPorts
  14. [14]
    Install joe on macOS with MacPorts
    To install joe, run the following command in macOS terminal (Applications->Utilities->Terminal). sudo port install joe ; To see what files were installed by joe, ...Missing: Homebrew | Show results with:Homebrew
  15. [15]
    Text Editors - Termux Wiki
    A text editor is a type of program used for editing plain text files. Text editors are provided with operating systems and software development packages.