DefinitelyTyped/types/atom/index.d.ts
Nikolay Yakimov b63d70da01 [atom] Revert getLastCursor type (#34869)
Apparently, `getLastCursor` returning `undefined` was unintened and evidently was at some point silently fixed, at least in most cases.
2019-04-21 10:40:45 -07:00

7126 lines
246 KiB
TypeScript

// Type definitions for non-npm package Atom 1.36
// Project: https://github.com/atom/atom
// Definitions by: GlenCFL <https://github.com/GlenCFL>
// smhxx <https://github.com/smhxx>
// lierdakil <https://github.com/lierdakil>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.3
// NOTE: only those classes exported within this file should be retain that status below.
// https://github.com/atom/atom/blob/v1.36.0/exports/atom.js
/// <reference types="node" />
import { ReadStream, WriteStream } from "fs";
import { ChildProcess } from "child_process";
declare global {
const atom: AtomEnvironment;
interface HTMLElementTagNameMap {
"atom-text-editor": TextEditorElement;
}
}
/**
* Invoke a callback with each filesystem event that occurs beneath a specified path.
* If you only need to watch events within the project's root paths, use
* Project::onDidChangeFiles instead.
*/
export function watchPath(rootPath: string, options: {}, eventCallback: (events:
FilesystemChangeEvent) => void): Promise<PathWatcher>;
// Essential Classes ==========================================================
/**
* Atom global for dealing with packages, themes, menus, and the window.
* An instance of this class is always available as the atom global.
*/
export interface AtomEnvironment {
// Properties
/** A CommandRegistry instance. */
readonly commands: CommandRegistry;
/** A Config instance. */
readonly config: Config;
/** A Clipboard instance. */
readonly clipboard: Clipboard;
/** A ContextMenuManager instance. */
readonly contextMenu: ContextMenuManager;
/** A MenuManager instance. */
readonly menu: MenuManager;
/** A KeymapManager instance. */
readonly keymaps: KeymapManager;
/** A TooltipManager instance. */
readonly tooltips: TooltipManager;
/** A NotificationManager instance. */
readonly notifications: NotificationManager;
/** A Project instance. */
readonly project: Project;
/** A GrammarRegistry instance. */
readonly grammars: GrammarRegistry;
/** A HistoryManager instance. */
readonly history: HistoryManager;
/** A PackageManager instance. */
readonly packages: PackageManager;
/** A ThemeManager instance. */
readonly themes: ThemeManager;
/** A StyleManager instance. */
readonly styles: StyleManager;
/** A DeserializerManager instance. */
readonly deserializers: DeserializerManager;
/** A ViewRegistry instance. */
readonly views: ViewRegistry;
/** A Workspace instance. */
readonly workspace: Workspace;
/** A TextEditorRegistry instance. */
readonly textEditors: TextEditorRegistry;
// Event Subscription
/** Invoke the given callback whenever ::beep is called. */
onDidBeep(callback: () => void): Disposable;
/**
* Invoke the given callback when there is an unhandled error, but before
* the devtools pop open.
*/
onWillThrowError(callback: (event: PreventableExceptionThrownEvent) => void): Disposable;
/** Invoke the given callback whenever there is an unhandled error. */
onDidThrowError(callback: (event: ExceptionThrownEvent) => void): Disposable;
/**
* Invoke the given callback as soon as the shell environment is loaded (or
* immediately if it was already loaded).
*/
whenShellEnvironmentLoaded(callback: () => void): Disposable;
// Atom Details
/** Returns a boolean that is true if the current window is in development mode. */
inDevMode(): boolean;
/** Returns a boolean that is true if the current window is in safe mode. */
inSafeMode(): boolean;
/** Returns a boolean that is true if the current window is running specs. */
inSpecMode(): boolean;
/** Get the version of the Atom application. */
getVersion(): string;
/**
* Gets the release channel of the Atom application.
* Returns the release channel, which can be 'dev', 'beta', or 'stable'.
*/
getReleaseChannel(): "dev"|"beta"|"stable";
/** Returns a boolean that is true if the current version is an official release. */
isReleasedVersion(): boolean;
/** Get the time taken to completely load the current window. */
getWindowLoadTime(): number;
/** Get the load settings for the current window. */
getLoadSettings(): WindowLoadSettings;
// Managing the Atom Window
/** Open a new Atom window using the given options. */
open(params?: {
pathsToOpen: ReadonlyArray<string>,
newWindow?: boolean,
devMode?: boolean,
safeMode?: boolean,
}): void;
/** Close the current window. */
close(): void;
/** Get the size of current window. */
getSize(): { width: number, height: number };
/** Set the size of current window. */
setSize(width: number, height: number): void;
/** Get the position of current window. */
getPosition(): { x: number, y: number };
/** Set the position of current window. */
setPosition(x: number, y: number): void;
/** Prompt the user to select one or more folders. */
pickFolder(callback: (paths: string[]|null) => void): void;
/** Get the current window. */
getCurrentWindow(): object;
/** Move current window to the center of the screen. */
center(): void;
/** Focus the current window. */
focus(): void;
/** Show the current window. */
show(): void;
/** Hide the current window. */
hide(): void;
/** Reload the current window. */
reload(): void;
/** Relaunch the entire application. */
restartApplication(): void;
/** Returns a boolean that is true if the current window is maximized. */
isMaximized(): boolean;
/** Returns a boolean that is true if the current window is in full screen mode. */
isFullScreen(): boolean;
/** Set the full screen state of the current window. */
setFullScreen(fullScreen: boolean): void;
/** Toggle the full screen state of the current window. */
toggleFullScreen(): void;
// Messaging the User
/** Visually and audibly trigger a beep. */
beep(): void;
/**
* A flexible way to open a dialog akin to an alert dialog. If a callback
* is provided, then the confirmation will work asynchronously, which is
* recommended.
*
* If the dialog is closed (via `Esc` key or `X` in the top corner) without
* selecting a button the first button will be clicked unless a "Cancel" or "No"
* button is provided.
*
* Returns the chosen button index number if the buttons option was an array.
* @param response The index of the button that was clicked.
* @param checkboxChecked The checked state of the checkbox if `checkboxLabel` was set.
* Otherwise false.
*/
confirm(options: ConfirmationOptions, callback: (response: number,
checkboxChecked: boolean) => void): void;
/**
* A flexible way to open a dialog akin to an alert dialog. If a callback
* is provided, then the confirmation will work asynchronously, which is
* recommended.
*
* If the dialog is closed (via `Esc` key or `X` in the top corner) without
* selecting a button the first button will be clicked unless a "Cancel" or "No"
* button is provided.
*
* Returns the chosen button index number if the buttons option was an array.
*/
confirm(options: {
message: string,
detailedMessage?: string,
buttons?: ReadonlyArray<string>,
}): void;
/**
* A flexible way to open a dialog akin to an alert dialog. If a callback
* is provided, then the confirmation will work asynchronously, which is
* recommended.
*
* If the dialog is closed (via `Esc` key or `X` in the top corner) without
* selecting a button the first button will be clicked unless a "Cancel" or "No"
* button is provided.
*
* Returns the chosen button index number if the buttons option was an array.
*/
confirm(options: {
message: string,
detailedMessage?: string,
buttons?: {
[key: string]: () => void
},
}): number;
// Managing the Dev Tools
/** Open the dev tools for the current window. */
openDevTools(): Promise<null>;
/** Toggle the visibility of the dev tools for the current window. */
toggleDevTools(): Promise<null>;
/** Execute code in dev tools. */
executeJavaScriptInDevTools(code: string): void;
/** Undocumented: get Atom config directory path */
getConfigDirPath(): string;
}
/**
* A simple color class returned from Config::get when the value at the key path is
* of type 'color'.
*/
export interface Color {
/** Returns a string in the form '#abcdef'. */
toHexString(): string;
/** Returns a string in the form 'rgba(25, 50, 75, .9)'. */
toRGBAString(): string;
}
export interface CommandRegistryTargetMap extends HTMLElementTagNameMap {
[key: string]: EventTarget;
}
export type CommandRegistryListener<TargetType extends EventTarget> = {
didDispatch(event: CommandEvent<TargetType>): void | Promise<void>,
displayName?: string,
description?: string,
hiddenInCommandPalette?: boolean,
} | ((event: CommandEvent<TargetType>) => void | Promise<void>);
/**
* Associates listener functions with commands in a context-sensitive way
* using CSS selectors.
*/
export interface CommandRegistry {
/** Register a single command. */
add<T extends keyof CommandRegistryTargetMap>(
target: T, commandName: string,
listener: CommandRegistryListener<CommandRegistryTargetMap[T]>
): Disposable;
/** Register a single command. */
add<T extends Node>(
target: T, commandName: string,
listener: CommandRegistryListener<T>
): Disposable;
/** Register multiple commands. */
add<T extends keyof CommandRegistryTargetMap>(target: T, commands: {
[key: string]: CommandRegistryListener<CommandRegistryTargetMap[T]>
}): CompositeDisposable;
/** Register multiple commands. */
add<T extends Node>(target: T, commands: {
[key: string]: CommandRegistryListener<T>
}): CompositeDisposable;
/** Find all registered commands matching a query. */
findCommands(params: { target: string|Node }): Array<{
name: string,
displayName: string,
description?: string,
tags?: string[],
}>;
/**
* Simulate the dispatch of a command on a DOM node.
* @return Either a Promise that resolves after all handlers complete or null if
* no handlers were matched.
*/
dispatch(target: Node, commandName: string): Promise<void> | null;
/** Invoke the given callback before dispatching a command event. */
onWillDispatch(callback: (event: CommandEvent) => void): Disposable;
/** Invoke the given callback after dispatching a command event. */
onDidDispatch(callback: (event: CommandEvent) => void): Disposable;
}
/**
* An object that aggregates multiple Disposable instances together into a
* single disposable, so they can all be disposed as a group.
*/
export class CompositeDisposable implements DisposableLike {
/** Construct an instance, optionally with one or more disposables. */
constructor(...disposables: DisposableLike[]);
/**
* Dispose all disposables added to this composite disposable.
* If this object has already been disposed, this method has no effect.
*/
dispose(): void;
// Managing Disposables
/**
* Add disposables to be disposed when the composite is disposed.
* If this object has already been disposed, this method has no effect.
*/
add(...disposables: DisposableLike[]): void;
/** Remove a previously added disposable. */
remove(disposable: DisposableLike): void;
/** Alias to CompositeDisposable::remove. */
delete(disposable: DisposableLike): void;
/**
* Clear all disposables. They will not be disposed by the next call to
* dispose.
*/
clear(): void;
}
/** Used to access all of Atom's configuration details. */
export interface Config {
// Config Subscription
/**
* Add a listener for changes to a given key path. This is different than ::onDidChange in
* that it will immediately call your callback with the current value of the config entry.
*/
observe<T extends keyof ConfigValues>(keyPath: T, callback:
(value: ConfigValues[T]) => void): Disposable;
/**
* Add a listener for changes to a given key path. This is different than ::onDidChange in
* that it will immediately call your callback with the current value of the config entry.
*/
observe<T extends keyof ConfigValues>(keyPath: T, options:
{ scope: string[]|ScopeDescriptor }, callback: (value: ConfigValues[T]) => void):
Disposable;
/**
* Add a listener for changes to a given key path. If keyPath is not specified, your
* callback will be called on changes to any key.
*/
// tslint:disable-next-line:no-any
onDidChange<T = any>(callback: (values: { newValue: T, oldValue: T }) => void):
Disposable;
/**
* Add a listener for changes to a given key path. If keyPath is not specified, your
* callback will be called on changes to any key.
*/
onDidChange<T extends keyof ConfigValues>(keyPath: T, callback: (values: {
newValue: ConfigValues[T],
oldValue?: ConfigValues[T],
}) => void): Disposable;
/**
* Add a listener for changes to a given key path. If keyPath is not specified, your
* callback will be called on changes to any key.
*/
onDidChange<T extends keyof ConfigValues>(keyPath: T, options:
{ scope: string[]|ScopeDescriptor }, callback:
(values: { newValue: ConfigValues[T], oldValue?: ConfigValues[T] }) => void):
Disposable;
// Managing Settings
/** Retrieves the setting for the given key. */
get<T extends keyof ConfigValues>(keyPath: T, options?: { sources?: string[],
excludeSources?: string[], scope?: string[]|ScopeDescriptor }):
ConfigValues[T];
/**
* Sets the value for a configuration setting.
* This value is stored in Atom's internal configuration file.
*/
set<T extends keyof ConfigValues>(keyPath: T, value: ConfigValues[T], options?:
{ scopeSelector?: string, source?: string }): void;
/** Restore the setting at keyPath to its default value. */
unset(keyPath: string, options?: { scopeSelector?: string, source?: string }): void;
/**
* Get all of the values for the given key-path, along with their associated
* scope selector.
*/
getAll<T extends keyof ConfigValues>(keyPath: T, options?: { sources?: string[],
excludeSources?: string[], scope?: ScopeDescriptor }):
Array<{ scopeDescriptor: ScopeDescriptor, value: ConfigValues[T] }>;
/**
* Get an Array of all of the source Strings with which settings have been added
* via ::set.
*/
getSources(): string[];
/**
* Retrieve the schema for a specific key path. The schema will tell you what type
* the keyPath expects, and other metadata about the config option.
*/
getSchema(keyPath: string): object|null;
/** Get the string path to the config file being used. */
getUserConfigPath(): string;
/**
* Suppress calls to handler functions registered with ::onDidChange and ::observe
* for the duration of callback. After callback executes, handlers will be called
* once if the value for their key-path has changed.
*/
transact(callback: () => void): void;
}
/**
* Represents a decoration that follows a DisplayMarker. A decoration is basically
* a visual representation of a marker. It allows you to add CSS classes to line
* numbers in the gutter, lines, and add selection-line regions around marked ranges
* of text.
*/
export interface Decoration {
/** The identifier for this Decoration. */
readonly id: number;
// Construction and Destruction
/**
* Destroy this marker decoration.
* You can also destroy the marker if you own it, which will destroy this decoration.
*/
destroy(): void;
// Event Subscription
/** When the Decoration is updated via Decoration::setProperties. */
onDidChangeProperties(callback: (event: DecorationPropsChangedEvent) => void): Disposable;
/** Invoke the given callback when the Decoration is destroyed. */
onDidDestroy(callback: () => void): Disposable;
// Decoration Details
/** An id unique across all Decoration objects. */
getId(): number;
/** Returns the marker associated with this Decoration. */
getMarker(): DisplayMarker;
/**
* Check if this decoration is of the given type.
* @param type A decoration type, such as `line-number` or `line`. This may also
* be an array of decoration types, with isType returning true if the decoration's
* type matches any in the array.
*/
isType(type: string|string[]): boolean;
// Properties
/** Returns the Decoration's properties. */
getProperties(): DecorationOptions;
/**
* Update the marker with new Properties. Allows you to change the decoration's
* class.
*/
setProperties(newProperties: DecorationOptions): void;
}
/**
* Represents a buffer annotation that remains logically stationary even as the
* buffer changes. This is used to represent cursors, folds, snippet targets,
* misspelled words, and anything else that needs to track a logical location
* in the buffer over time.
*/
export interface DisplayMarker {
// Construction and Destruction
/**
* Destroys the marker, causing it to emit the 'destroyed' event. Once destroyed,
* a marker cannot be restored by undo/redo operations.
*/
destroy(): void;
/** Creates and returns a new DisplayMarker with the same properties as this marker. */
copy(options?: CopyMarkerOptions): DisplayMarker;
// Event Subscription
/** Invoke the given callback when the state of the marker changes. */
onDidChange(callback: (event: DisplayMarkerChangedEvent) => void): Disposable;
/** Invoke the given callback when the marker is destroyed. */
onDidDestroy(callback: () => void): Disposable;
// TextEditorMarker Details
/**
* Returns a boolean indicating whether the marker is valid. Markers can be
* invalidated when a region surrounding them in the buffer is changed.
*/
isValid(): boolean;
/**
* Returns a boolean indicating whether the marker has been destroyed. A marker
* can be invalid without being destroyed, in which case undoing the invalidating
* operation would restore the marker.
*/
isDestroyed(): boolean;
/** Returns a boolean indicating whether the head precedes the tail. */
isReversed(): boolean;
/**
* Returns a boolean indicating whether changes that occur exactly at the marker's
* head or tail cause it to move.
*/
isExclusive(): boolean;
/**
* Get the invalidation strategy for this marker.
* Valid values include: never, surround, overlap, inside, and touch.
*/
getInvalidationStrategy(): string;
/** Returns an Object containing any custom properties associated with the marker. */
getProperties(): object;
/** Merges an Object containing new properties into the marker's existing properties. */
setProperties(properties: object): void;
/** Returns whether this marker matches the given parameters. */
matchesProperties(attributes: FindDisplayMarkerOptions): boolean;
// Comparing to other markers
/** Compares this marker to another based on their ranges. */
compare(other: DisplayMarker): number;
/**
* Returns a boolean indicating whether this marker is equivalent to another
* marker, meaning they have the same range and options.
*/
isEqual(other: DisplayMarker): boolean;
// Managing the marker's range
/** Gets the buffer range of this marker. */
getBufferRange(): Range;
/** Gets the screen range of this marker. */
getScreenRange(): Range;
/** Modifies the buffer range of this marker. */
setBufferRange(bufferRange: RangeCompatible, properties?: { reversed: boolean }):
void;
/** Modifies the screen range of this marker. */
setScreenRange(screenRange: RangeCompatible, options?: { reversed?: boolean,
clipDirection?: "backward"|"forward"|"closest" }): void;
/**
* Retrieves the screen position of the marker's start. This will always be
* less than or equal to the result of DisplayMarker::getEndScreenPosition.
*/
getStartScreenPosition(options?: { clipDirection: "backward"|"forward"|"closest" }):
Point;
/**
* Retrieves the screen position of the marker's end. This will always be
* greater than or equal to the result of DisplayMarker::getStartScreenPosition.
*/
getEndScreenPosition(options?: { clipDirection: "backward"|"forward"|"closest" }):
Point;
/** Retrieves the buffer position of the marker's head. */
getHeadBufferPosition(): Point;
/** Sets the buffer position of the marker's head. */
setHeadBufferPosition(bufferPosition: PointCompatible): void;
/** Retrieves the screen position of the marker's head. */
getHeadScreenPosition(options?: { clipDirection: "backward"|"forward"|"closest" }):
Point;
/** Sets the screen position of the marker's head. */
setHeadScreenPosition(screenPosition: PointCompatible,
options?: { clipDirection: "backward"|"forward"|"closest" }): void;
/** Retrieves the buffer position of the marker's tail. */
getTailBufferPosition(): Point;
/** Sets the buffer position of the marker's tail. */
setTailBufferPosition(bufferPosition: PointCompatible): void;
/** Retrieves the screen position of the marker's tail. */
getTailScreenPosition(options?: { clipDirection: "backward"|"forward"|"closest" }):
Point;
/** Sets the screen position of the marker's tail. */
setTailScreenPosition(screenPosition: PointCompatible,
options?: { clipDirection: "backward"|"forward"|"closest" }): void;
/**
* Retrieves the buffer position of the marker's start. This will always be less
* than or equal to the result of DisplayMarker::getEndBufferPosition.
*/
getStartBufferPosition(): Point;
/**
* Retrieves the buffer position of the marker's end. This will always be greater
* than or equal to the result of DisplayMarker::getStartBufferPosition.
*/
getEndBufferPosition(): Point;
/** Returns a boolean indicating whether the marker has a tail. */
hasTail(): boolean;
/**
* Plants the marker's tail at the current head position. After calling the
* marker's tail position will be its head position at the time of the call,
* regardless of where the marker's head is moved.
*/
plantTail(): void;
/**
* Removes the marker's tail. After calling the marker's head position will be
* reported as its current tail position until the tail is planted again.
*/
clearTail(): void;
}
/**
* Experimental: A container for a related set of markers at the DisplayLayer level.
* Wraps an underlying MarkerLayer on the TextBuffer.
*
* This API is experimental and subject to change on any release.
*/
export interface DisplayMarkerLayer {
/** The identifier for the underlying MarkerLayer. */
readonly id: string;
// Lifecycle
/** Destroy this layer. */
destroy(): void;
/** Destroy all markers in this layer. */
clear(): void;
/** Determine whether this layer has been destroyed. */
isDestroyed(): boolean;
// Event Subscription
/** Subscribe to be notified synchronously when this layer is destroyed. */
onDidDestroy(callback: () => void): Disposable;
/**
* Subscribe to be notified asynchronously whenever markers are created, updated,
* or destroyed on this layer. Prefer this method for optimal performance when
* interacting with layers that could contain large numbers of markers.
*/
onDidUpdate(callback: () => void): Disposable;
/**
* Subscribe to be notified synchronously whenever markers are created on this
* layer. Avoid this method for optimal performance when interacting with layers
* that could contain large numbers of markers.
*/
onDidCreateMarker(callback: (marker: DisplayMarker|Marker) => void): Disposable;
// Marker creation
/** Create a marker with the given screen range. */
markScreenRange(range: RangeCompatible, options?: { reversed?: boolean,
invalidate?: "never"|"surround"|"overlap"|"inside"|"touch", exclusive?:
boolean, clipDirection?: "backward"|"forward"|"closest" }): DisplayMarker;
/**
* Create a marker on this layer with its head at the given screen position
* and no tail.
*/
markScreenPosition(screenPosition: PointCompatible, options?: { invalidate?:
"never"|"surround"|"overlap"|"inside"|"touch", exclusive?: boolean,
clipDirection?: "backward"|"forward"|"closest" }): DisplayMarker;
/** Create a marker with the given buffer range. */
markBufferRange(range: RangeCompatible, options?: {
reversed?: boolean, invalidate?: "never"|"surround"|"overlap"|"inside"|"touch",
exclusive?: boolean }): DisplayMarker;
/**
* Create a marker on this layer with its head at the given buffer position
* and no tail.
*/
markBufferPosition(bufferPosition: PointCompatible, options?: { invalidate?:
"never"|"surround"|"overlap"|"inside"|"touch", exclusive?: boolean }):
DisplayMarker;
// Querying
/** Get an existing marker by its id. */
getMarker(id: number): DisplayMarker;
/** Get all markers in the layer. */
getMarkers(): DisplayMarker[];
/** Get the number of markers in the marker layer. */
getMarkerCount(): number;
/**
* Find markers in the layer conforming to the given parameters.
*
* This method finds markers based on the given properties. Markers can be associated
* with custom properties that will be compared with basic equality. In addition,
* there are several special properties that will be compared with the range of the
* markers rather than their properties.
*/
findMarkers(properties: FindDisplayMarkerOptions): DisplayMarker[];
}
/** A handle to a resource that can be disposed. */
export class Disposable implements DisposableLike {
/** Ensure that Object correctly implements the Disposable contract. */
static isDisposable(object: object): boolean;
/** Construct a Disposable. */
constructor(disposableAction?: () => void);
/** A callback which will be called within dispose(). */
disposalAction?(): void;
/**
* Perform the disposal action, indicating that the resource associated
* with this disposable is no longer needed.
*/
dispose(): void;
}
/**
* Utility class to be used when implementing event-based APIs that allows
* for handlers registered via ::on to be invoked with calls to ::emit.
*/
// tslint:disable-next-line:no-any
export class Emitter<OptionalEmissions = { [key: string]: any }, RequiredEmissions = {}>
implements DisposableLike {
/** Construct an emitter. */
constructor();
/** Clear out any existing subscribers. */
clear(): void;
/** Unsubscribe all handlers. */
dispose(): boolean;
// Event Subscription
/** Registers a handler to be invoked whenever the given event is emitted. */
on<T extends keyof OptionalEmissions>(eventName: T, handler: (value?:
OptionalEmissions[T]) => void): Disposable;
/** Registers a handler to be invoked whenever the given event is emitted. */
on<T extends keyof RequiredEmissions>(eventName: T, handler: (value:
RequiredEmissions[T]) => void): Disposable;
/**
* Register the given handler function to be invoked the next time an event
* with the given name is emitted via ::emit.
*/
once<T extends keyof OptionalEmissions>(eventName: T, handler: (value?:
OptionalEmissions[T]) => void): Disposable;
/**
* Register the given handler function to be invoked the next time an event
* with the given name is emitted via ::emit.
*/
once<T extends keyof RequiredEmissions>(eventName: T, handler: (value:
RequiredEmissions[T]) => void): Disposable;
/**
* Register the given handler function to be invoked before all other
* handlers existing at the time of subscription whenever events by the
* given name are emitted via ::emit.
*/
preempt<T extends keyof OptionalEmissions>(eventName: T, handler: (value?:
OptionalEmissions[T]) => void): Disposable;
/**
* Register the given handler function to be invoked before all other
* handlers existing at the time of subscription whenever events by the
* given name are emitted via ::emit.
*/
preempt<T extends keyof RequiredEmissions>(eventName: T, handler: (value:
RequiredEmissions[T]) => void): Disposable;
// Event Emission
/** Invoke the handlers registered via ::on for the given event name. */
emit<T extends keyof OptionalEmissions>(eventName: T, value?:
OptionalEmissions[T]): void;
/** Invoke the handlers registered via ::on for the given event name. */
emit<T extends keyof RequiredEmissions>(eventName: T, value:
RequiredEmissions[T]): void;
}
/**
* Represents a decoration that applies to every marker on a given layer. Created via
* TextEditor::decorateMarkerLayer.
*/
export interface LayerDecoration {
/** Destroys the decoration. */
destroy(): void;
/** Determine whether this decoration is destroyed. */
isDestroyed(): boolean;
/** Get this decoration's properties. */
getProperties(): DecorationLayerOptions;
/** Set this decoration's properties. */
setProperties(newProperties: DecorationLayerOptions): void;
/** Override the decoration properties for a specific marker. */
setPropertiesForMarker(marker: DisplayMarker|Marker, properties: DecorationLayerOptions):
void;
}
/**
* Represents a buffer annotation that remains logically stationary even as
* the buffer changes.
*/
export interface Marker {
/** The identifier for this Marker. */
readonly id: number;
// Lifecycle
/**
* Creates and returns a new Marker with the same properties as this
* marker.
*/
copy(options?: CopyMarkerOptions): Marker;
/** Destroys the marker, causing it to emit the "destroyed" event. */
destroy(): void;
// Event Subscription
/** Invoke the given callback when the marker is destroyed. */
onDidDestroy(callback: () => void): Disposable;
/** Invoke the given callback when the state of the marker changes. */
onDidChange(callback: (event: MarkerChangedEvent) => void): Disposable;
// Marker Details
/** Returns the current range of the marker. The range is immutable. */
getRange(): Range;
/** Returns a point representing the marker's current head position. */
getHeadPosition(): Point;
/** Returns a point representing the marker's current tail position. */
getTailPosition(): Point;
/**
* Returns a point representing the start position of the marker, which
* could be the head or tail position, depending on its orientation.
*/
getStartPosition(): Point;
/**
* Returns a point representing the end position of the marker, which
* could be the head or tail position, depending on its orientation.
*/
getEndPosition(): Point;
/** Returns a boolean indicating whether the head precedes the tail. */
isReversed(): boolean;
/** Returns a boolean indicating whether the marker has a tail. */
hasTail(): boolean;
/** Is the marker valid? */
isValid(): boolean;
/** Is the marker destroyed? */
isDestroyed(): boolean;
/**
* Returns a boolean indicating whether changes that occur exactly at
* the marker's head or tail cause it to move.
*/
isExclusive(): boolean;
/** Get the invalidation strategy for this marker. */
getInvalidationStrategy(): string;
// Mutating Markers
/**
* Sets the range of the marker.
* Returns a boolean indicating whether or not the marker was updated.
*/
setRange(range: RangeCompatible, params?: { reversed?: boolean, exclusive?:
boolean }): boolean;
/**
* Sets the head position of the marker.
* Returns a boolean indicating whether or not the marker was updated.
*/
setHeadPosition(position: PointCompatible): boolean;
/**
* Sets the tail position of the marker.
* Returns a boolean indicating whether or not the marker was updated.
*/
setTailPosition(position: PointCompatible): boolean;
/**
* Removes the marker's tail.
* Returns a boolean indicating whether or not the marker was updated.
*/
clearTail(): boolean;
/**
* Plants the marker's tail at the current head position.
* Returns a boolean indicating whether or not the marker was updated.
*/
plantTail(): boolean;
// Comparison
/**
* Returns a boolean indicating whether this marker is equivalent to
* another marker, meaning they have the same range and options.
*/
isEqual(other: Marker): boolean;
/**
* Compares this marker to another based on their ranges.
* Returns "-1" if this marker precedes the argument.
* Returns "0" if this marker is equivalent to the argument.
* Returns "1" if this marker follows the argument.
*/
compare(other: Marker): number;
}
/** Experimental: A container for a related set of markers. */
export interface MarkerLayer {
/** The identifier for this MarkerLayer. */
readonly id: string;
// Lifecycle
/** Create a copy of this layer with markers in the same state and locations. */
copy(): MarkerLayer;
/** Destroy this layer. */
destroy(): boolean;
/** Remove all markers from this layer. */
clear(): void;
/** Determine whether this layer has been destroyed. */
isDestroyed(): boolean;
// Querying
/** Get an existing marker by its id. */
getMarker(id: number): Marker|undefined;
/** Get all existing markers on the marker layer. */
getMarkers(): Marker[];
/** Get the number of markers in the marker layer. */
getMarkerCount(): number;
/** Find markers in the layer conforming to the given parameters. */
findMarkers(params: FindMarkerOptions): Marker[];
/** Get the role of the marker layer e.g. "atom.selection". */
getRole(): string | undefined;
// Marker Creation
/** Create a marker with the given range. */
markRange(range: RangeCompatible, options?: { reversed?: boolean, invalidate?:
"never"|"surround"|"overlap"|"inside"|"touch", exclusive?: boolean }): Marker;
/** Create a marker at with its head at the given position with no tail. */
markPosition(position: PointCompatible, options?: { invalidate?: "never"|"surround"
|"overlap"|"inside"|"touch", exclusive?: boolean }): Marker;
// Event Subscription
/**
* Subscribe to be notified asynchronously whenever markers are created,
* updated, or destroyed on this layer.
*/
onDidUpdate(callback: () => void): Disposable;
/**
* Subscribe to be notified synchronously whenever markers are created on
* this layer.
*/
onDidCreateMarker(callback: (marker: Marker) => void): Disposable;
/** Subscribe to be notified synchronously when this layer is destroyed. */
onDidDestroy(callback: () => void): Disposable;
}
/** A notification to the user containing a message and type. */
export class Notification {
constructor(type: "warning"|"info"|"success", message: string,
options?: NotificationOptions);
constructor(type: "fatal"|"error", message: string, options?: ErrorNotificationOptions);
// Event Subscription
/** Invoke the given callback when the notification is dismissed. */
onDidDismiss(callback: (notification: Notification) => void): Disposable;
/** Invoke the given callback when the notification is displayed. */
onDidDisplay(callback: (notification: Notification) => void): Disposable;
// Methods
/** Returns the Notification's type. */
getType(): string;
/** Returns the Notification's message. */
getMessage(): string;
/**
* Dismisses the notification, removing it from the UI. Calling this
* programmatically will call all callbacks added via onDidDismiss.
*/
dismiss(): void;
}
/** A notification manager used to create Notifications to be shown to the user. */
export interface NotificationManager {
// Events
/** Invoke the given callback after a notification has been added. */
onDidAddNotification(callback: (notification: Notification) => void): Disposable;
/** Invoke the given callback after the notifications have been cleared. */
onDidClearNotifications(callback: () => void): Disposable;
// Adding Notifications
/** Add a success notification. */
addSuccess(message: string, options?: NotificationOptions): Notification;
/** Add an informational notification. */
addInfo(message: string, options?: NotificationOptions): Notification;
/** Add a warning notification. */
addWarning(message: string, options?: NotificationOptions): Notification;
/** Add an error notification. */
addError(message: string, options?: ErrorNotificationOptions): Notification;
/** Add a fatal error notification. */
addFatalError(message: string, options?: ErrorNotificationOptions): Notification;
// Getting Notifications
/** Get all the notifications. */
getNotifications(): ReadonlyArray<Notification>;
// Managing Notifications
/** Clear all the notifications. */
clear(): void;
}
/** Represents a point in a buffer in row/column coordinates. */
export class Point {
// Properties
/** A zero-indexed number representing the row of the Point. */
row: number;
/** A zero-indexed number representing the column of the Point. */
column: number;
// Construction
/**
* Create a Point from an array containing two numbers representing the
* row and column.
*/
static fromObject(object: PointCompatible, copy?: boolean): Point;
/** Construct a Point object */
constructor(row?: number, column?: number);
/** Returns a new Point with the same row and column. */
copy(): Point;
/** Returns a new Point with the row and column negated. */
negate(): Point;
// Comparison
/** Returns the given Point that is earlier in the buffer. */
static min(point1: PointCompatible, point2: PointCompatible): Point;
/**
* Compare another Point to this Point instance.
* Returns -1 if this point precedes the argument.
* Returns 0 if this point is equivalent to the argument.
* Returns 1 if this point follows the argument.
*/
compare(other: PointCompatible): number;
/**
* Returns a boolean indicating whether this point has the same row and
* column as the given Point.
*/
isEqual(other: PointCompatible): boolean;
/** Returns a Boolean indicating whether this point precedes the given Point. */
isLessThan(other: PointCompatible): boolean;
/**
* Returns a Boolean indicating whether this point precedes or is equal to
* the given Point.
*/
isLessThanOrEqual(other: PointCompatible): boolean;
/** Returns a Boolean indicating whether this point follows the given Point. */
isGreaterThan(other: PointCompatible): boolean;
/**
* Returns a Boolean indicating whether this point follows or is equal to
* the given Point.
*/
isGreaterThanOrEqual(other: PointCompatible): boolean;
// Operations
/** Makes this point immutable and returns itself. */
freeze(): Readonly<Point>;
/**
* Build and return a new point by adding the rows and columns of the
* given point.
*/
translate(other: PointCompatible): Point;
/**
* Build and return a new Point by traversing the rows and columns
* specified by the given point.
*/
traverse(other: PointCompatible): Point;
/** Returns an array of this point's row and column. */
toArray(): [number, number];
/** Returns an array of this point's row and column. */
serialize(): [number, number];
/** Returns a string representation of the point. */
toString(): string;
}
/** Represents a region in a buffer in row/column coordinates. */
export class Range {
// Properties
/** A Point representing the start of the Range. */
start: Point;
/** A Point representing the end of the Range. */
end: Point;
// Construction
/** Convert any range-compatible object to a Range. */
static fromObject(object: RangeCompatible, copy?: boolean): Range;
/** Construct a Range object. */
constructor(pointA?: PointCompatible, pointB?: PointCompatible);
/** Call this with the result of Range::serialize to construct a new Range. */
static deserialize(array: object): Range;
/** Returns a new range with the same start and end positions. */
copy(): Range;
/** Returns a new range with the start and end positions negated. */
negate(): Range;
// Serialization and Deserialization
/** Returns a plain javascript object representation of the Range. */
serialize(): number[][];
// Range Details
/** Is the start position of this range equal to the end position? */
isEmpty(): boolean;
/**
* Returns a boolean indicating whether this range starts and ends on the
* same row.
*/
isSingleLine(): boolean;
/** Get the number of rows in this range. */
getRowCount(): number;
/** Returns an array of all rows in the range. */
getRows(): number[];
// Operations
/**
* Freezes the range and its start and end point so it becomes immutable
* and returns itself.
*/
freeze(): Readonly<Range>;
// NOTE: this function doesn't actually take a range-compatible parameter.
/** Returns a new range that contains this range and the given range. */
union(other: RangeLike): Range;
/**
* Build and return a new range by translating this range's start and end
* points by the given delta(s).
*/
translate(startDelta: PointCompatible, endDelta?: PointCompatible): Range;
/**
* Build and return a new range by traversing this range's start and end
* points by the given delta.
*/
traverse(delta: PointCompatible): Range;
// Comparison
/**
* Compare two Ranges.
* Returns -1 if this range starts before the argument or contains it.
* Returns 0 if this range is equivalent to the argument.
* Returns 1 if this range starts after the argument or is contained by it.
*/
compare(otherRange: RangeCompatible): number;
/**
* Returns a Boolean indicating whether this range has the same start and
* end points as the given Range.
*/
isEqual(otherRange: RangeCompatible): boolean;
// NOTE: this function doesn't actually take a range-compatible parameter.
/**
* Returns a Boolean indicating whether this range starts and ends on the
* same row as the argument.
*/
coversSameRows(otherRange: RangeLike): boolean;
// NOTE: this function doesn't actually take a range-compatible parameter.
/** Determines whether this range intersects with the argument. */
intersectsWith(otherRange: RangeLike, exclusive?: boolean): boolean;
/** Returns a boolean indicating whether this range contains the given range. */
containsRange(otherRange: RangeCompatible, exclusive?: boolean): boolean;
/** Returns a boolean indicating whether this range contains the given point. */
containsPoint(point: PointCompatible, exclusive?: boolean): boolean;
/**
* Returns a boolean indicating whether this range intersects the given
* row number.
*/
intersectsRow(row: number): boolean;
/**
* Returns a boolean indicating whether this range intersects the row range
* indicated by the given startRow and endRow numbers.
*/
intersectsRowRange(startRow: number, endRow: number): boolean;
// Conversion
/** Returns a string representation of the range. */
toString(): string;
}
/**
* This class represents all essential editing state for a single TextBuffer,
* including cursor and selection positions, folds, and soft wraps.
*/
export class TextEditor {
readonly id: number;
// NOTE: undocumented within the public API. Don't go down the rabbit hole.
constructor(options?: object);
// Event Subscription
/** Calls your callback when the buffer's title has changed. */
onDidChangeTitle(callback: (title: string) => void): Disposable;
/** Calls your callback when the buffer's path, and therefore title, has changed. */
onDidChangePath(callback: (path: string) => void): Disposable;
/**
* Invoke the given callback synchronously when the content of the buffer
* changes.
*/
onDidChange(callback: (event: EditorChangedEvent[]) => void): Disposable;
/**
* Invoke callback when the buffer's contents change. It is emit
* asynchronously 300ms after the last buffer change. This is a good place
* to handle changes to the buffer without compromising typing performance.
*/
onDidStopChanging(callback: (event: BufferStoppedChangingEvent) => void): Disposable;
/**
* Calls your callback when a Cursor is moved. If there are multiple cursors,
* your callback will be called for each cursor.
*/
onDidChangeCursorPosition(callback: (event: CursorPositionChangedEvent) => void):
Disposable;
/** Calls your callback when a selection's screen range changes. */
onDidChangeSelectionRange(callback: (event: SelectionChangedEvent) => void): Disposable;
/** Invoke the given callback after the buffer is saved to disk. */
onDidSave(callback: (event: { path: string }) => void): Disposable;
/** Invoke the given callback when the editor is destroyed. */
onDidDestroy(callback: () => void): Disposable;
/** Retrieves the current TextBuffer. */
getBuffer(): TextBuffer;
/** Sets the read-only state for the editor. */
setReadOnly(readonly: boolean): void;
/** Whether or not this editor is in read-only mode. */
isReadOnly(): boolean;
/**
* Calls your callback when a Gutter is added to the editor. Immediately calls
* your callback for each existing gutter.
*/
observeGutters(callback: (gutter: Gutter) => void): Disposable;
/** Calls your callback when a Gutter is added to the editor. */
onDidAddGutter(callback: (gutter: Gutter) => void): Disposable;
/** Calls your callback when a Gutter is removed from the editor. */
onDidRemoveGutter(callback: (name: string) => void): Disposable;
/** Calls your callback when soft wrap was enabled or disabled. */
onDidChangeSoftWrapped(callback: (softWrapped: boolean) => void): Disposable;
/** Calls your callback when the buffer's encoding has changed. */
onDidChangeEncoding(callback: (encoding: string) => void): Disposable;
/**
* Calls your callback when the grammar that interprets and colorizes the text
* has been changed. Immediately calls your callback with the current grammar.
*/
observeGrammar(callback: (grammar: Grammar) => void): Disposable;
/**
* Calls your callback when the grammar that interprets and colorizes the text
* has been changed.
*/
onDidChangeGrammar(callback: (grammar: Grammar) => void): Disposable;
/** Calls your callback when the result of ::isModified changes. */
onDidChangeModified(callback: (modified: boolean) => void): Disposable;
/**
* Calls your callback when the buffer's underlying file changes on disk at a
* moment when the result of ::isModified is true.
*/
onDidConflict(callback: () => void): Disposable;
/** Calls your callback before text has been inserted. */
onWillInsertText(callback: (event: { text: string, cancel(): void }) => void): Disposable;
/** Calls your callback after text has been inserted. */
onDidInsertText(callback: (event: { text: string }) => void): Disposable;
/**
* Calls your callback when a Cursor is added to the editor. Immediately calls
* your callback for each existing cursor.
*/
observeCursors(callback: (cursor: Cursor) => void): Disposable;
/** Calls your callback when a Cursor is added to the editor. */
onDidAddCursor(callback: (cursor: Cursor) => void): Disposable;
/** Calls your callback when a Cursor is removed from the editor. */
onDidRemoveCursor(callback: (cursor: Cursor) => void): Disposable;
/**
* Calls your callback when a Selection is added to the editor. Immediately
* calls your callback for each existing selection.
*/
observeSelections(callback: (selection: Selection) => void): Disposable;
/** Calls your callback when a Selection is added to the editor. */
onDidAddSelection(callback: (selection: Selection) => void): Disposable;
/** Calls your callback when a Selection is removed from the editor. */
onDidRemoveSelection(callback: (selection: Selection) => void): Disposable;
/**
* Calls your callback with each Decoration added to the editor. Calls your
* callback immediately for any existing decorations.
*/
observeDecorations(callback: (decoration: Decoration) => void): Disposable;
/** Calls your callback when a Decoration is added to the editor. */
onDidAddDecoration(callback: (decoration: Decoration) => void): Disposable;
/** Calls your callback when a Decoration is removed from the editor. */
onDidRemoveDecoration(callback: (decoration: Decoration) => void): Disposable;
/** Calls your callback when the placeholder text is changed. */
onDidChangePlaceholderText(callback: (placeholderText: string) => void): Disposable;
// File Details
/**
* Get the editor's title for display in other parts of the UI such as the tabs.
* If the editor's buffer is saved, its title is the file name. If it is unsaved,
* its title is "untitled".
*/
getTitle(): string;
/**
* Get unique title for display in other parts of the UI, such as the window title.
* If the editor's buffer is unsaved, its title is "untitled" If the editor's
* buffer is saved, its unique title is formatted as one of the following,
*
* "" when it is the only editing buffer with this file name.
* " — " when other buffers have this file name.
*/
getLongTitle(): string;
/** Returns the string path of this editor's text buffer. */
getPath(): string|undefined;
/** Returns boolean true if this editor has been modified. */
isModified(): boolean;
/** Returns boolean true if this editor has no content. */
isEmpty(): boolean;
/** Returns the string character set encoding of this editor's text buffer. */
getEncoding(): string;
/** Set the character set encoding to use in this editor's text buffer. */
setEncoding(encoding: string): void;
// File Operations
/**
* Saves the editor's text buffer.
* See TextBuffer::save for more details.
*/
save(): Promise<void>;
/**
* Saves the editor's text buffer as the given path.
* See TextBuffer::saveAs for more details.
*/
saveAs(filePath: string): Promise<void>;
// Reading Text
/** Returns a string representing the entire contents of the editor. */
getText(): string;
/** Get the text in the given range in buffer coordinates. */
getTextInBufferRange(range: RangeCompatible): string;
/** Returns a number representing the number of lines in the buffer. */
getLineCount(): number;
/**
* Returns a number representing the number of screen lines in the editor.
* This accounts for folds.
*/
getScreenLineCount(): number;
/**
* Returns a number representing the last zero-indexed buffer row number of
* the editor.
*/
getLastBufferRow(): number;
/**
* Returns a number representing the last zero-indexed screen row number of
* the editor.
*/
getLastScreenRow(): number;
/**
* Returns a string representing the contents of the line at the given
* buffer row.
*/
lineTextForBufferRow(bufferRow: number): string;
/**
* Returns a string representing the contents of the line at the given
* screen row.
*/
lineTextForScreenRow(screenRow: number): string;
/** Get the range of the paragraph surrounding the most recently added cursor. */
getCurrentParagraphBufferRange(): Range;
// Mutating Text
/** Replaces the entire contents of the buffer with the given string. */
setText(text: string, options?: ReadonlyEditOptions): void;
/** Set the text in the given Range in buffer coordinates. */
setTextInBufferRange(range: RangeCompatible, text: string, options?:
TextEditOptions & ReadonlyEditOptions): Range;
/* For each selection, replace the selected text with the given text. */
insertText(text: string, options?: TextInsertionOptions & ReadonlyEditOptions): Range|false;
/** For each selection, replace the selected text with a newline. */
insertNewline(options?: ReadonlyEditOptions): void;
/**
* For each selection, if the selection is empty, delete the character following
* the cursor. Otherwise delete the selected text.
*/
delete(options?: ReadonlyEditOptions): void;
/**
* For each selection, if the selection is empty, delete the character preceding
* the cursor. Otherwise delete the selected text.
*/
backspace(options?: ReadonlyEditOptions): void;
/**
* Mutate the text of all the selections in a single transaction.
* All the changes made inside the given function can be reverted with a single
* call to ::undo.
*/
mutateSelectedText(fn: (selection: Selection, index: number) => void): void;
/**
* For each selection, transpose the selected text.
* If the selection is empty, the characters preceding and following the cursor
* are swapped. Otherwise, the selected characters are reversed.
*/
transpose(options?: ReadonlyEditOptions): void;
/**
* Convert the selected text to upper case.
* For each selection, if the selection is empty, converts the containing word
* to upper case. Otherwise convert the selected text to upper case.
*/
upperCase(options?: ReadonlyEditOptions): void;
/**
* Convert the selected text to lower case.
* For each selection, if the selection is empty, converts the containing word
* to upper case. Otherwise convert the selected text to upper case.
*/
lowerCase(options?: ReadonlyEditOptions): void;
/**
* Toggle line comments for rows intersecting selections.
* If the current grammar doesn't support comments, does nothing.
*/
toggleLineCommentsInSelection(options?: ReadonlyEditOptions): void;
/** For each cursor, insert a newline at beginning the following line. */
insertNewlineBelow(options?: ReadonlyEditOptions): void;
/** For each cursor, insert a newline at the end of the preceding line. */
insertNewlineAbove(options?: ReadonlyEditOptions): void;
/**
* For each selection, if the selection is empty, delete all characters of the
* containing word that precede the cursor. Otherwise delete the selected text.
*/
deleteToBeginningOfWord(options?: ReadonlyEditOptions): void;
/**
* Similar to ::deleteToBeginningOfWord, but deletes only back to the previous
* word boundary.
*/
deleteToPreviousWordBoundary(options?: ReadonlyEditOptions): void;
/** Similar to ::deleteToEndOfWord, but deletes only up to the next word boundary. */
deleteToNextWordBoundary(options?: ReadonlyEditOptions): void;
/**
* For each selection, if the selection is empty, delete all characters of the
* containing subword following the cursor. Otherwise delete the selected text.
*/
deleteToBeginningOfSubword(options?: ReadonlyEditOptions): void;
/**
* For each selection, if the selection is empty, delete all characters of the
* containing subword following the cursor. Otherwise delete the selected text.
*/
deleteToEndOfSubword(options?: ReadonlyEditOptions): void;
/**
* For each selection, if the selection is empty, delete all characters of the
* containing line that precede the cursor. Otherwise delete the selected text.
*/
deleteToBeginningOfLine(options?: ReadonlyEditOptions): void;
/**
* For each selection, if the selection is not empty, deletes the selection
* otherwise, deletes all characters of the containing line following the cursor.
* If the cursor is already at the end of the line, deletes the following newline.
*/
deleteToEndOfLine(options?: ReadonlyEditOptions): void;
/**
* For each selection, if the selection is empty, delete all characters of the
* containing word following the cursor. Otherwise delete the selected text.
*/
deleteToEndOfWord(options?: ReadonlyEditOptions): void;
/** Delete all lines intersecting selections. */
deleteLine(options?: ReadonlyEditOptions): void;
// History
/** Undo the last change. */
undo(options?: ReadonlyEditOptions): void;
/** Redo the last change. */
redo(options?: ReadonlyEditOptions): void;
/**
* Batch multiple operations as a single undo/redo step.
* Any group of operations that are logically grouped from the perspective of undoing
* and redoing should be performed in a transaction. If you want to abort the transaction,
* call ::abortTransaction to terminate the function's execution and revert any changes
* performed up to the abortion.
*/
transact(fn: () => void): void;
/**
* Batch multiple operations as a single undo/redo step.
* Any group of operations that are logically grouped from the perspective of undoing
* and redoing should be performed in a transaction. If you want to abort the transaction,
* call ::abortTransaction to terminate the function's execution and revert any changes
* performed up to the abortion.
*/
transact(groupingInterval: number, fn: () => void): void;
/**
* Abort an open transaction, undoing any operations performed so far within the
* transaction.
*/
abortTransaction(): void;
/**
* Create a pointer to the current state of the buffer for use with ::revertToCheckpoint
* and ::groupChangesSinceCheckpoint.
*/
createCheckpoint(): number;
/**
* Revert the buffer to the state it was in when the given checkpoint was created.
* The redo stack will be empty following this operation, so changes since the checkpoint
* will be lost. If the given checkpoint is no longer present in the undo history, no
* changes will be made to the buffer and this method will return false.
*/
revertToCheckpoint(checkpoint: number): boolean;
/**
* Group all changes since the given checkpoint into a single transaction for purposes
* of undo/redo.
* If the given checkpoint is no longer present in the undo history, no grouping will be
* performed and this method will return false.
*/
groupChangesSinceCheckpoint(checkpoint: number): boolean;
// TextEditor Coordinates
/** Convert a position in buffer-coordinates to screen-coordinates. */
screenPositionForBufferPosition(bufferPosition: PointCompatible, options?:
{ clipDirection?: "backward"|"forward"|"closest"}): Point;
/** Convert a position in screen-coordinates to buffer-coordinates. */
bufferPositionForScreenPosition(bufferPosition: PointCompatible, options?:
{ clipDirection?: "backward"|"forward"|"closest"}): Point;
/** Convert a range in buffer-coordinates to screen-coordinates. */
screenRangeForBufferRange(bufferRange: RangeCompatible): Range;
/** Convert a range in screen-coordinates to buffer-coordinates. */
bufferRangeForScreenRange(screenRange: RangeCompatible): Range;
/** Clip the given Point to a valid position in the buffer. */
clipBufferPosition(bufferPosition: PointCompatible): Point;
/**
* Clip the start and end of the given range to valid positions in the buffer.
* See ::clipBufferPosition for more information.
*/
clipBufferRange(range: RangeCompatible): Range;
/** Clip the given Point to a valid position on screen. */
clipScreenPosition(screenPosition: PointCompatible, options?:
{ clipDirection?: "backward"|"forward"|"closest"}): Point;
/**
* Clip the start and end of the given range to valid positions on screen.
* See ::clipScreenPosition for more information.
*/
clipScreenRange(range: RangeCompatible, options?: { clipDirection?:
"backward"|"forward"|"closest"}): Range;
// Decorations
/**
* Add a decoration that tracks a DisplayMarker. When the marker moves, is
* invalidated, or is destroyed, the decoration will be updated to reflect
* the marker's state.
*/
decorateMarker(marker: DisplayMarker, decorationParams: DecorationOptions): Decoration;
/**
* Add a decoration to every marker in the given marker layer. Can be used to
* decorate a large number of markers without having to create and manage many
* individual decorations.
*/
decorateMarkerLayer(markerLayer: MarkerLayer|DisplayMarkerLayer,
decorationParams: DecorationLayerOptions): LayerDecoration;
/** Get all decorations. */
getDecorations(propertyFilter?: DecorationOptions): Decoration[];
/** Get all decorations of type 'line'. */
getLineDecorations(propertyFilter?: DecorationOptions): Decoration[];
/** Get all decorations of type 'line-number'. */
getLineNumberDecorations(propertyFilter?: DecorationOptions): Decoration[];
/** Get all decorations of type 'highlight'. */
getHighlightDecorations(propertyFilter?: DecorationOptions): Decoration[];
/** Get all decorations of type 'overlay'. */
getOverlayDecorations(propertyFilter?: DecorationOptions): Decoration[];
// Markers
/**
* Create a marker on the default marker layer with the given range in buffer coordinates.
* This marker will maintain its logical location as the buffer is changed, so if you mark
* a particular word, the marker will remain over that word even if the word's location
* in the buffer changes.
*/
markBufferRange(range: RangeCompatible, properties?: {
maintainHistory?: boolean,
reversed?: boolean,
invalidate?: "never"|"surround"|"overlap"|"inside"|"touch",
}): DisplayMarker;
/**
* Create a marker on the default marker layer with the given range in screen coordinates.
* This marker will maintain its logical location as the buffer is changed, so if you mark
* a particular word, the marker will remain over that word even if the word's location in
* the buffer changes.
*/
markScreenRange(range: RangeCompatible, properties?: {
maintainHistory?: boolean, reversed?: boolean,
invalidate?: "never"|"surround"|"overlap"|"inside" |"touch",
}): DisplayMarker;
/**
* Create a marker on the default marker layer with the given buffer position and no tail.
* To group multiple markers together in their own private layer, see ::addMarkerLayer.
*/
markBufferPosition(bufferPosition: PointCompatible, options?: {
invalidate?: "never"|"surround"|"overlap"|"inside"|"touch",
}): DisplayMarker;
/**
* Create a marker on the default marker layer with the given screen position and no tail.
* To group multiple markers together in their own private layer, see ::addMarkerLayer.
*/
markScreenPosition(screenPosition: PointCompatible, options?: {
invalidate?: "never"|"surround"|"overlap"|"inside"|"touch",
clipDirection?: "backward"|"forward"|"closest",
}): DisplayMarker;
/**
* Find all DisplayMarkers on the default marker layer that match the given properties.
*
* This method finds markers based on the given properties. Markers can be associated
* with custom properties that will be compared with basic equality. In addition, there
* are several special properties that will be compared with the range of the markers
* rather than their properties.
*/
findMarkers(properties: FindDisplayMarkerOptions): DisplayMarker[];
/** Create a marker layer to group related markers. */
addMarkerLayer(options?: { maintainHistory?: boolean, persistent?: boolean }):
DisplayMarkerLayer;
/** Get a DisplayMarkerLayer by id. */
getMarkerLayer(id: number): DisplayMarkerLayer|undefined;
/**
* Get the default DisplayMarkerLayer.
* All marker APIs not tied to an explicit layer interact with this default layer.
*/
getDefaultMarkerLayer(): DisplayMarkerLayer;
/** Get the DisplayMarker on the default layer for the given marker id. */
getMarker(id: number): DisplayMarker;
/** Get all DisplayMarkers on the default marker layer. Consider using ::findMarkers. */
getMarkers(): DisplayMarker[];
/** Get the number of markers in the default marker layer. */
getMarkerCount(): number;
// Cursors
/** Get the position of the most recently added cursor in buffer coordinates. */
getCursorBufferPosition(): Point;
/** Get the position of all the cursor positions in buffer coordinates. */
getCursorBufferPositions(): Point[];
/**
* Move the cursor to the given position in buffer coordinates.
* If there are multiple cursors, they will be consolidated to a single cursor.
*/
setCursorBufferPosition(position: PointCompatible, options?: { autoscroll?: boolean }):
void;
/** Get a Cursor at given screen coordinates Point. */
getCursorAtScreenPosition(position: PointCompatible): Cursor|undefined;
/** Get the position of the most recently added cursor in screen coordinates. */
getCursorScreenPosition(): Point;
/** Get the position of all the cursor positions in screen coordinates. */
getCursorScreenPositions(): Point[];
/**
* Move the cursor to the given position in screen coordinates.
* If there are multiple cursors, they will be consolidated to a single cursor.
*/
setCursorScreenPosition(position: PointCompatible, options?: { autoscroll?: boolean }):
void;
/** Add a cursor at the given position in buffer coordinates. */
addCursorAtBufferPosition(bufferPosition: PointCompatible, options?:
{ autoscroll?: boolean }): Cursor;
/** Add a cursor at the position in screen coordinates. */
addCursorAtScreenPosition(screenPosition: PointCompatible): Cursor;
/** Returns a boolean indicating whether or not there are multiple cursors. */
hasMultipleCursors(): boolean;
/** Move every cursor up one row in screen coordinates. */
moveUp(lineCount?: number): void;
/** Move every cursor down one row in screen coordinates. */
moveDown(lineCount?: number): void;
/** Move every cursor left one column. */
moveLeft(columnCount?: number): void;
/** Move every cursor right one column. */
moveRight(columnCount?: number): void;
/** Move every cursor to the beginning of its line in buffer coordinates. */
moveToBeginningOfLine(): void;
/** Move every cursor to the beginning of its line in screen coordinates. */
moveToBeginningOfScreenLine(): void;
/** Move every cursor to the first non-whitespace character of its line. */
moveToFirstCharacterOfLine(): void;
/** Move every cursor to the end of its line in buffer coordinates. */
moveToEndOfLine(): void;
/** Move every cursor to the end of its line in screen coordinates. */
moveToEndOfScreenLine(): void;
/** Move every cursor to the beginning of its surrounding word. */
moveToBeginningOfWord(): void;
/** Move every cursor to the end of its surrounding word. */
moveToEndOfWord(): void;
/**
* Move every cursor to the top of the buffer.
* If there are multiple cursors, they will be merged into a single cursor.
*/
moveToTop(): void;
/**
* Move every cursor to the bottom of the buffer.
* If there are multiple cursors, they will be merged into a single cursor.
*/
moveToBottom(): void;
/** Move every cursor to the beginning of the next word. */
moveToBeginningOfNextWord(): void;
/** Move every cursor to the previous word boundary. */
moveToPreviousWordBoundary(): void;
/** Move every cursor to the next word boundary. */
moveToNextWordBoundary(): void;
/** Move every cursor to the previous subword boundary. */
moveToPreviousSubwordBoundary(): void;
/** Move every cursor to the next subword boundary. */
moveToNextSubwordBoundary(): void;
/** Move every cursor to the beginning of the next paragraph. */
moveToBeginningOfNextParagraph(): void;
/** Move every cursor to the beginning of the previous paragraph. */
moveToBeginningOfPreviousParagraph(): void;
/** Returns the most recently added Cursor. */
getLastCursor(): Cursor;
/** Returns the word surrounding the most recently added cursor. */
getWordUnderCursor(options?: {
wordRegex?: RegExp,
includeNonWordCharacters?: boolean,
allowPrevious?: boolean,
}): string;
/** Get an Array of all Cursors. */
getCursors(): Cursor[];
/**
* Get all Cursors, ordered by their position in the buffer instead of the
* order in which they were added.
*/
getCursorsOrderedByBufferPosition(): Cursor[];
// Selections
/** Get the selected text of the most recently added selection. */
getSelectedText(): string;
/** Get the Range of the most recently added selection in buffer coordinates. */
getSelectedBufferRange(): Range;
/**
* Get the Ranges of all selections in buffer coordinates.
* The ranges are sorted by when the selections were added. Most recent at the end.
*/
getSelectedBufferRanges(): Range[];
/**
* Set the selected range in buffer coordinates. If there are multiple selections,
* they are reduced to a single selection with the given range.
*/
setSelectedBufferRange(bufferRange: RangeCompatible, options?:
{ reversed?: boolean, preserveFolds?: boolean}): void;
/**
* Set the selected ranges in buffer coordinates. If there are multiple selections,
* they are replaced by new selections with the given ranges.
*/
setSelectedBufferRanges(bufferRanges: ReadonlyArray<RangeCompatible>, options?:
{ reversed?: boolean, preserveFolds?: boolean}): void;
/** Get the Range of the most recently added selection in screen coordinates. */
getSelectedScreenRange(): Range;
/**
* Get the Ranges of all selections in screen coordinates.
* The ranges are sorted by when the selections were added. Most recent at the end.
*/
getSelectedScreenRanges(): Range[];
/**
* Set the selected range in screen coordinates. If there are multiple selections,
* they are reduced to a single selection with the given range.
*/
setSelectedScreenRange(screenRange: RangeCompatible, options?: { reversed?: boolean }):
void;
/**
* Set the selected ranges in screen coordinates. If there are multiple selections,
* they are replaced by new selections with the given ranges.
*/
setSelectedScreenRanges(screenRanges: ReadonlyArray<RangeCompatible>, options?:
{ reversed?: boolean }): void;
/** Add a selection for the given range in buffer coordinates. */
addSelectionForBufferRange(bufferRange: RangeCompatible, options?:
{ reversed?: boolean, preserveFolds?: boolean }): Selection;
/** Add a selection for the given range in screen coordinates. */
addSelectionForScreenRange(screenRange: RangeCompatible, options?:
{ reversed?: boolean, preserveFolds?: boolean }): Selection;
/**
* Select from the current cursor position to the given position in buffer coordinates.
* This method may merge selections that end up intersecting.
*/
selectToBufferPosition(position: PointCompatible): void;
/**
* Select from the current cursor position to the given position in screen coordinates.
* This method may merge selections that end up intersecting.
*/
selectToScreenPosition(position: PointCompatible): void;
/**
* Move the cursor of each selection one character upward while preserving the
* selection's tail position.
* This method may merge selections that end up intersecting.
*/
selectUp(rowCount?: number): void;
/**
* Move the cursor of each selection one character downward while preserving
* the selection's tail position.
* This method may merge selections that end up intersecting.
*/
selectDown(rowCount?: number): void;
/**
* Move the cursor of each selection one character leftward while preserving
* the selection's tail position.
* This method may merge selections that end up intersecting.
*/
selectLeft(columnCount?: number): void;
/**
* Move the cursor of each selection one character rightward while preserving
* the selection's tail position.
* This method may merge selections that end up intersecting.
*/
selectRight(columnCount?: number): void;
/**
* Select from the top of the buffer to the end of the last selection in the buffer.
* This method merges multiple selections into a single selection.
*/
selectToTop(): void;
/**
* Selects from the top of the first selection in the buffer to the end of the buffer.
* This method merges multiple selections into a single selection.
*/
selectToBottom(): void;
/**
* Select all text in the buffer.
* This method merges multiple selections into a single selection.
*/
selectAll(): void;
/**
* Move the cursor of each selection to the beginning of its line while preserving
* the selection's tail position.
* This method may merge selections that end up intersecting.
*/
selectToBeginningOfLine(): void;
/**
* Move the cursor of each selection to the first non-whitespace character of its
* line while preserving the selection's tail position. If the cursor is already
* on the first character of the line, move it to the beginning of the line.
* This method may merge selections that end up intersecting.
*/
selectToFirstCharacterOfLine(): void;
/**
* Move the cursor of each selection to the end of its line while preserving the
* selection's tail position.
* This method may merge selections that end up intersecting.
*/
selectToEndOfLine(): void;
/**
* Expand selections to the beginning of their containing word.
* Operates on all selections. Moves the cursor to the beginning of the containing
* word while preserving the selection's tail position.
*/
selectToBeginningOfWord(): void;
/**
* Expand selections to the end of their containing word.
* Operates on all selections. Moves the cursor to the end of the containing word
* while preserving the selection's tail position.
*/
selectToEndOfWord(): void;
/**
* For each cursor, select the containing line.
* This method merges selections on successive lines.
*/
selectLinesContainingCursors(): void;
/** Select the word surrounding each cursor. */
selectWordsContainingCursors(): void;
/**
* For each selection, move its cursor to the preceding subword boundary while
* maintaining the selection's tail position.
* This method may merge selections that end up intersecting.
*/
selectToPreviousSubwordBoundary(): void;
/**
* For each selection, move its cursor to the next subword boundary while maintaining
* the selection's tail position.
* This method may merge selections that end up intersecting.
*/
selectToNextSubwordBoundary(): void;
/**
* For each selection, move its cursor to the preceding word boundary while
* maintaining the selection's tail position.
* This method may merge selections that end up intersecting.
*/
selectToPreviousWordBoundary(): void;
/**
* For each selection, move its cursor to the next word boundary while maintaining
* the selection's tail position.
* This method may merge selections that end up intersecting.
*/
selectToNextWordBoundary(): void;
/**
* Expand selections to the beginning of the next word.
* Operates on all selections. Moves the cursor to the beginning of the next word
* while preserving the selection's tail position.
*/
selectToBeginningOfNextWord(): void;
/**
* Expand selections to the beginning of the next paragraph.
* Operates on all selections. Moves the cursor to the beginning of the next
* paragraph while preserving the selection's tail position.
*/
selectToBeginningOfNextParagraph(): void;
/**
* Expand selections to the beginning of the next paragraph.
* Operates on all selections. Moves the cursor to the beginning of the next
* paragraph while preserving the selection's tail position.
*/
selectToBeginningOfPreviousParagraph(): void;
/** For each selection, select the syntax node that contains that selection. */
selectLargerSyntaxNode(): void;
/** Undo the effect a preceding call to `::selectLargerSyntaxNode`. */
selectSmallerSyntaxNode(): void;
/** Select the range of the given marker if it is valid. */
selectMarker(marker: DisplayMarker): Range|undefined;
/** Get the most recently added Selection. */
getLastSelection(): Selection;
/** Get current Selections. */
getSelections(): Selection[];
/**
* Get all Selections, ordered by their position in the buffer instead of the
* order in which they were added.
*/
getSelectionsOrderedByBufferPosition(): Selection[];
// NOTE: this calls into Selection::intersectsBufferRange, which itself calls
// into Range::intersectsWith. Range::intersectsWith is one of the few functions
// which does NOT take a range-compatible array.
/** Determine if a given range in buffer coordinates intersects a selection. */
selectionIntersectsBufferRange(bufferRange: RangeLike): boolean;
// Searching and Replacing
/**
* Scan regular expression matches in the entire buffer, calling the given
* iterator function on each match.
*
* ::scan functions as the replace method as well via the replace.
*/
scan(regex: RegExp, options: ScanContextOptions, iterator: (params:
ContextualBufferScanResult) => void): void;
/**
* Scan regular expression matches in the entire buffer, calling the given
* iterator function on each match.
*
* ::scan functions as the replace method as well via the replace.
*/
scan(regex: RegExp, iterator: (params: BufferScanResult) => void): void;
/**
* Scan regular expression matches in a given range, calling the given iterator.
* function on each match.
*/
scanInBufferRange(regex: RegExp, range: RangeCompatible, iterator:
(params: BufferScanResult) => void): void;
/**
* Scan regular expression matches in a given range in reverse order, calling the
* given iterator function on each match.
*/
backwardsScanInBufferRange(regex: RegExp, range: RangeCompatible,
iterator: (params: BufferScanResult) => void): void;
// Tab Behavior
/** Returns a boolean indicating whether softTabs are enabled for this editor. */
getSoftTabs(): boolean;
/** Enable or disable soft tabs for this editor. */
setSoftTabs(softTabs: boolean): void;
/** Toggle soft tabs for this editor. */
toggleSoftTabs(): boolean;
/** Get the on-screen length of tab characters. */
getTabLength(): number;
/**
* Set the on-screen length of tab characters. Setting this to a number will
* override the editor.tabLength setting.
*/
setTabLength(tabLength: number): void;
/** Determine if the buffer uses hard or soft tabs. */
usesSoftTabs(): boolean|undefined;
/**
* Get the text representing a single level of indent.
* If soft tabs are enabled, the text is composed of N spaces, where N is the
* tab length. Otherwise the text is a tab character (\t).
*/
getTabText(): string;
// Soft Wrap Behavior
/** Determine whether lines in this editor are soft-wrapped. */
isSoftWrapped(): boolean;
/** Enable or disable soft wrapping for this editor. */
setSoftWrapped(softWrapped: boolean): boolean;
/** Toggle soft wrapping for this editor. */
toggleSoftWrapped(): boolean;
/** Gets the column at which column will soft wrap. */
getSoftWrapColumn(): number;
// Indentation
/**
* Get the indentation level of the given buffer row.
* Determines how deeply the given row is indented based on the soft tabs and tab
* length settings of this editor. Note that if soft tabs are enabled and the tab
* length is 2, a row with 4 leading spaces would have an indentation level of 2.
*/
indentationForBufferRow(bufferRow: number): number;
/**
* Set the indentation level for the given buffer row.
* Inserts or removes hard tabs or spaces based on the soft tabs and tab length settings
* of this editor in order to bring it to the given indentation level. Note that if soft
* tabs are enabled and the tab length is 2, a row with 4 leading spaces would have an
* indentation level of 2.
*/
setIndentationForBufferRow(bufferRow: number, newLevel: number, options?:
{ preserveLeadingWhitespace?: boolean }): void;
/** Indent rows intersecting selections by one level. */
indentSelectedRows(options?: ReadonlyEditOptions): void;
/** Outdent rows intersecting selections by one level. */
outdentSelectedRows(options?: ReadonlyEditOptions): void;
/**
* Get the indentation level of the given line of text.
* Determines how deeply the given line is indented based on the soft tabs and tab length
* settings of this editor. Note that if soft tabs are enabled and the tab length is 2,
* a row with 4 leading spaces would have an indentation level of 2.
*/
indentLevelForLine(line: string): number;
/** Indent rows intersecting selections based on the grammar's suggested indent level. */
autoIndentSelectedRows(options?: ReadonlyEditOptions): void;
// Grammars
/** Get the current Grammar of this editor. */
getGrammar(): Grammar;
// Managing Syntax Scopes
/**
* Returns a ScopeDescriptor that includes this editor's language.
* e.g. [".source.ruby"], or [".source.coffee"].
*/
getRootScopeDescriptor(): ScopeDescriptor;
/** Get the syntactic scopeDescriptor for the given position in buffer coordinates. */
scopeDescriptorForBufferPosition(bufferPosition: PointCompatible): ScopeDescriptor;
/**
* Get the syntactic tree {ScopeDescriptor} for the given position in buffer
* coordinates or the syntactic {ScopeDescriptor} for TextMate language mode
*/
syntaxTreeScopeDescriptorForBufferPosition(bufferPosition: PointCompatible): ScopeDescriptor;
/**
* Get the range in buffer coordinates of all tokens surrounding the cursor
* that match the given scope selector.
*/
bufferRangeForScopeAtCursor(scopeSelector: string): Range;
/** Determine if the given row is entirely a comment. */
isBufferRowCommented(bufferRow: number): boolean;
// Clipboard Operations
/** For each selection, copy the selected text. */
copySelectedText(): void;
/** For each selection, cut the selected text. */
cutSelectedText(options?: ReadonlyEditOptions): void;
/**
* For each selection, replace the selected text with the contents of the clipboard.
* If the clipboard contains the same number of selections as the current editor,
* each selection will be replaced with the content of the corresponding clipboard
* selection text.
*/
pasteText(options?: TextInsertionOptions & ReadonlyEditOptions): void;
/**
* For each selection, if the selection is empty, cut all characters of the
* containing screen line following the cursor. Otherwise cut the selected text.
*/
cutToEndOfLine(options?: ReadonlyEditOptions): void;
/**
* For each selection, if the selection is empty, cut all characters of the
* containing buffer line following the cursor. Otherwise cut the selected text.
*/
cutToEndOfBufferLine(options?: ReadonlyEditOptions): void;
// Folds
/**
* Fold the most recent cursor's row based on its indentation level.
* The fold will extend from the nearest preceding line with a lower indentation
* level up to the nearest following row with a lower indentation level.
*/
foldCurrentRow(): void;
/** Unfold the most recent cursor's row by one level. */
unfoldCurrentRow(): void;
/**
* Fold the given row in buffer coordinates based on its indentation level.
* If the given row is foldable, the fold will begin there. Otherwise, it will
* begin at the first foldable row preceding the given row.
*/
foldBufferRow(bufferRow: number): void;
/** Unfold all folds containing the given row in buffer coordinates. */
unfoldBufferRow(bufferRow: number): void;
/** For each selection, fold the rows it intersects. */
foldSelectedLines(): void;
/** Fold all foldable lines. */
foldAll(): void;
/** Unfold all existing folds. */
unfoldAll(): void;
/**
* Fold all foldable lines at the given indent level.
* @param level A zero-indexed number.
*/
foldAllAtIndentLevel(level: number): void;
/**
* Determine whether the given row in buffer coordinates is foldable.
* A foldable row is a row that starts a row range that can be folded.
*/
isFoldableAtBufferRow(bufferRow: number): boolean;
/**
* Determine whether the given row in screen coordinates is foldable.
* A foldable row is a row that starts a row range that can be folded.
*/
isFoldableAtScreenRow(bufferRow: number): boolean;
/** Fold the given buffer row if it isn't currently folded, and unfold it otherwise. */
toggleFoldAtBufferRow(bufferRow: number): void;
/** Determine whether the most recently added cursor's row is folded. */
isFoldedAtCursorRow(): boolean;
/** Determine whether the given row in buffer coordinates is folded. */
isFoldedAtBufferRow(bufferRow: number): boolean;
/** Determine whether the given row in screen coordinates is folded. */
isFoldedAtScreenRow(screenRow: number): boolean;
// Gutters
/** Add a custom Gutter. */
addGutter(options: GutterOptions): Gutter;
/** Get this editor's gutters. */
getGutters(): Gutter[];
/** Get the gutter with the given name. */
gutterWithName(name: string): Gutter|null;
// Scrolling the TextEditor
/** Scroll the editor to reveal the most recently added cursor if it is off-screen. */
scrollToCursorPosition(options?: { center?: boolean }): void;
/** Scrolls the editor to the given buffer position. */
scrollToBufferPosition(bufferPosition: PointCompatible, options?: { center?: boolean }):
void;
/** Scrolls the editor to the given screen position. */
scrollToScreenPosition(screenPosition: PointCompatible, options?: { center?: boolean }):
void;
// TextEditor Rendering
/** Retrieves the rendered line height in pixels. */
getLineHeightInPixels(): number;
/** Retrieves the greyed out placeholder of a mini editor. */
getPlaceholderText(): string;
/**
* Set the greyed out placeholder of a mini editor. Placeholder text will be
* displayed when the editor has no content.
*/
setPlaceholderText(placeholderText: string): void;
/** Undocumented: Buffer range for syntax scope at position */
bufferRangeForScopeAtPosition(scope: string, point: PointCompatible): Range;
/** Undocumented: Get syntax token at buffer position */
tokenForBufferPosition(pos: PointCompatible): {value: string, scopes: string[]};
}
export interface GutterOptions {
/** (required) A unique String to identify this gutter. */
name: string;
/**
* A Number that determines stacking order between gutters.
* Lower priority items are forced closer to the edges of the window. (default: -100)
*/
priority?: number;
/**
* Boolean specifying whether the gutter is visible initially after being created.
* (default: true)
*/
visible?: boolean;
/**
* String specifying the type of gutter to create.
* 'decorated' gutters are useful as a destination for decorations created with
* Gutter::decorateMarker.
* 'line-number' gutters.
*/
type?: 'decorated' | 'line-number';
/** String added to the CSS classnames of the gutter's root DOM element. */
class?: string;
/**
* Function called by a 'line-number' gutter to generate the label for each
* line number element. Should return a String that will be used to label the
* corresponding line.
*/
labelFn?: (lineData: LineDataExtended) => string;
/**
* Function to be called when a mousedown event is received by a line-number
* element within this type: 'line-number' Gutter. If unspecified, the default
* behavior is to select the clicked buffer row.
*/
onMouseDown?: (lineData: LineData) => void;
/**
* Function to be called when a mousemove event occurs on a line-number
* element within within this type: 'line-number' Gutter.
*/
onMouseMove?: (lineData: LineData) => void;
}
export interface LineData {
/** Number indicating the zero-indexed buffer index of a line. */
bufferRow: number;
/** Number indicating the zero-indexed screen index. */
screenRow: number;
}
/** Object containing information about each line to label. */
export interface LineDataExtended extends LineData {
/** Boolean that is true if a fold may be created here. */
foldable: boolean;
/** Boolean if this screen row is the soft-wrapped continuation of the same buffer row. */
softWrapped: boolean;
/** Number the maximum number of digits necessary to represent any known screen row. */
maxDigits: number;
}
export interface PixelPosition {
left: number;
top: number;
}
/**
* Undocumented: Rendering component for TextEditor
*/
export interface TextEditorComponent {
/** Does not clip screenPosition, unlike similar method on TextEditorElement */
pixelPositionForScreenPosition(screenPosition: PointLike): PixelPosition;
screenPositionForPixelPosition(pos: PixelPosition): Point;
pixelPositionForMouseEvent(event: {
clientX: number, clientY: number
}): PixelPosition;
screenPositionForMouseEvent(event: {clientX: number, clientY: number}): Point;
}
/**
* Undocumented: Custom HTML elemnent for TextEditor, atom-text-editor
*/
export interface TextEditorElement extends HTMLElement {
getModel(): TextEditor;
getComponent(): TextEditorComponent;
/**
* Extended: Get a promise that resolves the next time the element's
* DOM is updated in any way.
*/
getNextUpdatePromise(): Promise<void>;
/** Extended: get the width of an `x` character displayed in this element. */
getBaseCharacterWidth(): number;
/** Essential: Scrolls the editor to the top. */
scrollToTop(): void;
/** Essential: Scrolls the editor to the bottom. */
scrollToBottom(): void;
setScrollTop(scrollTop: number): void;
getScrollTop(): number;
setScrollLeft(scrollLeft: number): void;
getScrollLeft(): number;
getScrollHeight(): number;
/** Extended: Converts a buffer position to a pixel position. */
pixelPositionForBufferPosition(bufferPosition: PointLike): PixelPosition;
/** Extended: Converts a screen position to a pixel position. */
pixelPositionForScreenPosition(screenPosition: PointLike): PixelPosition;
// Event subscription
onDidChangeScrollTop(callback: (scrollTop: number) => void): Disposable;
onDidChangeScrollLeft(callback: (scrollLeft: number) => void): Disposable;
/** Called when the editor is attached to the DOM. */
onDidAttach(callback: () => void): Disposable;
/** Called when the editor is detached from the DOM. */
onDidDetach(callback: () => void): Disposable;
}
/** Experimental: This global registry tracks registered TextEditors. */
export interface TextEditorRegistry {
// Managing Text Editors
/** Remove all editors from the registry. */
clear(): void;
/** Register a TextEditor. */
add(editor: TextEditor): Disposable;
/** Remove the given TextEditor from the registry. */
remove(editor: TextEditor): boolean;
/** Keep a TextEditor's configuration in sync with Atom's settings. */
maintainConfig(editor: TextEditor): Disposable;
/**
* Set a TextEditor's grammar based on its path and content, and continue
* to update its grammar as gramamrs are added or updated, or the editor's
* file path changes.
*/
maintainGrammar(editor: TextEditor): Disposable;
/**
* Force a TextEditor to use a different grammar than the one that would
* otherwise be selected for it.
*/
setGrammarOverride(editor: TextEditor, scopeName: string): void;
/**
* Retrieve the grammar scope name that has been set as a grammar override
* for the given TextEditor.
*/
getGrammarOverride(editor: TextEditor): string|null;
/** Remove any grammar override that has been set for the given TextEditor. */
clearGrammarOverride(editor: TextEditor): void;
// Event Subscription
/** Invoke the given callback with all the current and future registered TextEditors. */
observe(callback: (editor: TextEditor) => void): Disposable;
}
export type TooltipPlacement =
|"top"|"bottom"|"left"|"right"
|"auto"|"auto top"|"auto bottom"|"auto left"|"auto right";
/** Associates tooltips with HTML elements or selectors. */
export interface TooltipManager {
/** Add a tooltip to the given element. */
add(target: HTMLElement | JQueryCompatible, options: {
item?: object,
} | {
title?: string|(() => string),
html?: boolean,
keyBindingCommand?: string,
keyBindingTarget?: HTMLElement
} & {
class?: string;
placement?: TooltipPlacement|(() => TooltipPlacement),
trigger?: "click"|"hover"|"focus"|"manual",
delay?: { show: number, hide: number }
}): Disposable;
/** Find the tooltips that have been applied to the given element. */
findTooltips(target: HTMLElement): Tooltip[];
}
/**
* ViewRegistry handles the association between model and view types in Atom.
* We call this association a View Provider. As in, for a given model, this class
* can provide a view via ::getView, as long as the model/view association was
* registered via ::addViewProvider.
*/
export interface ViewRegistry {
/**
* Add a provider that will be used to construct views in the workspace's view
* layer based on model objects in its model layer.
*/
addViewProvider(createView: (model: object) => HTMLElement|undefined): Disposable;
/**
* Add a provider that will be used to construct views in the workspace's view
* layer based on model objects in its model layer.
*/
// tslint:disable-next-line:no-any
addViewProvider<T>(modelConstructor: { new (...args: any[]): T }, createView:
(instance: T) => HTMLElement|undefined): Disposable;
/** Get the view associated with an object in the workspace. */
getView(obj: TextEditor): TextEditorElement;
getView(obj: object): HTMLElement;
}
/** Represents the state of the user interface for the entire window. */
export interface Workspace {
// Event Subscription
/**
* Invoke the given callback with all current and future text editors in
* the workspace.
*/
observeTextEditors(callback: (editor: TextEditor) => void): Disposable;
/**
* Invoke the given callback with all current and future panes items in the
* workspace.
*/
observePaneItems(callback: (item: object) => void): Disposable;
/** Invoke the given callback when the active pane item changes. */
onDidChangeActivePaneItem(callback: (item: object) => void): Disposable;
/** Invoke the given callback when the active pane item stops changing. */
onDidStopChangingActivePaneItem(callback: (item: object) => void): Disposable;
/**
* Invoke the given callback when a text editor becomes the active text editor and
* when there is no longer an active text editor.
*/
onDidChangeActiveTextEditor(callback: (editor?: TextEditor) => void): Disposable;
/**
* Invoke the given callback with the current active pane item and with all
* future active pane items in the workspace.
*/
observeActivePaneItem(callback: (item: object) => void): Disposable;
/**
* Invoke the given callback with the current active text editor (if any), with all
* future active text editors, and when there is no longer an active text editor.
*/
observeActiveTextEditor(callback: (editor?: TextEditor) => void): Disposable;
/**
* Invoke the given callback whenever an item is opened. Unlike ::onDidAddPaneItem,
* observers will be notified for items that are already present in the workspace
* when they are reopened.
*/
onDidOpen(callback: (event: PaneItemOpenedEvent) => void): Disposable;
/** Invoke the given callback when a pane is added to the workspace. */
onDidAddPane(callback: (event: { pane: Pane }) => void): Disposable;
/** Invoke the given callback before a pane is destroyed in the workspace. */
onWillDestroyPane(callback: (event: { pane: Pane }) => void): Disposable;
/** Invoke the given callback when a pane is destroyed in the workspace. */
onDidDestroyPane(callback: (event: { pane: Pane }) => void): Disposable;
/** Invoke the given callback with all current and future panes in the workspace. */
observePanes(callback: (pane: Pane) => void): Disposable;
/** Invoke the given callback when the active pane changes. */
onDidChangeActivePane(callback: (pane: Pane) => void): Disposable;
/**
* Invoke the given callback with the current active pane and when the
* active pane changes.
*/
observeActivePane(callback: (pane: Pane) => void): Disposable;
/** Invoke the given callback when a pane item is added to the workspace. */
onDidAddPaneItem(callback: (event: PaneItemObservedEvent) => void): Disposable;
/**
* Invoke the given callback when a pane item is about to be destroyed,
* before the user is prompted to save it.
* @param callback The function to be called before pane items are destroyed.
* If this function returns a Promise, then the item will not be destroyed
* until the promise resolves.
*/
onWillDestroyPaneItem(callback: (event: PaneItemObservedEvent) => void|Promise<void>):
Disposable;
/** Invoke the given callback when a pane item is destroyed. */
onDidDestroyPaneItem(callback: (event: PaneItemObservedEvent) => void): Disposable;
/** Invoke the given callback when a text editor is added to the workspace. */
onDidAddTextEditor(callback: (event: TextEditorObservedEvent) => void): Disposable;
// Opening
/**
* Opens the given URI in Atom asynchronously. If the URI is already open,
* the existing item for that URI will be activated. If no URI is given, or
* no registered opener can open the URI, a new empty TextEditor will be created.
*/
open(uri: string, options?: WorkspaceOpenOptions): Promise<object>;
/**
* Opens the given item in Atom asynchronously. If the item is already open,
* the existing item will be activated. If no item is given, a new empty TextEditor
* will be created.
*/
open<T extends ViewModel = ViewModel>(item: T, options?: WorkspaceOpenOptions):
Promise<T>;
/**
* Opens the given URI in Atom asynchronously. If the URI is already open,
* the existing item for that URI will be activated. If no URI is given, or
* no registered opener can open the URI, a new empty TextEditor will be created.
*/
open(): Promise<TextEditor>;
/**
* Search the workspace for items matching the given URI and hide them.
* Returns a boolean indicating whether any items were found (and hidden).
*/
hide(itemOrURI: object|string): boolean;
/**
* Search the workspace for items matching the given URI. If any are found,
* hide them. Otherwise, open the URL.
* Returns a Promise that resolves when the item is shown or hidden.
*/
toggle(itemOrURI: object|string): Promise<void>;
/**
* Creates a new item that corresponds to the provided URI.
* If no URI is given, or no registered opener can open the URI, a new empty TextEditor
* will be created.
*/
createItemForURI(uri: string): Promise<object|TextEditor>;
/** Returns a boolean that is true if object is a TextEditor. */
isTextEditor(object: object): object is TextEditor;
/**
* Asynchronously reopens the last-closed item's URI if it hasn't already
* been reopened.
*/
reopenItem(): Promise<object|undefined>;
/** Register an opener for a URI. */
addOpener(opener: (uri: string, options?: WorkspaceOpenOptions) =>
ViewModel|undefined): Disposable;
/** Create a new text editor. */
buildTextEditor(params: object): TextEditor;
// Pane Items
/** Get all pane items in the workspace. */
getPaneItems(): object[];
/** Get the active Pane's active item. */
getActivePaneItem(): object;
/** Get all text editors in the workspace. */
getTextEditors(): TextEditor[];
/** Get the workspace center's active item if it is a TextEditor. */
getActiveTextEditor(): TextEditor|undefined;
// Panes
/** Get the most recently focused pane container. */
getActivePaneContainer(): Dock|WorkspaceCenter;
/** Get all panes in the workspace. */
getPanes(): Pane[];
/** Get the active Pane. */
getActivePane(): Pane;
/** Make the next pane active. */
activateNextPane(): boolean;
/** Make the previous pane active. */
activatePreviousPane(): boolean;
/** Get the first pane container that contains an item with the given URI. */
paneContainerForURI(uri: string): Dock|WorkspaceCenter|undefined;
/** Get the first pane container that contains the given item. */
paneContainerForItem(item: object): Dock|WorkspaceCenter|undefined;
/** Get the first Pane with an item for the given URI. */
paneForURI(uri: string): Pane|undefined;
/** Get the Pane containing the given item. */
paneForItem(item: object): Pane|undefined;
// Pane Locations
/** Get the WorkspaceCenter at the center of the editor window. */
getCenter(): WorkspaceCenter;
/** Get the Dock to the left of the editor window. */
getLeftDock(): Dock;
/** Get the Dock to the right of the editor window. */
getRightDock(): Dock;
/** Get the Dock below the editor window. */
getBottomDock(): Dock;
/** Returns all Pane containers. */
getPaneContainers(): [WorkspaceCenter, Dock, Dock, Dock];
// Panels
/** Get an Array of all the panel items at the bottom of the editor window. */
getBottomPanels(): Panel[];
/** Adds a panel item to the bottom of the editor window. */
addBottomPanel<T>(options: {
item: T,
visible?: boolean,
priority?: number,
}): Panel<T>;
/** Get an Array of all the panel items to the left of the editor window. */
getLeftPanels(): Panel[];
/** Adds a panel item to the left of the editor window. */
addLeftPanel<T>(options: {
item: T,
visible?: boolean,
priority?: number,
}): Panel<T>;
/** Get an Array of all the panel items to the right of the editor window. */
getRightPanels(): Panel[];
/** Adds a panel item to the right of the editor window. */
addRightPanel<T>(options: {
item: T,
visible?: boolean,
priority?: number,
}): Panel<T>;
/** Get an Array of all the panel items at the top of the editor window. */
getTopPanels(): Panel[];
/** Adds a panel item to the top of the editor window above the tabs. */
addTopPanel<T>(options: {
item: T,
visible?: boolean,
priority?: number
}): Panel<T>;
/** Get an Array of all the panel items in the header. */
getHeaderPanels(): Panel[];
/** Adds a panel item to the header. */
addHeaderPanel<T>(options: {
item: T,
visible?: boolean,
priority?: number,
}): Panel<T>;
/** Get an Array of all the panel items in the footer. */
getFooterPanels(): Panel[];
/** Adds a panel item to the footer. */
addFooterPanel<T>(options: {
item: T,
visible?: boolean,
priority?: number,
}): Panel<T>;
/** Get an Array of all the modal panel items. */
getModalPanels(): Panel[];
/** Adds a panel item as a modal dialog. */
addModalPanel<T>(options: {
item: T,
visible?: boolean,
priority?: number,
autoFocus?: boolean,
}): Panel<T>;
/**
* Returns the Panel associated with the given item or null when the item
* has no panel.
*/
panelForItem<T>(item: T): Panel<T>|null;
// Searching and Replacing
/** Performs a search across all files in the workspace. */
scan(regex: RegExp, iterator: (result: ScandalResult) => void):
CancellablePromise<string|null>;
/** Performs a search across all files in the workspace. */
scan(regex: RegExp, options: WorkspaceScanOptions, iterator:
(result: ScandalResult) => void): CancellablePromise<string|null>;
/** Performs a replace across all the specified files in the project. */
replace(regex: RegExp, replacementText: string, filePaths: ReadonlyArray<string>,
iterator: (result: { filePath: string|undefined, replacements: number }) => void):
Promise<void>;
}
// https://github.com/atom/atom/blob/master/src/workspace-center.js
/** The central container for the editor window capable of holding items. */
export interface WorkspaceCenter {
// Event Subscription
/**
* Invoke the given callback with all current and future text editors in the
* workspace center.
*/
observeTextEditors(callback: (editor: TextEditor) => void): Disposable;
/**
* Invoke the given callback with all current and future panes items in the
* workspace center.
*/
observePaneItems(callback: (item: object) => void): Disposable;
/** Invoke the given callback when the active pane item changes. */
onDidChangeActivePaneItem(callback: (item: object) => void): Disposable;
/** Invoke the given callback when the active pane item stops changing. */
onDidStopChangingActivePaneItem(callback: (item: object) => void): Disposable;
/**
* Invoke the given callback with the current active pane item and with all future
* active pane items in the workspace center.
*/
observeActivePaneItem(callback: (item: object) => void): Disposable;
/** Invoke the given callback when a pane is added to the workspace center. */
onDidAddPane(callback: (event: { pane: Pane }) => void): Disposable;
/** Invoke the given callback before a pane is destroyed in the workspace center. */
onWillDestroyPane(callback: (event: { pane: Pane }) => void): Disposable;
/** Invoke the given callback when a pane is destroyed in the workspace center. */
onDidDestroyPane(callback: (event: { pane: Pane }) => void): Disposable;
/** Invoke the given callback with all current and future panes in the workspace center. */
observePanes(callback: (pane: Pane) => void): Disposable;
/** Invoke the given callback when the active pane changes. */
onDidChangeActivePane(callback: (pane: Pane) => void): Disposable;
/**
* Invoke the given callback with the current active pane and when the active pane
* changes.
*/
observeActivePane(callback: (pane: Pane) => void): Disposable;
/** Invoke the given callback when a pane item is added to the workspace center. */
onDidAddPaneItem(callback: (event: PaneItemObservedEvent) => void): Disposable;
/**
* Invoke the given callback when a pane item is about to be destroyed, before the user
* is prompted to save it.
* @param callback The function to be called before pane items are destroyed.
* If this function returns a Promise, then the item will not be destroyed
* until the promise resolves.
*/
onWillDestroyPaneItem(callback: (event: PaneItemObservedEvent) => void|Promise<void>):
Disposable;
/** Invoke the given callback when a pane item is destroyed. */
onDidDestroyPaneItem(callback: (event: PaneItemObservedEvent) => void): Disposable;
/** Invoke the given callback when a text editor is added to the workspace center. */
onDidAddTextEditor(callback: (event: TextEditorObservedEvent) => void): Disposable;
// Pane Items
/** Get all pane items in the workspace center. */
getPaneItems(): object[];
/** Get the active Pane's active item. */
getActivePaneItem(): object|undefined;
/** Get all text editors in the workspace center. */
getTextEditors(): TextEditor[];
/** Get the active item if it is an TextEditor. */
getActiveTextEditor(): TextEditor|undefined;
/** Save all pane items. */
saveAll(): void;
// Panes
/** Get all panes in the workspace center. */
getPanes(): Pane[];
/** Get the active Pane. */
getActivePane(): Pane;
/** Make the next pane active. */
activateNextPane(): void;
/** Make the previous pane active. */
activatePreviousPane(): void;
/** Retrieve the Pane associated with the given URI. */
paneForURI(uri: string): Pane|undefined;
/** Retrieve the Pane associated with the given item. */
paneForItem(item: object): Pane|undefined;
/** Destroy (close) the active pane. */
destroyActivePane(): void;
}
// Extended Classes ===========================================================
/**
* A wrapper which provides standard error/output line buffering for
* Node's ChildProcess.
*/
export class BufferedProcess {
readonly process?: ChildProcess;
constructor(options: ProcessOptions);
// Event Subscription
/**
* Will call your callback when an error will be raised by the process. Usually
* this is due to the command not being available or not on the PATH. You can
* call handle() on the object passed to your callback to indicate that you
* have handled this error.
*/
onWillThrowError(callback: (errorObject: HandleableErrorEvent) =>
void): Disposable;
// Helper Methods
/** Terminate the process. */
kill(): void;
/** Runs the process. */
start(): void;
}
/**
* Like BufferedProcess, but accepts a Node script as the command to run.
* This is necessary on Windows since it doesn't support shebang #! lines.
*/
export class BufferedNodeProcess extends BufferedProcess {
/** Runs the given Node script by spawning a new child process. */
constructor(options: NodeProcessOptions);
}
/** Represents the clipboard used for copying and pasting in Atom. */
export interface Clipboard {
/** Write the given text to the clipboard. */
write(text: string, metadata?: object): void;
/** Read the text from the clipboard. */
read(): string;
/**
* Read the text from the clipboard and return both the text and the associated
* metadata.
*/
readWithMetadata(): { text: string, metadata: object };
}
/** Provides a registry for commands that you'd like to appear in the context menu. */
export interface ContextMenuManager {
/** Add context menu items scoped by CSS selectors. */
add(itemsBySelector: { [key: string]: ReadonlyArray<ContextMenuOptions> }): Disposable;
}
/**
* The Cursor class represents the little blinking line identifying where text
* can be inserted.
*/
export interface Cursor {
// Event Subscription
/** Calls your callback when the cursor has been moved. */
onDidChangePosition(callback: (event: CursorPositionChangedEvent) => void): Disposable;
/** Calls your callback when the cursor is destroyed. */
onDidDestroy(callback: () => void): Disposable;
/** Calls your callback when the cursor's visibility has changed. */
onDidChangeVisibility(callback: (visibility: boolean) => void): Disposable;
// Managing Cursor Position
/** Moves a cursor to a given screen position. */
setScreenPosition(screenPosition: PointCompatible, options?: { autoscroll?: boolean }):
void;
/** Returns the screen position of the cursor as a Point. */
getScreenPosition(): Point;
/** Moves a cursor to a given buffer position. */
setBufferPosition(bufferPosition: PointCompatible, options?: { autoscroll?: boolean }):
void;
/** Returns the current buffer position as an Array. */
getBufferPosition(): Point;
/** Returns the cursor's current screen row. */
getScreenRow(): number;
/** Returns the cursor's current screen column. */
getScreenColumn(): number;
/** Retrieves the cursor's current buffer row. */
getBufferRow(): number;
/** Returns the cursor's current buffer column. */
getBufferColumn(): number;
/** Returns the cursor's current buffer row of text excluding its line ending. */
getCurrentBufferLine(): string;
/** Returns whether the cursor is at the start of a line. */
isAtBeginningOfLine(): boolean;
/** Returns whether the cursor is on the line return character. */
isAtEndOfLine(): boolean;
// Cursor Position Details
/**
* Returns the underlying DisplayMarker for the cursor. Useful with overlay
* Decorations.
*/
getMarker(): DisplayMarker;
/**
* Identifies if the cursor is surrounded by whitespace.
* "Surrounded" here means that the character directly before and after the cursor
* are both whitespace.
*/
isSurroundedByWhitespace(): boolean;
/** This method returns false if the character before or after the cursor is whitespace. */
isBetweenWordAndNonWord(): boolean;
/** Returns whether this cursor is between a word's start and end. */
isInsideWord(options?: { wordRegex?: RegExp }): boolean;
/** Returns the indentation level of the current line. */
getIndentLevel(): number;
/** Retrieves the scope descriptor for the cursor's current position. */
getScopeDescriptor(): ScopeDescriptor;
/** Retrieves the syntax tree scope descriptor for the cursor's current position. */
getSyntaxTreeScopeDescriptor(): ScopeDescriptor;
/**
* Returns true if this cursor has no non-whitespace characters before its
* current position.
*/
hasPrecedingCharactersOnLine(): boolean;
/**
* Identifies if this cursor is the last in the TextEditor.
* "Last" is defined as the most recently added cursor.
*/
isLastCursor(): boolean;
// Moving the Cursor
/** Moves the cursor up one screen row. */
moveUp(rowCount?: number, options?: { moveToEndOfSelection?: boolean }): void;
/** Moves the cursor down one screen row. */
moveDown(rowCount?: number, options?: { moveToEndOfSelection?: boolean }): void;
/** Moves the cursor left one screen column. */
moveLeft(columnCount?: number, options?: { moveToEndOfSelection?: boolean }): void;
/** Moves the cursor right one screen column. */
moveRight(columnCount?: number, options?: { moveToEndOfSelection?: boolean }): void;
/** Moves the cursor to the top of the buffer. */
moveToTop(): void;
/** Moves the cursor to the bottom of the buffer. */
moveToBottom(): void;
/** Moves the cursor to the beginning of the line. */
moveToBeginningOfScreenLine(): void;
/** Moves the cursor to the beginning of the buffer line. */
moveToBeginningOfLine(): void;
/** Moves the cursor to the beginning of the first character in the line. */
moveToFirstCharacterOfLine(): void;
/** Moves the cursor to the end of the line. */
moveToEndOfScreenLine(): void;
/** Moves the cursor to the end of the buffer line. */
moveToEndOfLine(): void;
/** Moves the cursor to the beginning of the word. */
moveToBeginningOfWord(): void;
/** Moves the cursor to the end of the word. */
moveToEndOfWord(): void;
/** Moves the cursor to the beginning of the next word. */
moveToBeginningOfNextWord(): void;
/** Moves the cursor to the previous word boundary. */
moveToPreviousWordBoundary(): void;
/** Moves the cursor to the next word boundary. */
moveToNextWordBoundary(): void;
/** Moves the cursor to the previous subword boundary. */
moveToPreviousSubwordBoundary(): void;
/** Moves the cursor to the next subword boundary. */
moveToNextSubwordBoundary(): void;
/** Moves the cursor to the beginning of the buffer line, skipping all whitespace. */
skipLeadingWhitespace(): void;
/** Moves the cursor to the beginning of the next paragraph. */
moveToBeginningOfNextParagraph(): void;
/** Moves the cursor to the beginning of the previous paragraph. */
moveToBeginningOfPreviousParagraph(): void;
// Local Positions and Ranges
/**
* Returns buffer position of previous word boundary. It might be on the current
* word, or the previous word.
*/
getPreviousWordBoundaryBufferPosition(options?: { wordRegex?: RegExp }): Point;
/**
* Returns buffer position of the next word boundary. It might be on the current
* word, or the previous word.
*/
getNextWordBoundaryBufferPosition(options?: { wordRegex?: RegExp }): Point;
/** Retrieves the buffer position of where the current word starts. */
getBeginningOfCurrentWordBufferPosition(options?: {
wordRegex?: RegExp,
includeNonWordCharacters?: boolean,
allowPrevious?: boolean
}): Point;
/** Retrieves the buffer position of where the current word ends. */
getEndOfCurrentWordBufferPosition(options?: {
wordRegex?: RegExp,
includeNonWordCharacters?: boolean
}): Point;
/** Retrieves the buffer position of where the next word starts. */
getBeginningOfNextWordBufferPosition(options?: { wordRegex?: RegExp }): Point;
/** Returns the buffer Range occupied by the word located under the cursor. */
getCurrentWordBufferRange(options?: { wordRegex?: RegExp }): Range;
/** Returns the buffer Range for the current line. */
getCurrentLineBufferRange(options?: { includeNewline?: boolean }): Range;
/**
* Retrieves the range for the current paragraph.
* A paragraph is defined as a block of text surrounded by empty lines or comments.
*/
getCurrentParagraphBufferRange(): Range;
/** Returns the characters preceding the cursor in the current word. */
getCurrentWordPrefix(): string;
// Visibility
/** Sets whether the cursor is visible. */
setVisible(visible: boolean): void;
/** Returns the visibility of the cursor. */
isVisible(): boolean;
// Comparing to another cursor
/**
* Compare this cursor's buffer position to another cursor's buffer position.
* See Point::compare for more details.
*/
compare(otherCursor: Cursor): number;
// Utilities
/** Prevents this cursor from causing scrolling. */
clearAutoscroll(): void;
/** Deselects the current selection. */
clearSelection(): void;
/** Get the RegExp used by the cursor to determine what a "word" is. */
wordRegExp(options?: { includeNonWordCharacters?: boolean }): RegExp;
/** Get the RegExp used by the cursor to determine what a "subword" is. */
subwordRegExp(options?: { backwards?: boolean }): RegExp;
}
/** Manages the deserializers used for serialized state. */
export interface DeserializerManager {
/** Register the given class(es) as deserializers. */
add(...deserializers: Deserializer[]): Disposable;
/** Deserialize the state and params. */
deserialize(state: object): object|undefined;
}
/** Represents a directory on disk that can be watched for changes. */
export class Directory {
// Construction
/** Configures a new Directory instance, no files are accessed. */
constructor(directoryPath: string, symlink?: boolean);
/**
* Creates the directory on disk that corresponds to ::getPath() if no such
* directory already exists.
*/
create(mode?: number): Promise<boolean>;
// Event Subscription
/** Invoke the given callback when the directory's contents change. */
onDidChange(callback: () => void): Disposable;
// Directory Metadata
/** Returns a boolean, always false. */
isFile(): this is File;
/** Returns a boolean, always true. */
isDirectory(): this is Directory;
/** Returns a boolean indicating whether or not this is a symbolic link. */
isSymbolicLink(): boolean;
/**
* Returns a promise that resolves to a boolean, true if the directory
* exists, false otherwise.
*/
exists(): Promise<boolean>;
/** Returns a boolean, true if the directory exists, false otherwise. */
existsSync(): boolean;
/**
* Return a boolean, true if this Directory is the root directory of the
* filesystem, or false if it isn't.
*/
isRoot(): boolean;
// Managing Paths
/**
* This may include unfollowed symlinks or relative directory entries.
* Or it may be fully resolved, it depends on what you give it.
*/
getPath(): string;
/**
* All relative directory entries are removed and symlinks are resolved to
* their final destination.
*/
getRealPathSync(): string;
/** Returns the string basename of the directory. */
getBaseName(): string;
/** Returns the relative string path to the given path from this directory. */
relativize(fullPath: string): string;
// Traversing
/** Traverse to the parent directory. */
getParent(): Directory;
/**
* Traverse within this Directory to a child File. This method doesn't actually
* check to see if the File exists, it just creates the File object.
*/
getFile(filename: string): File;
/**
* Traverse within this a Directory to a child Directory. This method doesn't actually
* check to see if the Directory exists, it just creates the Directory object.
*/
getSubdirectory(dirname: string): Directory;
/** Reads file entries in this directory from disk synchronously. */
getEntriesSync(): Array<File|Directory>;
/** Reads file entries in this directory from disk asynchronously. */
getEntries(callback: (error: Error|null, entries: Array<File|Directory>) => void): void;
/**
* Determines if the given path (real or symbolic) is inside this directory. This
* method does not actually check if the path exists, it just checks if the path
* is under this directory.
*/
contains(pathToCheck: string): boolean;
}
/** A container at the edges of the editor window capable of holding items. */
export interface Dock {
// Methods
/** Show the dock and focus its active Pane. */
activate(): void;
/** Show the dock without focusing it. */
show(): void;
/**
* Hide the dock and activate the WorkspaceCenter if the dock was was previously
* focused.
*/
hide(): void;
/**
* Toggle the dock's visibility without changing the Workspace's active pane
* container.
*/
toggle(): void;
/** Check if the dock is visible. */
isVisible(): boolean;
// Event Subscription
/** Invoke the given callback when the visibility of the dock changes. */
onDidChangeVisible(callback: (visible: boolean) => void): Disposable;
/**
* Invoke the given callback with the current and all future visibilities of
* the dock.
*/
observeVisible(callback: (visible: boolean) => void): Disposable;
/** Invoke the given callback with all current and future panes items in the dock. */
observePaneItems(callback: (item: object) => void): Disposable;
/**
* Invoke the given callback when the active pane item changes.
*
* Because observers are invoked synchronously, it's important not to perform any
* expensive operations via this method. Consider ::onDidStopChangingActivePaneItem
* to delay operations until after changes stop occurring.
*/
onDidChangeActivePaneItem(callback: (item: object) => void): Disposable;
/** Invoke the given callback when the active pane item stops changing. */
onDidStopChangingActivePaneItem(callback: (item: object) => void): Disposable;
/**
* Invoke the given callback with the current active pane item and with all future
* active pane items in the dock.
*/
observeActivePaneItem(callback: (item: object) => void): Disposable;
/** Invoke the given callback when a pane is added to the dock. */
onDidAddPane(callback: (event: { pane: Pane }) => void): Disposable;
/** Invoke the given callback before a pane is destroyed in the dock. */
onWillDestroyPane(callback: (event: { pane: Pane }) => void): Disposable;
/** Invoke the given callback when a pane is destroyed in the dock. */
onDidDestroyPane(callback: (event: { pane: Pane }) => void): Disposable;
/** Invoke the given callback with all current and future panes in the dock. */
observePanes(callback: (pane: Pane) => void): Disposable;
/** Invoke the given callback when the active pane changes. */
onDidChangeActivePane(callback: (pane: Pane) => void): Disposable;
/**
* Invoke the given callback with the current active pane and when the active
* pane changes.
*/
observeActivePane(callback: (pane: Pane) => void): Disposable;
/** Invoke the given callback when a pane item is added to the dock. */
onDidAddPaneItem(callback: (event: PaneItemObservedEvent) => void): Disposable;
/**
* Invoke the given callback when a pane item is about to be destroyed, before the user is
* prompted to save it.
* @param callback The function to be called before pane items are destroyed.
* If this function returns a Promise, then the item will not be destroyed
* until the promise resolves.
*/
onWillDestroyPaneItem(callback: (event: PaneItemObservedEvent) => void|Promise<void>):
Disposable;
/** Invoke the given callback when a pane item is destroyed. */
onDidDestroyPaneItem(callback: (event: PaneItemObservedEvent) => void): Disposable;
/**
* Invoke the given callback when the hovered state of the dock changes.
* @param hovered Is the dock now hovered?
*/
onDidChangeHovered(callback: (hovered: boolean) => void): Disposable;
// Pane Items
/** Get all pane items in the dock. */
getPaneItems(): object[];
/** Get the active Pane's active item. */
getActivePaneItem(): object;
// Panes
/** Returns an Array of Panes. */
getPanes(): Pane[];
/** Get the active Pane. */
getActivePane(): Pane;
/** Make the next pane active. */
activateNextPane(): boolean;
/** Make the previous pane active. */
activatePreviousPane(): boolean;
}
/** Represents an individual file that can be watched, read from, and written to. */
export class File {
// Construction
/** Configures a new File instance, no files are accessed. */
constructor(filePath: string, symlink?: boolean);
/**
* Creates the file on disk that corresponds to ::getPath() if no such file
* already exists.
*/
create(): Promise<boolean>;
// Event Subscription
/** Invoke the given callback when the file's contents change. */
onDidChange(callback: () => void): Disposable;
/** Invoke the given callback when the file's path changes. */
onDidRename(callback: () => void): Disposable;
/** Invoke the given callback when the file is deleted. */
onDidDelete(callback: () => void): Disposable;
/**
* Invoke the given callback when there is an error with the watch. When
* your callback has been invoked, the file will have unsubscribed from the
* file watches.
*/
onWillThrowWatchError(callback: (event: PathWatchErrorThrownEvent) =>
void): Disposable;
// File Metadata
/** Returns a boolean, always true. */
isFile(): this is File;
/** Returns a boolean, always false. */
isDirectory(): this is Directory;
/** Returns a boolean indicating whether or not this is a symbolic link. */
isSymbolicLink(): boolean;
/**
* Returns a promise that resolves to a boolean, true if the file exists,
* false otherwise.
*/
exists(): Promise<boolean>;
/** Returns a boolean, true if the file exists, false otherwise. */
existsSync(): boolean;
/** Get the SHA-1 digest of this file. */
getDigest(): Promise<string>;
/** Get the SHA-1 digest of this file. */
getDigestSync(): string;
/** Sets the file's character set encoding name. */
setEncoding(encoding: string): void;
/** Returns the string encoding name for this file (default: "utf8"). */
getEncoding(): string;
// Managing Paths
/** Returns the string path for the file. */
getPath(): string;
/** Returns this file's completely resolved string path. */
getRealPathSync(): string;
/**
* Returns a promise that resolves to the file's completely resolved
* string path.
*/
getRealPath(): Promise<string>;
/** Return the string filename without any directory information. */
getBaseName(): string;
// Traversing
/** Return the Directory that contains this file. */
getParent(): Directory;
// Reading and Writing
/** Reads the contents of the file. */
read(flushCache?: boolean): Promise<string | null>;
/** Returns a stream to read the content of the file. */
createReadStream(): ReadStream;
/** Overwrites the file with the given text. */
write(text: string): Promise<undefined>;
/** Returns a stream to write content to the file. */
createWriteStream(): WriteStream;
/** Overwrites the file with the given text. */
writeSync(text: string): undefined;
}
/** Represents the underlying git operations performed by Atom. */
export class GitRepository {
// Construction
/** Creates a new GitRepository instance. */
static open(path: string, options?: { refreshOnWindowFocus?: boolean }): GitRepository;
constructor(path: string, options?: { refreshOnWindowFocus?: boolean, config?: Config,
project?: Project });
// Lifecycle
/** Destroy this GitRepository object. */
destroy(): void;
/** Returns a boolean indicating if this repository has been destroyed. */
isDestroyed(): boolean;
// Event Subscription
/**
* Invoke the given callback when this GitRepository's destroy() method is
* invoked.
*/
onDidDestroy(callback: () => void): Disposable;
/**
* Invoke the given callback when a specific file's status has changed. When
* a file is updated, reloaded, etc, and the status changes, this will be fired.
*/
onDidChangeStatus(callback: (event: RepoStatusChangedEvent) => void): Disposable;
/** Invoke the given callback when a multiple files' statuses have changed. */
onDidChangeStatuses(callback: () => void): Disposable;
// Repository Details
/** A string indicating the type of version control system used by this repository. */
getType(): "git";
/** Returns the string path of the repository. */
getPath(): string;
/** Returns the string working directory path of the repository. */
getWorkingDirectory(): string;
/** Returns true if at the root, false if in a subfolder of the repository. */
isProjectAtRoot(): boolean;
/** Makes a path relative to the repository's working directory. */
relativize(): string;
/** Returns true if the given branch exists. */
hasBranch(branch: string): boolean;
/** Retrieves a shortened version of the HEAD reference value. */
getShortHead(path?: string): string;
/** Is the given path a submodule in the repository? */
isSubmodule(path: string): boolean;
/**
* Returns the number of commits behind the current branch is from the its
* upstream remote branch. The default reference is the HEAD.
* @param reference The branch reference name.
* @param path The path in the repository to get this ifnromation for, only
* needed if the repository contains submodules.
* @return Returns the number of commits behind the current branch is from its
* upstream remote branch.
*/
getAheadBehindCount(reference: string, path?: string): { ahead: number, behind: number };
/**
* Get the cached ahead/behind commit counts for the current branch's
* upstream branch.
*/
getCachedUpstreamAheadBehindCount(path?: string): { ahead: number, behind: number };
/** Returns the git configuration value specified by the key. */
getConfigValue(key: string, path?: string): string;
/** Returns the origin url of the repository. */
getOriginURL(path?: string): string;
/**
* Returns the upstream branch for the current HEAD, or null if there is no
* upstream branch for the current HEAD.
*/
getUpstreamBranch(path?: string): string|null;
/** Gets all the local and remote references. */
getReferences(path?: string): { heads: string[], remotes: string[], tags: string[] };
/** Returns the current string SHA for the given reference. */
getReferenceTarget(reference: string, path?: string): string;
// Reading Status
/** Returns true if the given path is modified. */
isPathModified(path: string): boolean;
/** Returns true if the given path is new. */
isPathNew(path: string): boolean;
/** Is the given path ignored? */
isPathIgnored(path: string): boolean;
/** Get the status of a directory in the repository's working directory. */
getDirectoryStatus(path: string): number;
/** Get the status of a single path in the repository. */
getPathStatus(path: string): number;
/** Get the cached status for the given path. */
getCachedPathStatus(path: string): number|null;
/** Returns true if the given status indicates modification. */
isStatusModified(status: number): boolean;
/** Returns true if the given status indicates a new path. */
isStatusNew(status: number): boolean;
// Retrieving Diffs
/**
* Retrieves the number of lines added and removed to a path.
* This compares the working directory contents of the path to the HEAD version.
*/
getDiffStats(path: string): { added: number, deleted: number };
/**
* Retrieves the line diffs comparing the HEAD version of the given path
* and the given text.
*/
getLineDiffs(path: string, text: string): Array<{ oldStart: number,
newStart: number, oldLines: number, newLines: number }>;
// Checking Out
/**
* Restore the contents of a path in the working directory and index to the
* version at HEAD.
*/
checkoutHead(path: string): boolean;
/** Checks out a branch in your repository. */
checkoutReference(reference: string, create: boolean): boolean;
}
/** Grammar that tokenizes lines of text. */
export interface Grammar {
/** The name of the Grammar. */
readonly name: string;
/** Undocumented: scope name of the Grammar. */
readonly scopeName: string;
// Event Subscription
onDidUpdate(callback: () => void): Disposable;
// Tokenizing
/**
* Tokenize all lines in the given text.
* @param text A string containing one or more lines.
* @return An array of token arrays for each line tokenized.
*/
tokenizeLines(text: string): GrammarToken[][];
/**
* Tokenizes the line of text.
* @param line A string of text to tokenize.
* @param ruleStack An optional array of rules previously returned from this
* method. This should be null when tokenizing the first line in the file.
* @param firstLine A optional boolean denoting whether this is the first line
* in the file which defaults to `false`.
* @return An object representing the result of the tokenize.
*/
tokenizeLine(line: string, ruleStack?: null, firstLine?: boolean): TokenizeLineResult;
/**
* Tokenizes the line of text.
* @param line A string of text to tokenize.
* @param ruleStack An optional array of rules previously returned from this
* method. This should be null when tokenizing the first line in the file.
* @param firstLine A optional boolean denoting whether this is the first line
* in the file which defaults to `false`.
* @return An object representing the result of the tokenize.
*/
tokenizeLine(line: string, ruleStack: GrammarRule[], firstLine?: false):
TokenizeLineResult;
}
/** Registry containing one or more grammars. */
export interface GrammarRegistry {
// Event Subscription
/**
* Invoke the given callback when a grammar is added to the registry.
* @param callback The callback to be invoked whenever a grammar is added.
* @return A Disposable on which `.dispose()` can be called to unsubscribe.
*/
onDidAddGrammar(callback: (grammar: Grammar) => void): Disposable;
/**
* Invoke the given callback when a grammar is updated due to a grammar it
* depends on being added or removed from the registry.
* @param callback The callback to be invoked whenever a grammar is updated.
* @return A Disposable on which `.dispose()` can be called to unsubscribe.
*/
onDidUpdateGrammar(callback: (grammar: Grammar) => void): Disposable;
/**
* Invoke the given callback when a grammar is removed from the registry.
* @param callback The callback to be invoked whenever a grammar is removed.
* @return A Disposable on which `.dispose()` can be called to unsubscribe.
*/
onDidRemoveGrammar(callback: (grammar: Grammar) => void): Disposable;
// Managing Grammars
/**
* Get all the grammars in this registry.
* @return A non-empty array of Grammar instances.
*/
getGrammars(): Grammar[];
/**
* Get a grammar with the given scope name.
* @param scopeName A string such as `source.js`.
* @return A Grammar or undefined.
*/
grammarForScopeName(scopeName: string): Grammar|undefined;
/**
* Add a grammar to this registry.
* A 'grammar-added' event is emitted after the grammar is added.
* @param grammar The Grammar to add. This should be a value previously returned
* from ::readGrammar or ::readGrammarSync.
* @return Returns a Disposable on which `.dispose()` can be called to remove
* the grammar.
*/
addGrammar(grammar: Grammar): Disposable;
/**
* Remove the given grammar from this registry.
* @param grammar The grammar to remove. This should be a grammar previously
* added to the registry from ::addGrammar.
*/
removeGrammar(grammar: Grammar): void;
/**
* Remove the grammar with the given scope name.
* @param scopeName A string such as `source.js`.
* @return Returns the removed Grammar or undefined.
*/
removeGrammarForScopeName(scopeName: string): Grammar|undefined;
/**
* Read a grammar synchronously but don't add it to the registry.
* @param grammarPath The absolute file path to a grammar.
* @return The newly loaded Grammar.
*/
readGrammarSync(grammarPath: string): Grammar;
/**
* Read a grammar asynchronously but don't add it to the registry.
* @param grammarPath The absolute file path to the grammar.
* @param callback The function to be invoked once the Grammar has been read in.
*/
readGrammar(grammarPath: string, callback: (error: Error|null, grammar?: Grammar) =>
void): void;
/**
* Read a grammar synchronously and add it to this registry.
* @param grammarPath The absolute file path to the grammar.
* @return The newly loaded Grammar.
*/
loadGrammarSync(grammarPath: string): Grammar;
/**
* Read a grammar asynchronously and add it to the registry.
* @param grammarPath The absolute file path to the grammar.
* @param callback The function to be invoked once the Grammar has been read in
* and added to the registry.
*/
loadGrammar(grammarPath: string, callback: (error: Error|null, grammar?: Grammar) =>
void): void;
/**
* Convert compact tags representation into convenient, space-inefficient tokens.
* @param lineText The text of the tokenized line.
* @param tags The tags returned from a call to Grammar::tokenizeLine().
* @return An array of Token instances decoded from the given tags.
*/
decodeTokens(lineText: string, tags: Array<number|string>): GrammarToken[];
/**
* Set a TextBuffer's language mode based on its path and content, and continue
* to update its language mode as grammars are added or updated, or the buffer's
* file path changes.
* @param buffer The buffer whose language mode will be maintained.
* @return A Disposable that can be used to stop updating the buffer's
* language mode.
*/
maintainLanguageMode(buffer: TextBuffer): Disposable;
/**
* Force a TextBuffer to use a different grammar than the one that would otherwise
* be selected for it.
* @param buffer The buffer whose grammar will be set.
* @param languageId The identifier of the desired language.
* @return Returns a boolean that indicates whether the language was successfully
* found.
*/
assignLanguageMode(buffer: TextBuffer, languageId: string): boolean;
/**
* Remove any language mode override that has been set for the given TextBuffer.
* This will assign to the buffer the best language mode available.
*/
autoAssignLanguageMode(buffer: TextBuffer): void;
/**
* Select a grammar for the given file path and file contents.
*
* This picks the best match by checking the file path and contents against
* each grammar.
* @param filePath A string file path.
* @param fileContents A string of text for that file path.
*/
selectGrammar(filePath: string, fileContents: string): Grammar;
/**
* Returns a number representing how well the grammar matches the
* `filePath` and `contents`.
* @param grammar The grammar to score.
* @param filePath A string file path.
* @param contents A string of text for that file path.
*/
getGrammarScore(grammar: Grammar, filePath: string, contents: string): number;
}
/** Represents a gutter within a TextEditor. */
export interface Gutter {
// Gutter Destruction
/** Destroys the gutter. */
destroy(): void;
// Event Subscription
/** Calls your callback when the gutter's visibility changes. */
onDidChangeVisible(callback: (gutter: Gutter) => void): Disposable;
/** Calls your callback when the gutter is destroyed. */
onDidDestroy(callback: () => void): Disposable;
// Visibility
/** Hide the gutter. */
hide(): void;
/** Show the gutter. */
show(): void;
/** Determine whether the gutter is visible. */
isVisible(): boolean;
/**
* Add a decoration that tracks a DisplayMarker. When the marker moves, is
* invalidated, or is destroyed, the decoration will be updated to reflect
* the marker's state.
*/
decorateMarker(marker: DisplayMarker, decorationParams: DecorationOptions): Decoration;
}
/**
* History manager for remembering which projects have been opened.
* An instance of this class is always available as the atom.history global.
* The project history is used to enable the 'Reopen Project' menu.
*/
export interface HistoryManager {
/** Obtain a list of previously opened projects. */
getProjects(): ProjectHistory[];
/**
* Clear all projects from the history.
* Note: This is not a privacy function - other traces will still exist, e.g.
* window state.
*/
clearProjects(): void;
/** Invoke the given callback when the list of projects changes. */
onDidChangeProjects(callback: (args: { reloaded: boolean }) => void): Disposable;
}
/**
* Allows commands to be associated with keystrokes in a context-sensitive way.
* In Atom, you can access a global instance of this object via `atom.keymaps`.
*/
export interface KeymapManager {
/** Clear all registered key bindings and enqueued keystrokes. For use in tests. */
clear(): void;
/** Unwatch all watched paths. */
destroy(): void;
// Event Subscription
/** Invoke the given callback when one or more keystrokes completely match a key binding. */
onDidMatchBinding(callback: (event: FullKeybindingMatchEvent) => void): Disposable;
/** Invoke the given callback when one or more keystrokes partially match a binding. */
onDidPartiallyMatchBindings(callback: (event: PartialKeybindingMatchEvent) =>
void): Disposable;
/** Invoke the given callback when one or more keystrokes fail to match any bindings. */
onDidFailToMatchBinding(callback: (event: FailedKeybindingMatchEvent) =>
void): Disposable;
/** Invoke the given callback when a keymap file is reloaded. */
onDidReloadKeymap(callback: (event: KeymapLoadedEvent) => void): Disposable;
/** Invoke the given callback when a keymap file is unloaded. */
onDidUnloadKeymap(callback: (event: KeymapLoadedEvent) => void): Disposable;
/** Invoke the given callback when a keymap file not able to be loaded. */
onDidFailToReadFile(callback: (error: FailedKeymapFileReadEvent) => void): Disposable;
// Adding and Removing Bindings
/** Construct KeyBindings from an object grouping them by CSS selector. */
build(source: string, bindings: { [key: string]: { [key: string]: string }},
priority?: number): KeyBinding[];
/** Add sets of key bindings grouped by CSS selector. */
add(source: string, bindings: { [key: string]: { [key: string]: string }},
priority?: number): Disposable;
// Accessing Bindings
/** Get all current key bindings. */
getKeyBindings(): KeyBinding[];
/** Get the key bindings for a given command and optional target. */
findKeyBindings(params?: {
keystrokes?: string, // e.g. 'ctrl-x ctrl-s'
command?: string, // e.g. 'editor:backspace'
target?: Element,
}): KeyBinding[];
// Managing Keymap Files
/** Load the key bindings from the given path. */
loadKeymap(bindingsPath: string, options?: { watch?: boolean, priority?: number }):
void;
/**
* Cause the keymap to reload the key bindings file at the given path whenever
* it changes.
*/
watchKeymap(filePath: string, options?: { priority: number }): void;
// Managing Keyboard Events
/**
* Dispatch a custom event associated with the matching key binding for the
* given `KeyboardEvent` if one can be found.
*/
handleKeyboardEvent(event: KeyboardEvent): void;
/** Translates a keydown event to a keystroke string. */
keystrokeForKeyboardEvent(event: KeyboardEvent): string;
/** Customize translation of raw keyboard events to keystroke strings. */
addKeystrokeResolver(resolver: (event: AddedKeystrokeResolverEvent) => string): Disposable;
/**
* Get the number of milliseconds allowed before pending states caused by
* partial matches of multi-keystroke bindings are terminated.
*/
getPartialMatchTimeout(): number;
}
/** Provides a registry for menu items that you'd like to appear in the application menu. */
export interface MenuManager {
/** Adds the given items to the application menu. */
add(items: ReadonlyArray<MenuOptions>): Disposable;
/** Refreshes the currently visible menu. */
update(): void;
}
/**
* Loads and activates a package's main module and resources such as stylesheets,
* keymaps, grammar, editor properties, and menus.
*/
export interface Package {
/** The name of the Package. */
readonly name: string;
/** The path to the Package on disk. */
readonly path: string;
// Event Subscription
/** Invoke the given callback when all packages have been activated. */
onDidDeactivate(callback: () => void): Disposable;
// Native Module Compatibility
/**
* Are all native modules depended on by this package correctly compiled
* against the current version of Atom?
*/
isCompatible(): boolean;
/**
* Rebuild native modules in this package's dependencies for the current
* version of Atom.
*/
rebuild(): Promise<{ code: number, stdout: string, stderr: string }>;
/** If a previous rebuild failed, get the contents of stderr. */
getBuildFailureOutput(): string|null;
}
/** Package manager for coordinating the lifecycle of Atom packages. */
export interface PackageManager {
// Event Subscription
/** Invoke the given callback when all packages have been loaded. */
onDidLoadInitialPackages(callback: () => void): Disposable;
/** Invoke the given callback when all packages have been activated. */
onDidActivateInitialPackages(callback: () => void): Disposable;
/** Invoke the given callback when a package is activated. */
onDidActivatePackage(callback: (package: Package) => void): Disposable;
/** Invoke the given callback when a package is deactivated. */
onDidDeactivatePackage(callback: (package: Package) => void): Disposable;
/** Invoke the given callback when a package is loaded. */
onDidLoadPackage(callback: (package: Package) => void): Disposable;
/** Invoke the given callback when a package is unloaded. */
onDidUnloadPackage(callback: (package: Package) => void): Disposable;
/** Undocumented: invoke the given callback when an activation hook is triggered */
onDidTriggerActivationHook(hook: string, callback: () => void): Disposable;
// Package System Data
/** Get the path to the apm command. */
getApmPath(): string;
/** Get the paths being used to look for packages. */
getPackageDirPaths(): string[];
// General Package Data
/** Resolve the given package name to a path on disk. */
resolvePackagePath(name: string): string|undefined;
/** Is the package with the given name bundled with Atom? */
isBundledPackage(name: string): boolean;
// Enabling and Disabling Packages
/** Enable the package with the given name. */
enablePackage(name: string): Package|undefined;
/** Disable the package with the given name. */
disablePackage(name: string): Package|undefined;
/** Is the package with the given name disabled? */
isPackageDisabled(name: string): boolean;
// Accessing Active Packages
/** Get an Array of all the active Packages. */
getActivePackages(): Package[];
/** Get the active Package with the given name. */
getActivePackage(name: string): Package|undefined;
/** Is the Package with the given name active? */
isPackageActive(name: string): boolean;
/** Returns a boolean indicating whether package activation has occurred. */
hasActivatedInitialPackages(): boolean;
// Accessing Loaded Packages
/** Get an Array of all the loaded Packages. */
getLoadedPackages(): Package[];
/** Get the loaded Package with the given name. */
getLoadedPackage(name: string): Package|undefined;
/** Is the package with the given name loaded? */
isPackageLoaded(name: string): boolean;
/** Returns a boolean indicating whether package loading has occurred. */
hasLoadedInitialPackages(): boolean;
// Accessing Available Packages
/** Returns an Array of strings of all the available package paths. */
getAvailablePackagePaths(): string[];
/** Returns an Array of strings of all the available package names. */
getAvailablePackageNames(): string[];
/** Returns an Array of strings of all the available package metadata. */
getAvailablePackageMetadata(): string[];
/** Activate a single package by name or path. */
activatePackage(nameOrPath: string): Promise<Package>;
/** Deactivate a single package by name or path. */
deactivatePackage(nameOrPath: string, suppressSerialization?: boolean): Promise<void>;
/** Triggers the given package activation hook. */
triggerActivationHook(hook: string): void;
/** Trigger all queued activation hooks immediately. */
triggerDeferredActivationHooks(): void;
}
/** A container for presenting content in the center of the workspace. */
export interface Pane {
// Event Subscription
/** Invoke the given callback when the pane resizes. */
onDidChangeFlexScale(callback: (flexScale: number) => void): Disposable;
/** Invoke the given callback with the current and future values of ::getFlexScale. */
observeFlexScale(callback: (flexScale: number) => void): Disposable;
/** Invoke the given callback when the pane is activated. */
onDidActivate(callback: () => void): Disposable;
/** Invoke the given callback before the pane is destroyed. */
onWillDestroy(callback: () => void): Disposable;
/** Invoke the given callback when the pane is destroyed. */
onDidDestroy(callback: () => void): Disposable;
/** Invoke the given callback when the value of the ::isActive property changes. */
onDidChangeActive(callback: (active: boolean) => void): Disposable;
/**
* Invoke the given callback with the current and future values of the ::isActive
* property.
*/
observeActive(callback: (active: boolean) => void): Disposable;
/** Invoke the given callback when an item is added to the pane. */
onDidAddItem(callback: (event: PaneListItemShiftedEvent) => void): Disposable;
/** Invoke the given callback when an item is removed from the pane. */
onDidRemoveItem(callback: (event: PaneListItemShiftedEvent) => void): Disposable;
/** Invoke the given callback before an item is removed from the pane. */
onWillRemoveItem(callback: (event: PaneListItemShiftedEvent) => void): Disposable;
/** Invoke the given callback when an item is moved within the pane. */
onDidMoveItem(callback: (event: PaneItemMovedEvent) => void): Disposable;
/** Invoke the given callback with all current and future items. */
observeItems(callback: (item: object) => void): Disposable;
/** Invoke the given callback when the value of ::getActiveItem changes. */
onDidChangeActiveItem(callback: (activeItem: object) => void): Disposable;
/**
* Invoke the given callback when ::activateNextRecentlyUsedItem has been called,
* either initiating or continuing a forward MRU traversal of pane items.
*/
onChooseNextMRUItem(callback: (nextRecentlyUsedItem: object) => void): Disposable;
/**
* Invoke the given callback when ::activatePreviousRecentlyUsedItem has been called,
* either initiating or continuing a reverse MRU traversal of pane items.
*/
onChooseLastMRUItem(callback: (previousRecentlyUsedItem: object) => void): Disposable;
/**
* Invoke the given callback when ::moveActiveItemToTopOfStack has been called,
* terminating an MRU traversal of pane items and moving the current active item
* to the top of the stack. Typically bound to a modifier (e.g. CTRL) key up event.
*/
onDoneChoosingMRUItem(callback: () => void): Disposable;
/** Invoke the given callback with the current and future values of ::getActiveItem. */
observeActiveItem(callback: (activeItem: object) => void): Disposable;
/** Invoke the given callback before items are destroyed. */
onWillDestroyItem(callback: (event: PaneListItemShiftedEvent) => void): Disposable;
// Items
/** Get the items in this pane. */
getItems(): object[];
/** Get the active pane item in this pane. */
getActiveItem(): object;
/** Return the item at the given index. */
itemAtIndex(index: number): object|undefined;
/** Makes the next item active. */
activateNextItem(): void;
/** Makes the previous item active. */
activatePreviousItem(): void;
/** Move the active tab to the right. */
moveItemRight(): void;
/** Move the active tab to the left. */
moveItemLeft(): void;
/** Get the index of the active item. */
getActiveItemIndex(): number;
/** Activate the item at the given index. */
activateItemAtIndex(index: number): void;
/** Make the given item active, causing it to be displayed by the pane's view. */
activateItem(item: object, options?: { pending: boolean }): void;
/** Add the given item to the pane. */
addItem(item: object, options?: { index?: number, pending?: boolean }): object;
/** Add the given items to the pane. */
addItems(items: object[], index?: number): object[];
/** Move the given item to the given index. */
moveItem(item: object, index: number): void;
/** Move the given item to the given index on another pane. */
moveItemToPane(item: object, pane: Pane, index: number): void;
/** Destroy the active item and activate the next item. */
destroyActiveItem(): Promise<boolean>;
/** Destroy the given item. */
destroyItem(item: object, force?: boolean): Promise<boolean>;
/** Destroy all items. */
destroyItems(): Promise<boolean[]>;
/** Destroy all items except for the active item. */
destroyInactiveItems(): Promise<boolean[]>;
/** Save the active item. */
saveActiveItem<T = void>(nextAction?: (error?: Error) => T):
Promise<T>|undefined;
/**
* Prompt the user for a location and save the active item with the path
* they select.
*/
saveActiveItemAs<T = void>(nextAction?: (error?: Error) => T):
Promise<T>|undefined;
/** Save the given item. */
saveItem<T = void>(item: object, nextAction?: (error?: Error) => T):
Promise<T>|undefined;
/**
* Prompt the user for a location and save the active item with the path
* they select.
*/
saveItemAs<T = void>(item: object, nextAction?: (error?: Error) => T):
Promise<T>|undefined;
/** Save all items. */
saveItems(): void;
/** Return the first item that matches the given URI or undefined if none exists. */
itemForURI(uri: string): object|undefined;
/** Activate the first item that matches the given URI. */
activateItemForURI(uri: string): boolean;
// Lifecycle
/** Determine whether the pane is active. */
isActive(): boolean;
/** Makes this pane the active pane, causing it to gain focus. */
activate(): void;
/** Close the pane and destroy all its items. */
destroy(): void;
/** Determine whether this pane has been destroyed. */
isDestroyed(): boolean;
// Splitting
/** Create a new pane to the left of this pane. */
splitLeft(params?: {
items?: object[],
copyActiveItem?: boolean,
}): Pane;
/** Create a new pane to the right of this pane. */
splitRight(params?: {
items?: object[],
copyActiveItem?: boolean,
}): Pane;
/** Creates a new pane above the receiver. */
splitUp(params?: {
items?: object[],
copyActiveItem?: boolean,
}): Pane;
/** Creates a new pane below the receiver. */
splitDown(params?: {
items?: object[],
copyActiveItem?: boolean,
}): Pane;
}
/**
* A container representing a panel on the edges of the editor window. You
* should not create a Panel directly, instead use Workspace::addTopPanel and
* friends to add panels.
*/
export interface Panel<T = object> {
/** Whether or not the Panel is visible. */
readonly visible: boolean;
// Construction and Destruction
/** Destroy and remove this panel from the UI. */
destroy(): void;
// Event Subscription
/** Invoke the given callback when the pane hidden or shown. */
onDidChangeVisible(callback: (visible: boolean) => void): Disposable;
/** Invoke the given callback when the pane is destroyed. */
onDidDestroy(callback: (panel: Panel<T>) => void): Disposable;
// Panel Details
/** Returns the panel's item. */
getItem(): T;
/** Returns a number indicating this panel's priority. */
getPriority(): number;
/** Returns a boolean true when the panel is visible. */
isVisible(): boolean;
/** Hide this panel. */
hide(): void;
/** Show this panel. */
show(): void;
}
/** Manage a subscription to filesystem events that occur beneath a root directory. */
export interface PathWatcher extends DisposableLike {
/**
* Return a Promise that will resolve when the underlying native watcher is
* ready to begin sending events.
*/
getStartPromise(): Promise<void>;
/** Invokes a function when any errors related to this watcher are reported. */
onDidError(callback: (error: Error) => void): Disposable;
/**
* Unsubscribe all subscribers from filesystem events. Native resources will be
* released asynchronously, but this watcher will stop broadcasting events
* immediately.
*/
dispose(): void;
}
/** Represents a project that's opened in Atom. */
export interface Project {
// Event Subscription
/** Invoke the given callback when the project paths change. */
onDidChangePaths(callback: (projectPaths: string[]) => void): Disposable;
/** Invoke the given callback when a text buffer is added to the project. */
onDidAddBuffer(callback: (buffer: TextBuffer) => void): Disposable;
/**
* Invoke the given callback with all current and future text buffers in
* the project.
*/
observeBuffers(callback: (buffer: TextBuffer) => void): Disposable;
/** Invoke a callback when a filesystem change occurs within any open project path. */
onDidChangeFiles(callback: (events: FilesystemChangeEvent) => void): Disposable;
/** Invoke a callback whenever the project's configuration has been replaced. */
onDidReplace(callback: (projectSpec: ProjectSpecification | null | undefined) => void):
Disposable;
// Accessing the Git Repository
/**
* Get an Array of GitRepositorys associated with the project's directories.
*
* This method will be removed in 2.0 because it does synchronous I/O.
*/
getRepositories(): GitRepository[];
/** Invoke the given callback with all current and future repositories in the project. */
observeRepositories(callback: (repository: GitRepository) => void): Disposable;
/** Invoke the given callback when a repository is added to the project. */
onDidAddRepository(callback: (repository: GitRepository) => void): Disposable;
/** Get the repository for a given directory asynchronously. */
repositoryForDirectory(directory: Directory): Promise<GitRepository|null>;
// Managing Paths
/** Get an Array of strings containing the paths of the project's directories. */
getPaths(): string[];
/** Set the paths of the project's directories. */
setPaths(projectPaths: string[]): void;
/** Add a path to the project's list of root paths. */
addPath(projectPath: string): void;
/**
* Access a promise that resolves when the filesystem watcher associated with a
* project root directory is ready to begin receiving events.
*/
getWatcherPromise(projectPath: string): Promise<PathWatcher>;
/** Remove a path from the project's list of root paths. */
removePath(projectPath: string): void;
/** Get an Array of Directorys associated with this project. */
getDirectories(): Directory[];
/** Get the relative path from the project directory to the given path. */
relativize(fullPath: string): string;
/**
* Get the path to the project directory that contains the given path, and
* the relative path from that project directory to the given path.
*/
relativizePath(fullPath: string): [string|null, string];
/**
* Determines whether the given path (real or symbolic) is inside the
* project's directory.
*/
contains(pathToCheck: string): boolean;
}
/**
* Wraps an array of strings. The Array describes a path from the root of the
* syntax tree to a token including all scope names for the entire path.
*/
export interface ScopeDescriptor {
/** Returns all scopes for this descriptor. */
getScopesArray(): ReadonlyArray<string>;
}
/** Represents a selection in the TextEditor. */
export interface Selection {
// Event Subscription
/** Calls your callback when the selection was moved. */
onDidChangeRange(callback: (event: SelectionChangedEvent) => void): Disposable;
/** Calls your callback when the selection was destroyed. */
onDidDestroy(callback: () => void): Disposable;
// Managing the selection range
/** Returns the screen Range for the selection. */
getScreenRange(): Range;
/** Modifies the screen range for the selection. */
setScreenRange(screenRange: RangeCompatible, options?: {
preserveFolds?: boolean,
autoscroll?: boolean
}): void;
/** Returns the buffer Range for the selection. */
getBufferRange(): Range;
/** Modifies the buffer Range for the selection. */
setBufferRange(bufferRange: RangeCompatible, options?: {
preserveFolds?: boolean,
autoscroll?: boolean,
}): void;
/** Returns the starting and ending buffer rows the selection is highlighting. */
getBufferRowRange(): [number, number];
// Info about the selection
/** Determines if the selection contains anything. */
isEmpty(): boolean;
/**
* Determines if the ending position of a marker is greater than the starting position.
* This can happen when, for example, you highlight text "up" in a TextBuffer.
*/
isReversed(): boolean;
/** Returns whether the selection is a single line or not. */
isSingleScreenLine(): boolean;
/** Returns the text in the selection. */
getText(): string;
// NOTE: this calls into Range.intersectsWith(), which is one of the few functions
// that doesn't take a range-compatible range, despite what the API says.
/** Identifies if a selection intersects with a given buffer range. */
intersectsBufferRange(bufferRange: RangeLike): boolean;
/** Identifies if a selection intersects with another selection. */
intersectsWith(otherSelection: Selection): boolean;
// Modifying the selected range
/** Clears the selection, moving the marker to the head. */
clear(options?: { autoscroll?: boolean }): void;
/** Selects the text from the current cursor position to a given screen position. */
selectToScreenPosition(position: PointCompatible): void;
/** Selects the text from the current cursor position to a given buffer position. */
selectToBufferPosition(position: PointCompatible): void;
/** Selects the text one position right of the cursor. */
selectRight(columnCount?: number): void;
/** Selects the text one position left of the cursor. */
selectLeft(columnCount?: number): void;
/** Selects all the text one position above the cursor. */
selectUp(rowCount?: number): void;
/** Selects all the text one position below the cursor. */
selectDown(rowCount?: number): void;
/**
* Selects all the text from the current cursor position to the top of the
* buffer.
*/
selectToTop(): void;
/**
* Selects all the text from the current cursor position to the bottom of
* the buffer.
*/
selectToBottom(): void;
/** Selects all the text in the buffer. */
selectAll(): void;
/**
* Selects all the text from the current cursor position to the beginning of
* the line.
*/
selectToBeginningOfLine(): void;
/**
* Selects all the text from the current cursor position to the first character
* of the line.
*/
selectToFirstCharacterOfLine(): void;
/**
* Selects all the text from the current cursor position to the end of the
* screen line.
*/
selectToEndOfLine(): void;
/**
* Selects all the text from the current cursor position to the end of the
* buffer line.
*/
selectToEndOfBufferLine(): void;
/**
* Selects all the text from the current cursor position to the beginning
* of the word.
*/
selectToBeginningOfWord(): void;
/** Selects all the text from the current cursor position to the end of the word. */
selectToEndOfWord(): void;
/**
* Selects all the text from the current cursor position to the beginning of
* the next word.
*/
selectToBeginningOfNextWord(): void;
/** Selects text to the previous word boundary. */
selectToPreviousWordBoundary(): void;
/** Selects text to the next word boundary. */
selectToNextWordBoundary(): void;
/** Selects text to the previous subword boundary. */
selectToPreviousSubwordBoundary(): void;
/** Selects text to the next subword boundary. */
selectToNextSubwordBoundary(): void;
/**
* Selects all the text from the current cursor position to the beginning of
* the next paragraph.
*/
selectToBeginningOfNextParagraph(): void;
/**
* Selects all the text from the current cursor position to the beginning of
* the previous paragraph.
*/
selectToBeginningOfPreviousParagraph(): void;
/** Modifies the selection to encompass the current word. */
selectWord(): void;
/**
* Expands the newest selection to include the entire word on which the
* cursors rests.
*/
expandOverWord(): void;
/** Selects an entire line in the buffer. */
selectLine(row: number): void;
/**
* Expands the newest selection to include the entire line on which the cursor
* currently rests.
* It also includes the newline character.
*/
expandOverLine(): void;
// Modifying the selected text
/** Replaces text at the current selection. */
insertText(text: string, options?: TextInsertionOptions & ReadonlyEditOptions): void;
/**
* Removes the first character before the selection if the selection is empty
* otherwise it deletes the selection.
*/
backspace(options?: ReadonlyEditOptions): void;
/**
* Removes the selection or, if nothing is selected, then all characters from
* the start of the selection back to the previous word boundary.
*/
deleteToPreviousWordBoundary(options?: ReadonlyEditOptions): void;
/**
* Removes the selection or, if nothing is selected, then all characters from
* the start of the selection up to the next word boundary.
*/
deleteToNextWordBoundary(options?: ReadonlyEditOptions): void;
/**
* Removes from the start of the selection to the beginning of the current
* word if the selection is empty otherwise it deletes the selection.
*/
deleteToBeginningOfWord(options?: ReadonlyEditOptions): void;
/**
* Removes from the beginning of the line which the selection begins on all
* the way through to the end of the selection.
*/
deleteToBeginningOfLine(options?: ReadonlyEditOptions): void;
/**
* Removes the selection or the next character after the start of the selection
* if the selection is empty.
*/
delete(options?: ReadonlyEditOptions): void;
/**
* If the selection is empty, removes all text from the cursor to the end of
* the line. If the cursor is already at the end of the line, it removes the following
* newline. If the selection isn't empty, only deletes the contents of the selection.
*/
deleteToEndOfLine(options?: ReadonlyEditOptions): void;
/**
* Removes the selection or all characters from the start of the selection to
* the end of the current word if nothing is selected.
*/
deleteToEndOfWord(options?: ReadonlyEditOptions): void;
/**
* Removes the selection or all characters from the start of the selection to
* the end of the current word if nothing is selected.
*/
deleteToBeginningOfSubword(options?: ReadonlyEditOptions): void;
/**
* Removes the selection or all characters from the start of the selection to
* the end of the current word if nothing is selected.
*/
deleteToEndOfSubword(options?: ReadonlyEditOptions): void;
/** Removes only the selected text. */
deleteSelectedText(options?: ReadonlyEditOptions): void;
/**
* Removes the line at the beginning of the selection if the selection is empty
* unless the selection spans multiple lines in which case all lines are removed.
*/
deleteLine(options?: ReadonlyEditOptions): void;
/**
* Joins the current line with the one below it. Lines will be separated by a single space.
* If there selection spans more than one line, all the lines are joined together.
*/
joinLines(options?: ReadonlyEditOptions): void;
/** Removes one level of indent from the currently selected rows. */
outdentSelectedRows(options?: ReadonlyEditOptions): void;
/**
* Sets the indentation level of all selected rows to values suggested by the
* relevant grammars.
*/
autoIndentSelectedRows(options?: ReadonlyEditOptions): void;
/**
* Wraps the selected lines in comments if they aren't currently part of a comment.
* Removes the comment if they are currently wrapped in a comment.
*/
toggleLineComments(options?: ReadonlyEditOptions): void;
/** Cuts the selection until the end of the screen line. */
cutToEndOfLine(maintainClipboard?: boolean, options?: ReadonlyEditOptions): void;
/** Cuts the selection until the end of the buffer line. */
cutToEndOfBufferLine(maintainClipboard?: boolean, options?: ReadonlyEditOptions): void;
/** Copies the selection to the clipboard and then deletes it. */
cut(maintainClipboard?: boolean, fullLine?: boolean, options?: ReadonlyEditOptions): void;
/** Copies the current selection to the clipboard. */
copy(maintainClipboard?: boolean, fullLine?: boolean): void;
/** Creates a fold containing the current selection. */
fold(): void;
/** If the selection spans multiple rows, indent all of them. */
indentSelectedRows(options?: ReadonlyEditOptions): void;
// Managing multiple selections
/** Moves the selection down one row. */
addSelectionBelow(): void;
/** Moves the selection up one row. */
addSelectionAbove(): void;
/**
* Combines the given selection into this selection and then destroys the
* given selection.
*/
merge(otherSelection: Selection, options?: { preserveFolds?: boolean,
autoscroll?: boolean }): void;
// Comparing to other selections
/**
* Compare this selection's buffer range to another selection's buffer range.
* See Range::compare for more details.
*/
compare(otherSelection: Selection): number;
}
/**
* A singleton instance of this class available via atom.styles, which you can
* use to globally query and observe the set of active style sheets.
*/
export interface StyleManager {
// Event Subscription
/** Invoke callback for all current and future style elements. */
observeStyleElements(callback: (styleElement: StyleElementObservedEvent) =>
void): Disposable;
/** Invoke callback when a style element is added. */
onDidAddStyleElement(callback: (styleElement: StyleElementObservedEvent) =>
void): Disposable;
/** Invoke callback when a style element is removed. */
onDidRemoveStyleElement(callback: (styleElement: HTMLStyleElement) => void): Disposable;
/** Invoke callback when an existing style element is updated. */
onDidUpdateStyleElement(callback: (styleElement: StyleElementObservedEvent) =>
void): Disposable;
// Reading Style Elements
/** Get all loaded style elements. */
getStyleElements(): HTMLStyleElement[];
// Paths
/** Get the path of the user style sheet in ~/.atom. */
getUserStyleSheetPath(): string;
}
/** Run a node script in a separate process. */
export class Task {
// NOTE: this is actually the best we can do here with the REST parameter for
// this appearing in the middle of the parameter list, which isn't aligned with
// the ES6 spec. Maybe when they rewrite it in JavaScript this will change.
/** A helper method to easily launch and run a task once. */
// tslint:disable-next-line:no-any
static once(taskPath: string, ...args: any[]): Task;
/** Creates a task. You should probably use .once */
constructor(taskPath: string);
// NOTE: this is actually the best we can do here with the REST parameter
// for this appearing in the beginning of the parameter list, which isn't
// aligned with the ES6 spec.
/**
* Starts the task.
* Throws an error if this task has already been terminated or if sending a
* message to the child process fails.
*/
// tslint:disable-next-line:no-any
start(...args: any[]): void;
/**
* Send message to the task.
* Throws an error if this task has already been terminated or if sending a
* message to the child process fails.
*/
// tslint:disable-next-line:no-any
send(message: string | number | boolean | object | null | any[]): void;
/** Call a function when an event is emitted by the child process. */
// tslint:disable-next-line:no-any
on(eventName: string, callback: (param: any) => void): Disposable;
/**
* Forcefully stop the running task.
* No more events are emitted once this method is called.
*/
terminate(): void;
/** Cancel the running task and emit an event if it was canceled. */
cancel(): boolean;
}
export interface TextBufferFileBackend {
/** A {Function} that returns the {String} path to the file. */
getPath(): string;
/**
* A {Function} that returns a `Readable` stream
* that can be used to load the file's content.
*/
createReadStream(): ReadStream;
/**
* A {Function} that returns a `Writable` stream
* that can be used to save content to the file.
*/
createWriteStream(): WriteStream;
/** A {Function} that returns a {Boolean}, true if the file exists, false otherwise. */
existsSync(): boolean;
/**
* A {Function} that invokes its callback argument
* when the file changes. The method should return a {Disposable} that
* can be used to prevent further calls to the callback.
*/
onDidChange?(callback: () => void): Disposable;
/**
* A {Function} that invokes its callback argument
* when the file is deleted. The method should return a {Disposable} that
* can be used to prevent further calls to the callback.
*/
onDidDelete?(callback: () => void): Disposable;
/**
* A {Function} that invokes its callback argument
* when the file is renamed. The method should return a {Disposable} that
* can be used to prevent further calls to the callback.
*/
onDidRename?(callback: () => void): Disposable;
}
/**
* A mutable text container with undo/redo support and the ability to
* annotate logical regions in the text.
*/
export class TextBuffer {
/** The unique identifier for this buffer. */
readonly id: string;
/** The number of retainers for the buffer. */
readonly refcount: number;
/** Whether or not the bufffer has been destroyed. */
readonly destroyed: boolean;
/** Create a new buffer backed by the given file path. */
static load(
filePath: string | TextBufferFileBackend,
params?: BufferLoadOptions): Promise<TextBuffer>;
/**
* Create a new buffer backed by the given file path. For better performance,
* use TextBuffer.load instead.
*/
static loadSync(filePath: string, params?: BufferLoadOptions): TextBuffer;
/**
* Restore a TextBuffer based on an earlier state created using the
* TextBuffer::serialize method.
*/
static deserialize(params: object): Promise<TextBuffer>;
/** Create a new buffer with the given starting text. */
constructor(text: string);
/** Create a new buffer with the given params. */
constructor(params?: {
/** The initial string text of the buffer. */
text?: string
/**
* A function that returns a Boolean indicating whether the buffer should
* be destroyed if its file is deleted.
*/
shouldDestroyOnFileDelete?(): boolean
});
/** Returns a plain javascript object representation of the TextBuffer. */
serialize(options?: { markerLayers?: boolean, history?: boolean }): object;
/** Returns the unique identifier for this buffer. */
getId(): string;
// Event Subscription
/**
* Invoke the given callback synchronously before the content of the buffer
* changes.
*/
onWillChange(callback: (event: BufferChangingEvent) => void): Disposable;
/**
* Invoke the given callback synchronously when the content of the buffer
* changes. You should probably not be using this in packages.
*/
onDidChange(callback: (event: BufferChangedEvent) => void): Disposable;
/**
* Invoke the given callback synchronously when a transaction finishes with
* a list of all the changes in the transaction.
*/
onDidChangeText(callback: (event: BufferStoppedChangingEvent) => void): Disposable;
/**
* Invoke the given callback asynchronously following one or more changes after
* ::getStoppedChangingDelay milliseconds elapse without an additional change.
*/
onDidStopChanging(callback: (event: BufferStoppedChangingEvent) => void):
Disposable;
/**
* Invoke the given callback when the in-memory contents of the buffer become
* in conflict with the contents of the file on disk.
*/
onDidConflict(callback: () => void): Disposable;
/** Invoke the given callback if the value of ::isModified changes. */
onDidChangeModified(callback: (modified: boolean) => void): Disposable;
/**
* Invoke the given callback when all marker ::onDidChange observers have been
* notified following a change to the buffer.
*/
onDidUpdateMarkers(callback: () => void): Disposable;
onDidCreateMarker(callback: (marker: Marker) => void): Disposable;
/** Invoke the given callback when the value of ::getPath changes. */
onDidChangePath(callback: (path: string) => void): Disposable;
/** Invoke the given callback when the value of ::getEncoding changes. */
onDidChangeEncoding(callback: (encoding: string) => void): Disposable;
/**
* Invoke the given callback before the buffer is saved to disk. If the
* given callback returns a promise, then the buffer will not be saved until
* the promise resolves.
*/
onWillSave(callback: () => Promise<void>|void): Disposable;
/** Invoke the given callback after the buffer is saved to disk. */
onDidSave(callback: (event: FileSavedEvent) => void): Disposable;
/** Invoke the given callback after the file backing the buffer is deleted. */
onDidDelete(callback: () => void): Disposable;
/**
* Invoke the given callback before the buffer is reloaded from the contents
* of its file on disk.
*/
onWillReload(callback: () => void): Disposable;
/**
* Invoke the given callback after the buffer is reloaded from the contents
* of its file on disk.
*/
onDidReload(callback: () => void): Disposable;
/** Invoke the given callback when the buffer is destroyed. */
onDidDestroy(callback: () => void): Disposable;
/** Invoke the given callback when there is an error in watching the file. */
onWillThrowWatchError(callback: (errorObject: HandleableErrorEvent) => void):
Disposable;
/**
* Get the number of milliseconds that will elapse without a change before
* ::onDidStopChanging observers are invoked following a change.
*/
getStoppedChangingDelay(): number;
// File Details
/**
* Determine if the in-memory contents of the buffer differ from its contents
* on disk.
* If the buffer is unsaved, always returns true unless the buffer is empty.
*/
isModified(): boolean;
/**
* Determine if the in-memory contents of the buffer conflict with the on-disk
* contents of its associated file.
*/
isInConflict(): boolean;
/** Get the path of the associated file. */
getPath(): string|undefined;
/** Set the path for the buffer's associated file. */
setPath(filePath: string): void;
/** Experimental: Set a custom {TextBufferFileBackend} object as the buffer's backing store. */
setFile(fileBackend: TextBufferFileBackend): void;
/** Sets the character set encoding for this buffer. */
setEncoding(encoding: string): void;
/** Returns the string encoding of this buffer. */
getEncoding(): string;
/** Get the path of the associated file. */
getUri(): string;
// Reading Text
/** Determine whether the buffer is empty. */
isEmpty(): boolean;
/** Get the entire text of the buffer. */
getText(): string;
/** Get the text in a range. */
getTextInRange(range: RangeCompatible): string;
/** Get the text of all lines in the buffer, without their line endings. */
getLines(): string[];
/** Get the text of the last line of the buffer, without its line ending. */
getLastLine(): string;
/**
* Get the text of the line at the given 0-indexed row, without its line ending.
* @param row A number representing the row.
*/
lineForRow(row: number): string|undefined;
/** Get the line ending for the given 0-indexed row. */
lineEndingForRow(row: number): string|undefined;
/**
* Get the length of the line for the given 0-indexed row, without its line
* ending.
*/
lineLengthForRow(row: number): number;
/** Determine if the given row contains only whitespace. */
isRowBlank(row: number): boolean;
/**
* Given a row, find the first preceding row that's not blank.
* Returns a number or null if there's no preceding non-blank row.
*/
previousNonBlankRow(startRow: number): number|null;
/**
* Given a row, find the next row that's not blank.
* Returns a number or null if there's no next non-blank row.
*/
nextNonBlankRow(startRow: number): number|null;
/**
* Return true if the buffer contains any astral-plane Unicode characters that
* are encoded as surrogate pairs.
*/
hasAstral(): boolean;
// Mutating Text
/** Replace the entire contents of the buffer with the given text. */
setText(text: string): Range;
/**
* Replace the current buffer contents by applying a diff based on the
* given text.
*/
setTextViaDiff(text: string): void;
/** Set the text in the given range. */
setTextInRange(range: RangeCompatible, text: string, options?: TextEditOptions): Range;
/** Insert text at the given position. */
insert(position: PointCompatible, text: string, options?: TextEditOptions): Range;
/** Append text to the end of the buffer. */
append(text: string, options?: TextEditOptions): Range;
/** Delete the text in the given range. */
delete(range: RangeCompatible): Range;
/**
* Delete the line associated with a specified 0-indexed row.
* @param row A number representing the row to delete.
*/
deleteRow(row: number): Range;
/**
* Delete the lines associated with the specified 0-indexed row range.
*
* If the row range is out of bounds, it will be clipped. If the `startRow`
* is greater than the `endRow`, they will be reordered.
*/
deleteRows(startRow: number, endRow: number): Range;
// Markers
/** Create a layer to contain a set of related markers. */
addMarkerLayer(options?: { maintainHistory?: boolean, persistent?: boolean, role?: string }):
MarkerLayer;
/**
* Get a MarkerLayer by id.
* Returns a MarkerLayer or undefined if no layer exists with the given id.
*/
getMarkerLayer(id: string): MarkerLayer|undefined;
/** Get the default MarkerLayer. */
getDefaultMarkerLayer(): MarkerLayer;
/** Create a marker with the given range in the default marker layer. */
markRange(range: RangeCompatible, properties?: { reversed?: boolean,
invalidate?: "never"|"surround"|"overlap"|"inside"|"touch",
exclusive?: boolean }): Marker;
/** Create a marker at the given position with no tail in the default marker layer. */
markPosition(position: PointCompatible, options?: { invalidate?: "never"|"surround"
|"overlap"|"inside"|"touch", exclusive?: boolean }): Marker;
/** Get all existing markers on the default marker layer. */
getMarkers(): Marker[];
/** Get an existing marker by its id from the default marker layer. */
getMarker(id: number): Marker;
/** Find markers conforming to the given parameters in the default marker layer. */
findMarkers(params: FindMarkerOptions): Marker[];
/** Get the number of markers in the default marker layer. */
getMarkerCount(): number;
// History
/**
* Undo the last operation. If a transaction is in progress, aborts it.
* @return A boolean of whether or not a change was made.
*/
undo(options?: HistoryTraversalOptions): boolean;
/**
* Redo the last operation.
* @return A boolean of whether or not a change was made.
*/
redo(options?: HistoryTraversalOptions): boolean;
/** Batch multiple operations as a single undo/redo step. */
transact<T>(optionsOrInterval: number | { groupingInterval?: number } &
HistoryTransactionOptions, fn: () => T): T;
/** Batch multiple operations as a single undo/redo step. */
transact<T>(fn: () => T): T;
/**
* Abort the currently running transaction.
*
* Only intended to be called within the `fn` option to `::transact`.
*/
abortTransaction(): void;
/** Clear the undo stack. */
clearUndoStack(): void;
/**
* Create a pointer to the current state of the buffer for use with
* `::revertToCheckpoint` and `::groupChangesSinceCheckpoint`.
* @return A checkpoint ID value.
*/
createCheckpoint(options?: HistoryTransactionOptions): number;
/**
* Revert the buffer to the state it was in when the given checkpoint was created.
* @return A boolean indicating whether the operation succeeded.
*/
revertToCheckpoint(checkpoint: number, options?: HistoryTraversalOptions):
boolean;
/**
* Group all changes since the given checkpoint into a single transaction for
* purposes of undo/redo.
* @return A boolean indicating whether the operation succeeded.
*/
groupChangesSinceCheckpoint(checkpoint: number, options?: HistoryTransactionOptions): boolean;
/**
* Group the last two text changes for purposes of undo/redo.
*
* This operation will only succeed if there are two changes on the undo stack.
* It will not group past the beginning of an open transaction.
* @return A boolean indicating whether the operation succeeded.
*/
groupLastChanges(): boolean;
/**
* Returns a list of changes since the given checkpoint.
* If the given checkpoint is no longer present in the undo history, this method
* will return an empty Array.
*/
getChangesSinceCheckpoint(checkpoint: number): Array<{
/** A Point representing where the change started. */
start: Point,
/** A Point representing the replaced extent. */
oldExtent: Point,
/** A Point representing the replacement extent. */
newExtent: Point,
/** A String representing the replacement text. */
newText: string
}>;
// Search and Replace
/**
* Scan regular expression matches in the entire buffer, calling the given
* iterator function on each match.
*/
scan(regex: RegExp, iterator: (params: BufferScanResult) => void): void;
/**
* Scan regular expression matches in the entire buffer, calling the given
* iterator function on each match.
*/
scan(regex: RegExp, options: ScanContextOptions, iterator: (params:
ContextualBufferScanResult) => void): void;
/**
* Scan regular expression matches in the entire buffer in reverse order,
* calling the given iterator function on each match.
*/
backwardsScan(regex: RegExp, iterator: (params: BufferScanResult) => void): void;
/**
* Scan regular expression matches in the entire buffer in reverse order,
* calling the given iterator function on each match.
*/
backwardsScan(regex: RegExp, options: ScanContextOptions, iterator: (params:
ContextualBufferScanResult) => void): void;
/**
* Scan regular expression matches in a given range , calling the given
* iterator function on each match.
*/
scanInRange(regex: RegExp, range: RangeCompatible, iterator:
(params: BufferScanResult) => void): void;
/**
* Scan regular expression matches in a given range , calling the given
* iterator function on each match.
*/
scanInRange(regex: RegExp, range: RangeCompatible, options: ScanContextOptions,
iterator: (params: ContextualBufferScanResult) => void): void;
/**
* Scan regular expression matches in a given range in reverse order,
* calling the given iterator function on each match.
*/
backwardsScanInRange(regex: RegExp, range: RangeCompatible, iterator:
(params: BufferScanResult) => void): void;
/**
* Scan regular expression matches in a given range in reverse order,
* calling the given iterator function on each match.
*/
backwardsScanInRange(regex: RegExp, range: RangeCompatible, options: ScanContextOptions,
iterator: (params: ContextualBufferScanResult) => void): void;
/** Replace all regular expression matches in the entire buffer. */
replace(regex: RegExp, replacementText: string): number;
// Buffer Range Details
/** Get the range spanning from [0, 0] to ::getEndPosition. */
getRange(): Range;
/** Get the number of lines in the buffer. */
getLineCount(): number;
/** Get the last 0-indexed row in the buffer. */
getLastRow(): number;
/** Get the first position in the buffer, which is always [0, 0]. */
getFirstPosition(): Point;
/** Get the maximal position in the buffer, where new text would be appended. */
getEndPosition(): Point;
/** Get the length of the buffer's text. */
getLength(): number;
/** Get the length of the buffer in characters. */
getMaxCharacterIndex(): number;
/**
* Get the range for the given row.
* @param row A number representing a 0-indexed row.
* @param includeNewline A boolean indicating whether or not to include the
* newline, which results in a range that extends to the start of the next line.
* (default: false)
*/
rangeForRow(row: number, includeNewline?: boolean): Range;
/**
* Convert a position in the buffer in row/column coordinates to an absolute
* character offset, inclusive of line ending characters.
*/
characterIndexForPosition(position: PointCompatible): number;
/**
* Convert an absolute character offset, inclusive of newlines, to a position
* in the buffer in row/column coordinates.
*/
positionForCharacterIndex(offset: number): Point;
/** Clip the given range so it starts and ends at valid positions. */
clipRange(range: RangeCompatible): Range;
/** Clip the given point so it is at a valid position in the buffer. */
clipPosition(position: PointCompatible): Point;
// Buffer Operations
/** Save the buffer. */
save(): Promise<void>;
/** Save the buffer at a specific path. */
saveAs(filePath: string): Promise<void>;
/** Reload the buffer's contents from disk. */
reload(): void;
/** Destroy the buffer, even if there are retainers for it. */
destroy(): void;
/** Returns whether or not this buffer is alive. */
isAlive(): boolean;
/** Returns whether or not this buffer has been destroyed. */
isDestroyed(): boolean;
/** Returns whether or not this buffer has a retainer. */
isRetained(): boolean;
/**
* Places a retainer on the buffer, preventing its destruction until the
* final retainer has called ::release().
*/
retain(): TextBuffer;
/**
* Releases a retainer on the buffer, destroying the buffer if there are
* no additional retainers.
*/
release(): TextBuffer;
/** Identifies if the buffer belongs to multiple editors. */
hasMultipleEditors(): boolean;
}
/** Handles loading and activating available themes. */
export interface ThemeManager {
// Event Subscription
/**
* Invoke callback when style sheet changes associated with updating the
* list of active themes have completed.
*/
onDidChangeActiveThemes(callback: () => void): Disposable;
// Accessing Loaded Themes
/** Returns an Array of strings of all the loaded theme names. */
getLoadedThemeNames(): string[]|undefined;
/** Returns an Array of all the loaded themes. */
getLoadedThemes(): Package[]|undefined;
// Managing Enabled Themes
/** Returns an Array of strings all the active theme names. */
getActiveThemeNames(): string[]|undefined;
/** Returns an Array of all the active themes. */
getActiveThemes(): Package[]|undefined;
// Managing Enabled Themes
/** Get the enabled theme names from the config. */
getEnabledThemeNames(): string[];
}
// Events =====================================================================
// The event objects that are passed into the callbacks which the user provides to
// specific API calls.
export interface AddedKeystrokeResolverEvent {
/**
* The currently resolved keystroke string. If your function returns a falsy
* value, this is how Atom will resolve your keystroke.
*/
keystroke: string;
/**
* The raw DOM 3 `KeyboardEvent` being resolved. See the DOM API documentation
* for more details.
*/
event: KeyboardEvent;
/** The OS-specific name of the current keyboard layout. */
layoutName: string;
/**
* An object mapping DOM 3 `KeyboardEvent.code` values to objects with the
* typed character for that key in each modifier state, based on the current
* operating system layout.
*/
keymap: object;
}
export interface BufferChangingEvent {
/** Range of the old text. */
oldRange: Range;
}
export interface BufferChangedEvent {
/**
* An array of objects summarizing the aggregated changes that occurred
* during the transaction.
*/
changes: Array<{
/**
* The Range of the deleted text in the contents of the buffer as it existed
* before the batch of changes reported by this event.
*/
oldRange: Range;
/** The Range of the inserted text in the current contents of the buffer. */
newRange: Range;
}>;
/** Range of the old text. */
oldRange: Range;
/** Range of the new text. */
newRange: Range;
/** String containing the text that was replaced. */
oldText: string;
/** String containing the text that was inserted. */
newText: string;
}
export interface BufferStoppedChangingEvent {
changes: TextChange[];
}
/**
* This custom subclass of CustomEvent exists to provide the ::abortKeyBinding
* method, as well as versions of the ::stopPropagation methods that record the
* intent to stop propagation so event bubbling can be properly simulated for
* detached elements.
*/
export interface CommandEvent<CurrentTarget extends EventTarget = EventTarget> extends CustomEvent {
keyBindingAborted: boolean;
propagationStopped: boolean;
abortKeyBinding(): void;
stopPropagation(): CustomEvent;
stopImmediatePropagation(): CustomEvent;
currentTarget: CurrentTarget;
}
export interface CursorPositionChangedEvent {
oldBufferPosition: Point;
oldScreenPosition: Point;
newBufferPosition: Point;
newScreenPosition: Point;
textChanged: boolean;
cursor: Cursor;
}
export interface DecorationPropsChangedEvent {
/** Object the old parameters the decoration used to have. */
oldProperties: DecorationOptions;
/** Object the new parameters the decoration now has */
newProperties: DecorationOptions;
}
export interface DisplayMarkerChangedEvent {
/** Point representing the former head buffer position. */
oldHeadBufferPosition: Point;
/** Point representing the new head buffer position. */
newHeadBufferPosition: Point;
// Point representing the former tail buffer position. */
oldTailBufferPosition: Point;
/** Point representing the new tail buffer position. */
newTailBufferPosition: Point;
/** Point representing the former head screen position. */
oldHeadScreenPosition: Point;
/** Point representing the new head screen position. */
newHeadScreenPosition: Point;
/** Point representing the former tail screen position. */
oldTailScreenPosition: Point;
/** Point representing the new tail screen position. */
newTailScreenPosition: Point;
/** Boolean indicating whether the marker was valid before the change. */
wasValid: boolean;
/** Boolean indicating whether the marker is now valid. */
isValid: boolean;
/** Boolean indicating whether the marker had a tail before the change. */
hadTail: boolean;
/** Boolean indicating whether the marker now has a tail */
hasTail: boolean;
/**
* -DEPRECATED- Object containing the marker's custom properties before the change.
* @deprecated
*/
oldProperties: object;
/**
* -DEPRECATED- Object containing the marker's custom properties after the change.
* @deprecated
*/
newProperties: object;
/**
* Boolean indicating whether this change was caused by a textual change to the
* buffer or whether the marker was manipulated directly via its public API.
*/
textChanged: boolean;
}
export interface EditorChangedEvent {
/** A Point representing where the change started. */
start: Point;
/** A Point representing the replaced extent. */
oldExtent: Point;
/** A Point representing the replacement extent. */
newExtent: Point;
}
export interface ExceptionThrownEvent {
originalError: Error;
message: string;
url: string;
line: number;
column: number;
}
export interface FailedKeybindingMatchEvent {
/** The string of keystrokes that failed to match the binding. */
keystrokes: string;
/** The DOM element that was the target of the most recent keyboard event. */
keyboardEventTarget: Element;
}
export interface FailedKeymapFileReadEvent {
/** The error message. */
message: string;
/** The error stack trace. */
stack: string;
}
export interface FileSavedEvent {
/** The path to which the buffer was saved. */
path: string;
}
export interface FilesystemChangeBasic<
Action extends "created"|"modified"|"deleted"|"renamed"
= "created"|"modified"|"deleted"
> {
/** A string describing the filesystem action that occurred. */
action: Action;
/** The absolute path to the filesystem entry that was acted upon. */
path: string;
}
export interface FilesystemChangeRename extends FilesystemChangeBasic<"renamed"> {
/**
* For rename events, a string containing the filesystem entry's former
* absolute path.
*/
oldPath: string;
}
export type FilesystemChange = FilesystemChangeBasic|FilesystemChangeRename;
export type FilesystemChangeEvent = FilesystemChange[];
export interface FullKeybindingMatchEvent {
/** The string of keystrokes that matched the binding. */
keystrokes: string;
/** The KeyBinding that the keystrokes matched. */
binding: KeyBinding;
/** The DOM element that was the target of the most recent keyboard event. */
keyboardEventTarget: Element;
}
export interface HandleableErrorEvent {
/** The error object. */
error: Error;
/**
* Call this function to indicate you have handled the error.
* The error will not be thrown if this function is called.
*/
handle(): void;
}
export interface KeymapLoadedEvent {
/** The path of the keymap file. */
path: string;
}
export interface MarkerChangedEvent {
/** Point representing the former head position. */
oldHeadPosition: Point;
/** Point representing the new head position. */
newHeadPosition: Point;
/** Point representing the former tail position. */
oldTailPosition: Point;
/** Point representing the new tail position. */
newTailPosition: Point;
/** Boolean indicating whether the marker was valid before the change. */
wasValid: boolean;
/** Boolean indicating whether the marker is now valid. */
isValid: boolean;
/** Boolean indicating whether the marker had a tail before the change. */
hadTail: boolean;
/** Boolean indicating whether the marker now has a tail. */
hasTail: boolean;
/**
* -DEPRECATED- Object containing the marker's custom properties before the change.
* @deprecated
*/
oldProperties: object;
/**
* -DEPRECATED- Object containing the marker's custom properties after the change.
* @deprecated
*/
newProperties: object;
/**
* Boolean indicating whether this change was caused by a textual
* change to the buffer or whether the marker was manipulated directly
* via its public API.
*/
textChanged: boolean;
}
export interface PaneItemObservedEvent {
item: object;
pane: Pane;
index: number;
}
export interface PaneListItemShiftedEvent {
/** The pane item that was added or removed. */
item: object;
/** A number indicating where the item is located. */
index: number;
}
export interface PaneItemMovedEvent {
/** The removed pane item. */
item: object;
/** A number indicating where the item was located. */
oldIndex: number;
/** A number indicating where the item is now located. */
newIndex: number;
}
export interface PaneItemOpenedEvent extends PaneItemObservedEvent {
uri: string;
}
export interface PartialKeybindingMatchEvent {
/** The string of keystrokes that matched the binding. */
keystrokes: string;
/** The KeyBindings that the keystrokes partially matched. */
partiallyMatchedBindings: KeyBinding[];
/** DOM element that was the target of the most recent keyboard event. */
keyboardEventTarget: Element;
}
export interface PathWatchErrorThrownEvent {
/** The error object. */
error: Error;
/**
* Call this function to indicate you have handled the error.
* The error will not be thrown if this function is called.
*/
handle(): void;
}
export interface PreventableExceptionThrownEvent extends ExceptionThrownEvent {
preventDefault(): void;
}
export interface RepoStatusChangedEvent {
path: string;
/**
* This value can be passed to ::isStatusModified or ::isStatusNew to get more
* information.
*/
pathStatus: number;
}
export interface SelectionChangedEvent {
oldBufferRange: Range;
oldScreenRange: Range;
newBufferRange: Range;
newScreenRange: Range;
selection: Selection;
}
export interface StyleElementObservedEvent extends HTMLStyleElement {
sourcePath: string;
context: string;
}
export interface TextEditorObservedEvent {
textEditor: TextEditor;
pane: Pane;
index: number;
}
// Extendables ================================================================
// Interfaces which can be augmented in order to provide additional type
// information under certain contexts.
// NOTE: the config schema with these defaults can be found here:
// https://github.com/atom/atom/blob/v1.36.0/src/config-schema.js
/**
* Allows you to strongly type Atom configuration variables. Additional key:value
* pairings merged into this interface will result in configuration values under
* the value of each key being templated by the type of the associated value.
*/
export interface ConfigValues {
/**
* List of glob patterns. Files and directories matching these patterns will be
* ignored by some packages, such as the fuzzy finder and tree view. Individual
* packages might have additional config settings for ignoring names.
*/
"core.ignoredNames": string[];
/**
* Files and directories ignored by the current project's VCS system will be ignored
* by some packages, such as the fuzzy finder and find and replace. For example,
* projects using Git have these paths defined in the .gitignore file. Individual
* packages might have additional config settings for ignoring VCS ignored files and
* folders.
*/
"core.excludeVcsIgnoredPaths": boolean;
/**
* Follow symbolic links when searching files and when opening files with the fuzzy
* finder.
*/
"core.followSymlinks": boolean;
/** List of names of installed packages which are not loaded at startup. */
"core.disabledPackages": string[];
/** List of names of installed packages which are not automatically updated. */
"core.versionPinnedPackages": string[];
/**
* Associates scope names (e.g. "source.coffee") with arrays of file extensions
* and file names (e.g. ["Cakefile", ".coffee2"]).
*/
"core.customFileTypes": {
[key: string]: string[];
};
/** Names of UI and syntax themes which will be used when Atom starts. */
"core.themes": string[];
/**
* Trigger the system's beep sound when certain actions cannot be executed or
* there are no results.
*/
"core.audioBeep": boolean;
/** Close corresponding editors when a file is deleted outside Atom. */
"core.closeDeletedFileTabs": boolean;
/** When the last tab of a pane is closed, remove that pane as well. */
"core.destroyEmptyPanes": boolean;
/**
* When a window with no open tabs or panes is given the 'Close Tab' command,
* close that window.
*/
"core.closeEmptyWindows": boolean;
/** Default character set encoding to use when reading and writing files. */
"core.fileEncoding": FileEncoding;
/**
* When checked opens an untitled editor when loading a blank environment (such as
* with 'File > New Window' or when "Restore Previous Windows On Start" is unchecked);
* otherwise, no editor is opened when loading a blank environment.
* This setting has no effect when restoring a previous state.
*/
"core.openEmptyEditorOnStart": boolean;
/**
* When selected 'no', a blank environment is loaded. When selected 'yes' and Atom
* is started from the icon or `atom` by itself from the command line, restores the
* last state of all Atom windows; otherwise a blank environment is loaded. When
* selected 'always', restores the last state of all Atom windows always, no matter
* how Atom is started.
*/
"core.restorePreviousWindowsOnStart": "no"|"yes"|"always";
/** How many recent projects to show in the Reopen Project menu. */
"core.reopenProjectMenuCount": number;
/** Automatically update Atom when a new release is available. */
"core.automaticallyUpdate": boolean;
/** Use detected proxy settings when calling the `apm` command-line tool. */
"core.useProxySettingsWhenCallingApm": boolean;
/**
* Allow items to be previewed without adding them to a pane permanently, such as
* when single clicking files in the tree view.
*/
"core.allowPendingPaneItems": boolean;
/**
* Allow usage statistics and exception reports to be sent to the Atom team to help
* improve the product.
*/
"core.telemetryConsent": "limited"|"no"|"undecided";
/** Warn before opening files larger than this number of megabytes. */
"core.warnOnLargeFileLimit": number;
/**
* Choose the underlying implementation used to watch for filesystem changes. Emulating
* changes will miss any events caused by applications other than Atom, but may help
* prevent crashes or freezes.
*/
"core.fileSystemWatcher": "native"|"experimental"|"poll"|"atom";
/** Experimental: Use the new Tree-sitter parsing system for supported languages. */
"core.useTreeSitterParsers": boolean;
/**
* Specify whether Atom should use the operating system's color profile (recommended)
* or an alternative color profile.
*/
"core.colorProfile": "default"|"srgb";
"editor.commentStart": string|null;
"editor.commentEnd": string|null;
"editor.increaseIndentPattern": string|null;
"editor.decreaseIndentPattern": string|null;
"editor.foldEndPattern": string|null;
/** The name of the font family used for editor text. */
"editor.fontFamily": string;
/** Height in pixels of editor text. */
"editor.fontSize": number;
/** Height of editor lines, as a multiplier of font size. */
"editor.lineHeight": string|number;
/** Show cursor while there is a selection. */
"editor.showCursorOnSelection": boolean;
/** Render placeholders for invisible characters, such as tabs, spaces and newlines. */
"editor.showInvisibles": boolean;
/** Show indentation indicators in the editor. */
"editor.showIndentGuide": boolean;
/** Show line numbers in the editor's gutter. */
"editor.showLineNumbers": boolean;
/** Skip over tab-length runs of leading whitespace when moving the cursor. */
"editor.atomicSoftTabs": boolean;
/** Automatically indent the cursor when inserting a newline. */
"editor.autoIndent": boolean;
/** Automatically indent pasted text based on the indentation of the previous line. */
"editor.autoIndentOnPaste": boolean;
/** A string of non-word characters to define word boundaries. */
"editor.nonWordCharacters": string;
/**
* Identifies the length of a line which is used when wrapping text with the
* `Soft Wrap At Preferred Line Length` setting enabled, in number of characters.
*/
"editor.preferredLineLength": number;
/**
* Defines the maximum width of the editor window before soft wrapping is enforced,
* in number of characters.
*/
"editor.maxScreenLineLength": number;
/** Number of spaces used to represent a tab. */
"editor.tabLength": number;
/**
* Wraps lines that exceed the width of the window. When `Soft Wrap At Preferred
* Line Length` is set, it will wrap to the number of characters defined by the
* `Preferred Line Length` setting.
*/
"editor.softWrap": boolean;
/**
* If the `Tab Type` config setting is set to "auto" and autodetection of tab type
* from buffer content fails, then this config setting determines whether a soft tab
* or a hard tab will be inserted when the Tab key is pressed.
*/
"editor.softTabs": boolean;
/**
* Determine character inserted when Tab key is pressed. Possible values: "auto",
* "soft" and "hard". When set to "soft" or "hard", soft tabs (spaces) or hard tabs
* (tab characters) are used. When set to "auto", the editor auto-detects the tab
* type based on the contents of the buffer (it uses the first leading whitespace
* on a non-comment line), or uses the value of the Soft Tabs config setting if
* auto-detection fails.
*/
"editor.tabType": "auto"|"soft"|"hard";
/**
* Instead of wrapping lines to the window's width, wrap lines to the number of
* characters defined by the `Preferred Line Length` setting. This will only take
* effect when the soft wrap config setting is enabled globally or for the current
* language.
* **Note:** If you want to hide the wrap guide (the vertical line) you can disable
* the `wrap-guide` package.
*/
"editor.softWrapAtPreferredLineLength": boolean;
/**
* When soft wrap is enabled, defines length of additional indentation applied to
* wrapped lines, in number of characters.
*/
"editor.softWrapHangingIndent": number;
/** Determines how fast the editor scrolls when using a mouse or trackpad. */
"editor.scrollSensitivity": number;
/** Allow the editor to be scrolled past the end of the last line. */
"editor.scrollPastEnd": boolean;
/**
* Time interval in milliseconds within which text editing operations will be
* grouped together in the undo history.
*/
"editor.undoGroupingInterval": number;
/**
* Show confirmation dialog when checking out the HEAD revision and discarding
* changes to current file since last commit.
*/
"editor.confirmCheckoutHeadRevision": boolean;
/**
* A hash of characters Atom will use to render whitespace characters. Keys are
* whitespace character types, values are rendered characters (use value false to
* turn off individual whitespace character types).
*/
"editor.invisibles": Invisibles;
/**
* Change the editor font size when pressing the Ctrl key and scrolling the mouse
* up/down.
*/
"editor.zoomFontWhenCtrlScrolling": boolean;
// tslint:disable-next-line:no-any
[key: string]: any;
}
// Options ====================================================================
// The option objects that the user is expected to fill out and provide to
// specific API call.
export interface BufferLoadOptions {
/** The file's encoding. */
encoding?: string;
/**
* A function that returns a boolean indicating whether the buffer should
* be destroyed if its file is deleted.
*/
shouldDestroyOnFileDelete?(): boolean;
}
export interface BuildEnvironmentOptions {
/**
* An object responsible for Atom's interaction with the browser process and host OS.
* Use buildDefaultApplicationDelegate for a default instance.
*/
applicationDelegate?: object;
/** A window global. */
window?: Window;
/** A document global. */
document?: Document;
/** A path to the configuration directory (usually ~/.atom). */
configDirPath?: string;
/**
* A boolean indicating whether the Atom environment should save or load state
* from the file system. You probably want this to be false.
*/
enablePersistence?: boolean;
}
export interface ConfirmationOptions {
/** The type of the confirmation prompt. */
type?: "none"|"info"|"error"|"question"|"warning";
/** The text for the buttons. */
buttons?: ReadonlyArray<string>;
/** The index for the button to be selected by default in the prompt. */
defaultId?: number;
/** The title for the prompt. */
title?: string;
/** The content of the message box. */
message?: string;
/** Additional information regarding the message. */
detail?: string;
/** If provided, the message box will include a checkbox with the given label. */
checkboxLabel?: string;
/** Initial checked state of the checkbox. false by default. */
checkboxChecked?: boolean;
/** An Electron NativeImage to use as the prompt's icon. */
icon?: object;
/**
* The index of the button to be used to cancel the dialog, via the `Esc` key.
* By default this is assigned to the first button with "cancel" or "no" as the
* label. If no such labeled buttons exist and this option is not set, 0 will be
* used as the return value or callback response.
*
* This option is ignored on Windows.
*/
cancelId?: number;
/**
* On Windows, Electron will try to figure out which one of the buttons are
* common buttons (like `Cancel` or `Yes`), and show the others as command links
* in the dialog. This can make the dialog appear in the style of modern Windows
* apps. If you don't like this behavior, you can set noLink to true.
*/
noLink?: boolean;
/**
* Normalize the keyboard access keys across platforms.
* Atom defaults this to true.
*/
normalizeAccessKeys?: boolean;
}
export interface ContextMenuItemOptions {
/** The menu item's label. */
label?: string;
/**
* The command to invoke on the target of the right click that invoked the
* context menu.
*/
command?: string;
/**
* Whether the menu item should be clickable. Disabled menu items typically
* appear grayed out. Defaults to true.
*/
enabled?: boolean;
/** An array of additional items. */
submenu?: ReadonlyArray<ContextMenuOptions>;
/** Whether the menu item should appear in the menu. Defaults to true. */
visible?: boolean;
/**
* A function that is called on the item each time a context menu is created
* via a right click.
*/
created?(event: Event): void;
/**
* A function that is called to determine whether to display this item on a
* given context menu deployment.
*/
shouldDisplay?(event: Event): void;
/** Place this menu item before the menu items representing the given commands. */
before?: ReadonlyArray<string>;
/** Place this menu item after the menu items representing the given commands. */
after?: ReadonlyArray<string>;
/**
* Place this menu item's group before the containing group of the menu items
* representing the given commands.
*/
beforeGroupContaining?: ReadonlyArray<string>;
/**
* Place this menu item's group after the containing group of the menu items
* representing the given commands.
*/
afterGroupContaining?: ReadonlyArray<string>;
}
export type ContextMenuOptions = ContextMenuItemOptions | { type: "separator" };
export interface CopyMarkerOptions {
/** Whether or not the marker should be tailed. */
tailed?: boolean;
/** Creates the marker in a reversed orientation. */
reversed?: boolean;
/** Determines the rules by which changes to the buffer invalidate the marker. */
invalidate?: "never"|"surround"|"overlap"|"inside"|"touch";
/**
* Indicates whether insertions at the start or end of the marked range should
* be interpreted as happening outside the marker.
*/
exclusive?: boolean;
/** -DEPRECATED- Custom properties to be associated with the marker. */
properties?: object;
}
export interface DecorationLayerOptions extends SharedDecorationOptions {
/** One of several supported decoration types. */
type?: "line"|"line-number"|"text"|"highlight"|"block"|"cursor";
}
export interface DecorationOptions extends SharedDecorationOptions {
/** One of several supported decoration types. */
type?: "line"|"line-number"|"text"|"highlight"|"overlay"|"gutter"|"block"|"cursor";
/** The name of the gutter we're decorating, if type is "gutter". */
gutterName?: string;
}
export interface ErrorNotificationOptions extends NotificationOptions {
stack?: string;
}
export interface FindDisplayMarkerOptions {
/** Only include markers starting at this Point in buffer coordinates. */
startBufferPosition?: PointCompatible;
/** Only include markers ending at this Point in buffer coordinates. */
endBufferPosition?: PointCompatible;
/** Only include markers starting at this Point in screen coordinates. */
startScreenPosition?: PointCompatible;
/** Only include markers ending at this Point in screen coordinates. */
endScreenPosition?: PointCompatible;
/** Only include markers starting inside this Range in buffer coordinates. */
startsInBufferRange?: RangeCompatible;
/** Only include markers ending inside this Range in buffer coordinates. */
endsInBufferRange?: RangeCompatible;
/** Only include markers starting inside this Range in screen coordinates. */
startsInScreenRange?: RangeCompatible;
/** Only include markers ending inside this Range in screen coordinates. */
endsInScreenRange?: RangeCompatible;
/** Only include markers starting at this row in buffer coordinates. */
startBufferRow?: number;
/** Only include markers ending at this row in buffer coordinates. */
endBufferRow?: number;
/** Only include markers starting at this row in screen coordinates. */
startScreenRow?: number;
/** Only include markers ending at this row in screen coordinates. */
endScreenRow?: number;
/**
* Only include markers intersecting this Array of [startRow, endRow] in
* buffer coordinates.
*/
intersectsBufferRowRange?: [number, number];
/**
* Only include markers intersecting this Array of [startRow, endRow] in
* screen coordinates.
*/
intersectsScreenRowRange?: [number, number];
/** Only include markers containing this Range in buffer coordinates. */
containsBufferRange?: RangeCompatible;
/** Only include markers containing this Point in buffer coordinates. */
containsBufferPosition?: PointCompatible;
/** Only include markers contained in this Range in buffer coordinates. */
containedInBufferRange?: RangeCompatible;
/** Only include markers contained in this Range in screen coordinates. */
containedInScreenRange?: RangeCompatible;
/** Only include markers intersecting this Range in buffer coordinates. */
intersectsBufferRange?: RangeCompatible;
/** Only include markers intersecting this Range in screen coordinates. */
intersectsScreenRange?: RangeCompatible;
}
export interface FindMarkerOptions {
/** Only include markers that start at the given Point. */
startPosition?: PointCompatible;
/** Only include markers that end at the given Point. */
endPosition?: PointCompatible;
/** Only include markers that start inside the given Range. */
startsInRange?: RangeCompatible;
/** Only include markers that end inside the given Range. */
endsInRange?: RangeCompatible;
/** Only include markers that contain the given Point, inclusive. */
containsPoint?: PointCompatible;
/** Only include markers that contain the given Range, inclusive. */
containsRange?: RangeCompatible;
/** Only include markers that start at the given row number. */
startRow?: number;
/** Only include markers that end at the given row number. */
endRow?: number;
/** Only include markers that intersect the given row number. */
intersectsRow?: number;
}
export interface HistoryTransactionOptions {
/** When provided, skip taking snapshot for other selections markerLayers except given one. */
selectionsMarkerLayer?: MarkerLayer;
}
export interface HistoryTraversalOptions {
/** Restore snapshot of selections marker layer to given selectionsMarkerLayer. */
selectionsMarkerLayer?: MarkerLayer;
}
export interface MenuOptions {
/** The menu itme's label. */
label: string;
/** An array of sub menus. */
submenu?: ReadonlyArray<MenuOptions>;
/** The command to trigger when the item is clicked. */
command?: string;
}
export interface NodeProcessOptions {
/** The command to execute. */
command: string;
/** The array of arguments to pass to the command. */
args?: ReadonlyArray<string>;
/** The options object to pass to Node's ChildProcess.spawn method. */
options?: SpawnProcessOptions;
/**
* The callback that receives a single argument which contains the standard
* output from the command.
*/
stdout?(data: string): void;
/**
* The callback that receives a single argument which contains the standard
* error output from the command.
*/
stderr?(data: string): void;
/** The callback which receives a single argument containing the exit status. */
exit?(code: number): void;
}
export interface NotificationOptions {
buttons?: Array<{
className?: string;
onDidClick?(event: MouseEvent): void;
text?: string;
}>;
description?: string;
detail?: string;
dismissable?: boolean;
icon?: string;
}
export interface ProcessOptions extends NodeProcessOptions {
/**
* Whether the command will automatically start when this BufferedProcess is
* created.
*/
autoStart?: boolean;
}
export interface ReadonlyEditOptions {
/** Whether the readonly protections on the text editor should be ignored. */
bypassReadOnly?: boolean;
}
export interface ScanContextOptions {
/** The number of lines before the matched line to include in the results object. */
leadingContextLineCount?: number;
/** The number of lines after the matched line to include in the results object. */
trailingContextLineCount?: number;
}
export interface SharedDecorationOptions {
/**
* This CSS class will be applied to the decorated line number, line, highlight,
* or overlay.
*/
class?: string;
/**
* An Object containing CSS style properties to apply to the relevant DOM
* node. Currently this only works with a type of cursor or text.
*/
style?: object;
/**
* An HTMLElement or a model Object with a corresponding view registered. Only
* applicable to the gutter, overlay and block types.
*/
item?: object;
/**
* If true, the decoration will only be applied to the head of the DisplayMarker.
* Only applicable to the line and line-number types.
*/
onlyHead?: boolean;
/**
* If true, the decoration will only be applied if the associated DisplayMarker
* is empty. Only applicable to the gutter, line, and line-number types.
*/
onlyEmpty?: boolean;
/**
* If true, the decoration will only be applied if the associated DisplayMarker
* is non-empty. Only applicable to the gutter, line, and line-number types.
*/
onlyNonEmpty?: boolean;
/**
* If false, the decoration will be applied to the last row of a non-empty
* range, even if it ends at column 0. Defaults to true. Only applicable
* to the gutter, line, and line-number decoration types.
*/
omitEmptyLastRow?: boolean;
/**
* Only applicable to decorations of type overlay and block. Controls where the
* view is positioned relative to the TextEditorMarker. Values can be
* 'head' (the default) or 'tail' for overlay decorations, and 'before' (the default)
* or 'after' for block decorations.
*/
position?: "head"|"tail"|"before"|"after";
/**
* Only applicable to decorations of type block. Controls where the view is
* positioned relative to other block decorations at the same screen row.
* If unspecified, block decorations render oldest to newest.
*/
order?: number;
/**
* Only applicable to decorations of type overlay. Determines whether the decoration
* adjusts its horizontal or vertical position to remain fully visible when it would
* otherwise overflow the editor. Defaults to true.
*/
avoidOverflow?: boolean;
}
export interface SpawnProcessOptions {
/** Current working directory of the child process. */
cwd?: string;
/** Environment key-value pairs. */
env?: { [key: string]: string };
/** The child's stdio configuration. */
stdio?: string|Array<string|number>;
/** Prepare child to run independently of its parent process. */
detached?: boolean;
/** Sets the user identity of the process. */
uid?: number;
/** Sets the group identity of the process. */
gid?: number;
/**
* If true, runs command inside of a shell. Uses "/bin/sh" on UNIX, and process.env.ComSpec
* on Windows. A different shell can be specified as a string.
*/
shell?: boolean | string;
}
export interface TextEditOptions {
/** If true, all line endings will be normalized to match the editor's current mode. */
normalizeLineEndings?: boolean;
/**
* If skip, skips the undo stack for this operation.
* @deprecated Call groupLastChanges() on the TextBuffer afterward instead.
*/
undo?: "skip";
}
export interface TextInsertionOptions extends TextEditOptions {
/** If true, selects the newly added text. */
select?: boolean;
/** If true, indents all inserted text appropriately. */
autoIndent?: boolean;
/** If true, indent newline appropriately. */
autoIndentNewline?: boolean;
/**
* If true, decreases indent level appropriately (for example, when a closing
* bracket is inserted).
*/
autoDecreaseIndent?: boolean;
/**
* By default, when pasting multiple lines, Atom attempts to preserve the relative
* indent level between the first line and trailing lines, even if the indent
* level of the first line has changed from the copied text. If this option is
* true, this behavior is suppressed.
*/
preserveTrailingLineIndentation?: boolean;
}
/** The options for a Bootstrap 3 Tooltip class, which Atom uses a variant of. */
export interface TooltipOptions {
/** Apply a CSS fade transition to the tooltip. */
animation?: boolean;
/** Appends the tooltip to a specific element. */
container?: string|HTMLElement|false;
/**
* Delay showing and hiding the tooltip (ms) - does not apply to manual
* trigger type.
*/
delay?: number|{ show: number, hide: number };
/** Allow HTML in the tooltip. */
html?: boolean;
/** How to position the tooltip. */
placement?: "top"|"bottom"|"left"|"right"|"auto";
/**
* If a selector is provided, tooltip objects will be delegated to the
* specified targets.
*/
selector?: string;
/** Base HTML to use when creating the tooltip. */
template?: string;
/**
* Default title value if title attribute isn't present.
* If a function is given, it will be called with its this reference set to
* the element that the tooltip is attached to.
*/
title?: string|HTMLElement|(() => string);
/**
* How tooltip is triggered - click | hover | focus | manual.
* You may pass multiple triggers; separate them with a space.
*/
trigger?: string;
}
export interface WorkspaceOpenOptions {
/** A number indicating which row to move the cursor to initially. Defaults to 0. */
initialLine?: number;
/** A number indicating which column to move the cursor to initially. Defaults to 0. */
initialColumn?: number;
/**
* Either 'left', 'right', 'up' or 'down'. If 'left', the item will be opened in
* leftmost pane of the current active pane's row. If 'right', the item will be
* opened in the rightmost pane of the current active pane's row. If only one pane
* exists in the row, a new pane will be created. If 'up', the item will be opened
* in topmost pane of the current active pane's column. If 'down', the item will be
* opened in the bottommost pane of the current active pane's column. If only one pane
* exists in the column, a new pane will be created.
*/
split?: "left"|"right"|"up"|"down";
/**
* A boolean indicating whether to call Pane::activate on containing pane.
* Defaults to true.
*/
activatePane?: boolean;
/**
* A boolean indicating whether to call Pane::activateItem on containing pane.
* Defaults to true.
*/
activateItem?: boolean;
/**
* A Boolean indicating whether or not the item should be opened in a pending state.
* Existing pending items in a pane are replaced with new pending items when they
* are opened.
*/
pending?: boolean;
/**
* A boolean. If true, the workspace will attempt to activate an existing item for
* the given URI on any pane. If false, only the active pane will be searched for
* an existing item for the same URI. Defaults to false.
*/
searchAllPanes?: boolean;
/**
* A String containing the name of the location in which this item should be opened.
* If omitted, Atom will fall back to the last location in which a user has placed
* an item with the same URI or, if this is a new URI, the default location specified
* by the item.
* NOTE: This option should almost always be omitted to honor user preference.
*/
location?: "left"|"right"|"bottom"|"center";
}
export interface WorkspaceScanOptions {
/** An array of glob patterns to search within. */
paths?: ReadonlyArray<string>;
/** A function to be periodically called with the number of paths searched. */
onPathsSearched?(pathsSearched: number): void;
/** The number of lines before the matched line to include in the results object. */
leadingContextLineCount?: number;
/** The number of lines after the matched line to include in the results object. */
trailingContextLineCount?: number;
}
// Interfaces =================================================================
// The requirements placed on object parameters for specific API calls.
export interface Deserializer {
name: string;
deserialize(state: object): object;
}
export interface DisposableLike {
dispose(): void;
}
export interface JQueryCompatible<Element extends Node = HTMLElement> extends Iterable<Element> {
jquery: string;
}
/** The types usable when constructing a point via the Point::fromObject method. */
export type PointCompatible = PointLike|[number, number];
/** The interface that should be implemented for all "point-compatible" objects. */
export interface PointLike {
/** A zero-indexed number representing the row of the Point. */
row: number;
/** A zero-indexed number representing the column of the Point. */
column: number;
}
/** The types usable when constructing a range via the Range::fromObject method. */
export type RangeCompatible =
| RangeLike
| [PointLike, PointLike]
| [PointLike, [number, number]]
| [[number, number], PointLike]
| [[number, number], [number, number]];
/** The interface that should be implemented for all "range-compatible" objects. */
export interface RangeLike {
/** A Point representing the start of the Range. */
start: PointLike;
/** A Point representing the end of the Range. */
end: PointLike;
}
/** An interface which all custom test runners should implement. */
export type TestRunner = (params: TestRunnerParams) => Promise<number>;
// Structures =================================================================
// The structures that are passed to the user by Atom following specific API calls.
export interface BufferScanResult {
buffer: TextBuffer;
lineText: string;
match: RegExpExecArray;
matchText: string;
range: Range;
replace(replacementText: string): void;
stop(): void;
stopped: boolean;
}
export interface CancellablePromise<T> extends Promise<T> {
cancel(): void;
}
export interface ContextualBufferScanResult extends BufferScanResult {
leadingContextLines: string[];
trailingContextLines: string[];
}
export type FileEncoding =
| "iso88596" // Arabic (ISO 8859-6)
| "windows1256" // Arabic (Windows 1256)
| "iso88594" // Baltic (ISO 8859-4)
| "windows1257" // Baltic (Windows 1257)
| "iso885914" // Celtic (ISO 8859-14)
| "iso88592" // Central European (ISO 8859-2)
| "windows1250" // Central European (Windows 1250)
| "gb18030" // Chinese (GB18030)
| "gbk" // Chinese (GBK)
| "cp950" // Traditional Chinese (Big5)
| "big5hkscs" // Traditional Chinese (Big5-HKSCS)
| "cp866" // Cyrillic (CP 866)
| "iso88595" // Cyrillic (ISO 8859-5)
| "koi8r" // Cyrillic (KOI8-R)
| "koi8u" // Cyrillic (KOI8-U)
| "windows1251" // Cyrillic (Windows 1251)
| "cp437" // DOS (CP 437)
| "cp850" // DOS (CP 850)
| "iso885913" // Estonian (ISO 8859-13)
| "iso88597" // Greek (ISO 8859-7)
| "windows1253" // Greek (Windows 1253)
| "iso88598" // Hebrew (ISO 8859-8)
| "windows1255" // Hebrew (Windows 1255)
| "cp932" // Japanese (CP 932)
| "eucjp" // Japanese (EUC-JP)
| "shiftjis" // Japanese (Shift JIS)
| "euckr" // Korean (EUC-KR)
| "iso885910" // Nordic (ISO 8859-10)
| "iso885916" // Romanian (ISO 8859-16)
| "iso88599" // Turkish (ISO 8859-9)
| "windows1254" // Turkish (Windows 1254)
| "utf8" // Unicode (UTF-8)
| "utf16le" // Unicode (UTF-16 LE)
| "utf16be" // Unicode (UTF-16 BE)
| "windows1258" // Vietnamese (Windows 1258)
| "iso88591" // Western (ISO 8859-1)
| "iso88593" // Western (ISO 8859-3)
| "iso885915" // Western (ISO 8859-15)
| "macroman" // Western (Mac Roman)
| "windows1252"; // Western (Windows 1252)
export interface GrammarRule {
// https://github.com/atom/first-mate/blob/v7.0.7/src/rule.coffee
// This is private. Don't go down the rabbit hole.
rule: object;
scopeName: string;
contentScopeName: string;
}
export interface GrammarToken {
value: string;
scopes: string[];
}
export interface Invisibles {
/**
* Character used to render newline characters (\n) when the `Show Invisibles`
* setting is enabled.
*/
eol?: boolean|string;
/**
* Character used to render leading and trailing space characters when the
* `Show Invisibles` setting is enabled.
*/
space?: boolean|string;
/**
* Character used to render hard tab characters (\t) when the `Show Invisibles`
* setting is enabled.
*/
tab?: boolean|string;
/**
* Character used to render carriage return characters (for Microsoft-style line
* endings) when the `Show Invisibles` setting is enabled.
*/
cr?: boolean|string;
}
export interface KeyBinding {
// Properties
enabled: boolean;
source: string;
command: string;
keystrokes: string;
keystrokeArray: string[];
keystrokeCount: number;
selector: string;
specificity: number;
// Comparison
/** Determines whether the given keystroke matches any contained within this binding. */
matches(keystroke: string): boolean;
/**
* Compare another KeyBinding to this instance.
* Returns <= -1 if the argument is considered lesser or of lower priority.
* Returns 0 if this binding is equivalent to the argument.
* Returns >= 1 if the argument is considered greater or of higher priority.
*/
compare(other: KeyBinding): number;
}
export interface ProjectHistory {
paths: string[];
lastOpened: Date;
}
export interface ProjectSpecification {
paths: string[];
originPath: string;
config?: ConfigValues;
}
export interface ScandalResult {
filePath: string;
matches: Array<{
matchText: string;
lineText: string;
lineTextOffset: number;
range: [[number, number], [number, number]];
leadingContextLines: string[];
trailingContextLines: string[];
}>;
}
export interface TestRunnerParams {
/** An array of paths to tests to run. Could be paths to files or directories. */
testPaths: string[];
/**
* A function that can be called to construct an instance of the atom global.
* No atom global will be explicitly assigned, but you can assign one in your
* runner if desired.
*/
buildAtomEnvironment(options: BuildEnvironmentOptions): AtomEnvironment;
/**
* A function that builds a default instance of the application delegate, suitable
* to be passed as the applicationDelegate parameter to buildAtomEnvironment.
*/
buildDefaultApplicationDelegate(): object;
/** An optional path to a log file to which test output should be logged. */
logFile: string;
/**
* A boolean indicating whether or not the tests are being run from the command
* line via atom --test.
*/
headless: boolean;
}
export interface TextChange {
newExtent: Point;
oldExtent: Point;
newRange: Range;
oldRange: Range;
newText: string;
oldText: string;
start: Point;
}
/** Result returned by `Grammar.tokenizeLine`. */
export interface TokenizeLineResult {
/** The string of text that was tokenized. */
line: string;
/**
* An array of integer scope ids and strings. Positive ids indicate the
* beginning of a scope, and negative tags indicate the end. To resolve ids
* to scope names, call GrammarRegistry::scopeForId with the absolute
* value of the id.
*/
tags: Array<number|string>;
/**
* This is a dynamic property. Invoking it will incur additional overhead,
* but will automatically translate the `tags` into token objects with `value`
* and `scopes` properties.
*/
tokens: GrammarToken[];
/**
* An array of rules representing the tokenized state at the end of the line.
* These should be passed back into this method when tokenizing the next line
* in the file.
*/
ruleStack: GrammarRule[];
}
/**
* This tooltip class is derived from Bootstrap 3, but modified to not require
* jQuery, which is an expensive dependency we want to eliminate.
*/
export interface Tooltip {
readonly options: TooltipOptions;
readonly enabled: boolean;
readonly timeout: number;
readonly hoverState: "in"|"out"|null;
readonly element: HTMLElement;
getTitle(): string;
getTooltipElement(): HTMLElement;
getArrowElement(): HTMLElement;
enable(): void;
disable(): void;
toggleEnabled(): void;
toggle(): void;
recalculatePosition(): void;
}
export interface ViewModel {
getTitle: () => string;
}
export interface WindowLoadSettings {
readonly appVersion: string;
readonly atomHome: string;
readonly devMode: boolean;
readonly resourcePath: string;
readonly safeMode: boolean;
readonly env?: { [key: string]: string|undefined };
readonly profileStartup?: boolean;
}