From 6783a7b68cbe7f9844666df7da1e343b7d87b82f Mon Sep 17 00:00:00 2001 From: FelisDiligens <47528453+FelisDiligens@users.noreply.github.com> Date: Tue, 1 Aug 2023 15:51:50 +0200 Subject: [PATCH] Add relative line numbers (issue #2) --- src/cmoptions.ts | 15 +++++++++++++++ src/settings.ts | 10 ++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/cmoptions.ts b/src/cmoptions.ts index 52259f4..911383f 100644 --- a/src/cmoptions.ts +++ b/src/cmoptions.ts @@ -4,6 +4,17 @@ import { PluginSettings } from "./settings"; +function showRelativeLines(cm) { + // Source: https://github.com/codemirror/codemirror5/issues/4116 + const lineNum = cm.getCursor().line + 1; + if (cm.state.curLineNum === lineNum) { + return; + } + cm.state.curLineNum = lineNum; + cm.setOption('lineNumberFormatter', l => + l === lineNum ? lineNum : Math.abs(lineNum - l)); +} + module.exports = { default: function (context) { return { @@ -30,6 +41,10 @@ module.exports = { cm.setOption(key, value); } } + + // Apply relative line numbers: + if (settings.relativeLineNumbers) + cm.on('cursorActivity', showRelativeLines); }); }, diff --git a/src/settings.ts b/src/settings.ts index eb486ac..8bc8f7d 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -7,6 +7,7 @@ export interface PluginSettings { showCursorWhenSelecting: boolean; cursorBlinkRate: number; resetSelectionOnContextMenu: boolean; + relativeLineNumbers: boolean; fixLineNumbersCSS: boolean; } @@ -20,6 +21,7 @@ export async function getPluginSettings(): Promise { "showCursorWhenSelecting": await joplin.settings.value('cmoptions_showCursorWhenSelecting'), "cursorBlinkRate": await joplin.settings.value('cmoptions_cursorBlinkRate'), "resetSelectionOnContextMenu": await joplin.settings.value('cmoptions_resetSelectionOnContextMenu'), + "relativeLineNumbers": await joplin.settings.value('cmoptions_relativeLineNumbers'), "fixLineNumbersCSS": await joplin.settings.value('cmoptions_fixLineNumbersCSS'), } } @@ -77,6 +79,14 @@ export async function registerAllSettings() { label: 'Reset selection on context menu', description: 'Controls whether, when the context menu is opened with a click outside of the current selection, the cursor is moved to the point of the click. Defaults to true.', }, + ['cmoptions_relativeLineNumbers']: { + public: true, + section: section, + type: SettingItemType.Bool, + value: false, + label: 'Relative line numbers', + description: 'Enable vim-like relative line numbers', + }, ['cmoptions_fixLineNumbersCSS']: { public: true, section: section,