MCPcopy Create free account
hub / github.com/coder/ghostty-web / encode

Method encode

lib/ghostty.ts:187–236  ·  view source on GitHub ↗
(event: KeyEvent)

Source from the content-addressed store, hash-verified

185 }
186
187 encode(event: KeyEvent): Uint8Array {
188 const eventPtrPtr = this.exports.ghostty_wasm_alloc_opaque();
189 const createResult = this.exports.ghostty_key_event_new(0, eventPtrPtr);
190 if (createResult !== 0) throw new Error(`Failed to create key event: ${createResult}`);
191
192 const view = new DataView(this.exports.memory.buffer);
193 const eventPtr = view.getUint32(eventPtrPtr, true);
194 this.exports.ghostty_wasm_free_opaque(eventPtrPtr);
195
196 this.exports.ghostty_key_event_set_action(eventPtr, event.action);
197 this.exports.ghostty_key_event_set_key(eventPtr, event.key);
198 this.exports.ghostty_key_event_set_mods(eventPtr, event.mods);
199
200 if (event.utf8) {
201 const encoder = new TextEncoder();
202 const utf8Bytes = encoder.encode(event.utf8);
203 const utf8Ptr = this.exports.ghostty_wasm_alloc_u8_array(utf8Bytes.length);
204 new Uint8Array(this.exports.memory.buffer).set(utf8Bytes, utf8Ptr);
205 this.exports.ghostty_key_event_set_utf8(eventPtr, utf8Ptr, utf8Bytes.length);
206 this.exports.ghostty_wasm_free_u8_array(utf8Ptr, utf8Bytes.length);
207 }
208
209 const bufferSize = 32;
210 const bufPtr = this.exports.ghostty_wasm_alloc_u8_array(bufferSize);
211 const writtenPtr = this.exports.ghostty_wasm_alloc_usize();
212
213 const encodeResult = this.exports.ghostty_key_encoder_encode(
214 this.encoder,
215 eventPtr,
216 bufPtr,
217 bufferSize,
218 writtenPtr
219 );
220
221 if (encodeResult !== 0) {
222 this.exports.ghostty_wasm_free_u8_array(bufPtr, bufferSize);
223 this.exports.ghostty_wasm_free_usize(writtenPtr);
224 this.exports.ghostty_key_event_free(eventPtr);
225 throw new Error(`Failed to encode key: ${encodeResult}`);
226 }
227
228 const bytesWritten = view.getUint32(writtenPtr, true);
229 const encoded = new Uint8Array(this.exports.memory.buffer, bufPtr, bytesWritten).slice();
230
231 this.exports.ghostty_wasm_free_u8_array(bufPtr, bufferSize);
232 this.exports.ghostty_wasm_free_usize(writtenPtr);
233 this.exports.ghostty_key_event_free(eventPtr);
234
235 return encoded;
236 }
237
238 dispose(): void {
239 if (this.encoder) {

Callers 3

terminal.test.tsFile · 0.80
writeMethod · 0.80
handleKeyDownMethod · 0.80

Tested by

no test coverage detected