Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

opencode-vim

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

opencode-vim - npm Package Compare versions

Comparing version
0.0.9
to
0.0.10
+1
-1
package.json
{
"name": "opencode-vim",
"version": "0.0.9",
"version": "0.0.10",
"exports": {

@@ -5,0 +5,0 @@ "./tui": {

@@ -5,2 +5,3 @@ /** @jsxImportSource @opentui/solid */

import { onCleanup } from "solid-js"
import type { Accessor } from "solid-js"
import type { PromptContext, PromptModule } from "../../prompt/types"

@@ -17,3 +18,3 @@ import { applyVimCursorStyle, focusedInput } from "./actions"

export function createVimModule(options?: unknown): PromptModule {
export function createVimModule(options?: unknown, enabled: Accessor<boolean> = () => true): PromptModule {
const config = createVimConfig(options)

@@ -31,6 +32,6 @@ const log = createVimLog(config)

renderAbove(ctx) {
return <VimKeyboard ctx={ctx} config={config} state={state} log={log} />
return <VimKeyboard ctx={ctx} config={config} state={state} enabled={enabled} log={log} />
},
renderRight(ctx) {
return <VimStatus mode={state.mode} pending={() => readablePending(state.pending())} theme={ctx.api.theme.current} pendingDisplayDelay={config.pendingDisplayDelay} disabled={ctx.disabled} log={log} requestRender={ctx.requestRender} />
return <VimStatus mode={state.mode} pending={() => readablePending(state.pending())} enabled={enabled} theme={ctx.api.theme.current} pendingDisplayDelay={config.pendingDisplayDelay} disabled={ctx.disabled} log={log} requestRender={ctx.requestRender} />
},

@@ -40,3 +41,3 @@ }

function VimKeyboard(props: { ctx: PromptContext; config: VimConfig; state: ReturnType<typeof createVimState>; log: VimLog }) {
function VimKeyboard(props: { ctx: PromptContext; config: VimConfig; state: ReturnType<typeof createVimState>; enabled: Accessor<boolean>; log: VimLog }) {
let cursorStyleMode = ""

@@ -60,4 +61,4 @@ const vimee = createVimeeAdapter(props.state, props.config, props.log)

if (props.ctx.disabled || props.ctx.visible === false) {
props.log("keyboard.skip", { disabled: props.ctx.disabled, visible: props.ctx.visible })
if (!props.enabled() || props.ctx.disabled || props.ctx.visible === false) {
props.log("keyboard.skip", { enabled: props.enabled(), disabled: props.ctx.disabled, visible: props.ctx.visible })
return

@@ -64,0 +65,0 @@ }

@@ -13,2 +13,3 @@ /** @jsxImportSource @opentui/solid */

pending: Accessor<string | undefined>
enabled: Accessor<boolean>
theme: PromptContext["api"]["theme"]["current"]

@@ -24,2 +25,3 @@ pendingDisplayDelay?: number

const [pending, setPending] = createSignal<string | undefined>()
const [enabled, setEnabled] = createSignal(props.enabled())
let pendingTimer: ReturnType<typeof setTimeout> | undefined

@@ -38,2 +40,9 @@ let scheduledPending: string | undefined

const nextEnabled = props.enabled()
if (enabled() !== nextEnabled) {
props.log?.("status.enabled", { from: enabled(), to: nextEnabled })
setEnabled(nextEnabled)
props.requestRender?.()
}
syncPending(nextPending)

@@ -50,4 +59,4 @@ }

<box paddingLeft={1} paddingRight={1} flexDirection="row">
{pending() ? <text fg={props.theme.info}>{pending()} </text> : undefined}
<text fg={props.disabled ? props.theme.textMuted : mode() === "insert" ? props.theme.success : props.theme.warning}>{modeLabel(mode())}</text>
{enabled() && pending() ? <text fg={props.theme.info}>{pending()} </text> : undefined}
{enabled() ? <text fg={props.disabled ? props.theme.textMuted : mode() === "insert" ? props.theme.success : props.theme.warning}>{modeLabel(mode())}</text> : undefined}
</box>

@@ -54,0 +63,0 @@ )

/** @jsxImportSource @opentui/solid */
import type { TuiPlugin, TuiPluginApi, TuiPluginModule } from "@opencode-ai/plugin/tui"
import { createSignal } from "solid-js"
import { PromptRoot } from "./prompt/root"

@@ -10,2 +11,19 @@ import type { PromptModule } from "./prompt/types"

const tui: TuiPlugin = async (api, options, meta) => {
const vimEnabledKey = `${meta.id}:enabled`
const [vimEnabled, setVimEnabled] = createSignal(api.kv.get(vimEnabledKey, true) === true)
api.command.register(() => [{
title: vimEnabled() ? "Disable Vim Mode" : "Enable Vim Mode",
value: "opencode-vim.toggle",
description: vimEnabled() ? "Turn off Vim key handling" : "Turn on Vim key handling",
category: "Vim",
slash: { name: "vim" },
onSelect() {
const next = !vimEnabled()
setVimEnabled(next)
api.kv.set(vimEnabledKey, next)
api.ui.toast({ variant: "info", message: `Vim mode ${next ? "enabled" : "disabled"}` })
},
}])
if (readAutoUpdate(options)) {

@@ -33,3 +51,3 @@ let timer: Timer | undefined

if (hasSnippetsPlugin(api)) modules.push(createSnippetsModule())
modules.push(createVimModule(options))
modules.push(createVimModule(options, vimEnabled))
moduleCache.set(key, modules)

@@ -36,0 +54,0 @@ return modules