Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

multranslate

Package Overview
Dependencies
Maintainers
0
Versions
20
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

multranslate - npm Package Compare versions

Comparing version 0.3.3 to 0.3.4

199

multranslate-custom-cursor.js

@@ -160,4 +160,5 @@ #!/usr/bin/env node

const infoText = 'Ctrl+C: clear input, Ctrl+<A/D>: go to start or end, Ctrl+<Q/W/E/R>: copy to clipboard, Escape: exit'
// ⬆/⬇: scroll output, ⬅/➡: input navigation, Ctrl+<⬅/➡>: fast navigation
const infoText = 'Ctrl+C: clear input, Ctrl+<A/D>: go to start or end, Ctrl+<⬆/⬇>: scroll output, Ctrl+<Q/W/E/R>: copy to clipboard, Escape: exit'
// Shift+<⬆/⬇> - scroll input, <⬅/➡/⬆/⬇>: input navigation, Ctrl+<⬅/➡>: fast navigation, Ctrl+Del: delete word before cursor
// Enter: translate

@@ -187,2 +188,4 @@ // Информация по навигации внизу формы

// 12345678 - автоматический перенос слова, если в конце строки 8 (без учета пробела) и меньше символов после пробела
// Класс для управления текстовым буфером и курсором

@@ -281,3 +284,3 @@ class TextBuffer {

// outputBox1.setContent(`${maxLines} ${maxChars} | ${viewLines} ${currentLine}`)
// outputBox2.setContent(box.getScroll())
// outputBox2.setContent(`${box.getScroll()}`)
// outputBox3.setContent(box.getScrollHeight())

@@ -354,2 +357,131 @@ // outputBox4.setContent(box.getScrollPerc())

}
// Метод навигации вверх или вниз
navigateUpDown(box,type) {
const maxChars = box.width - 4
// Массив из строк
const bufferLines = this.text.split('\r')
// Массив из длинны всех строк
let linesArray = []
// Зафиксировать длинну только реальных строк
for (let line of bufferLines) {
linesArray.push(line.length)
}
// Фиксируем длинну всех строк
// for (let line of bufferLines) {
// // Добавляем виртуальные строки
// if (line.length > maxChars) {
// // ВАРИАНТ 3
// // Стартовая позиция для среза
// let startCount = 0
// // Конец строки для среза из максимальной длинны
// let endCount = maxChars
// // Узнаем длинну строк с учетом автопереноса
// while (true) {
// // Срез текущей строки
// let count = line.slice(startCount, endCount)
// // Если достигли конца всех строк (длинна всей строки минус начальная позиция текущего среза меньше длинны строки с учетом переноса), добавляем остаток и завершаем цикл
// if ((line.length - startCount) < maxChars) {
// linesArray.push(line.length - startCount)
// outputBox3.setContent(`(${line.length} - ${startCount} - 9 (${line.length - maxChars - 9})) < ${maxChars-9}`)
// break
// }
// // Если достигли конца строки для автопереноса, добавляем длинну строки целиком, обновляем начальную позицию и конец строки среза для проверки следующей строки
// else if (endCount === maxChars-9) {
// linesArray.push(maxChars - 1) // -1 из за смещения пробелом курсора
// startCount = startCount + maxChars
// endCount = endCount + maxChars
// }
// // Если последний символ в строке не является пробелом, увеличиваем счетчик конца среза текущей строки
// else if (count[count.length-1] !== ' ') {
// endCount--
// }
// // Если последний символ в строке содержит пробел, то добавляем строку текущей длинны среза
// else {
// linesArray.push(count.length - 1) // -1 из за смещения пробелом курсора
// startCount = startCount + count.length
// endCount = endCount + maxChars
// }
// }
// // // ВАРИАНТ 2
// // // Фиксируем количество виртуальных строк + последняя строка
// // let viewCurrentLines = Math.floor(line.length / (maxChars)) + 1
// // // Массив из длинны строк
// // let viewCurrentLinesArray = [...Array(viewCurrentLines).keys()]
// // let count = line.length
// // // Собираем длинну строк
// // count = line.length
// // for (let l of viewCurrentLinesArray) {
// // if (count > maxChars) {
// // linesArray.push(maxChars-1)
// // count -= maxChars
// // }
// // else {
// // linesArray.push(count)
// // }
// // }
// }
// else {
// linesArray.push(line.length)
// }
// }
// outputBox1.setContent(`${linesArray[0]}`)
// outputBox2.setContent(`${linesArray[1]}`)
// outputBox3.setContent(`${linesArray[2]}`)
// outputBox4.setContent(`${linesArray[3]}`)
// Счетчик начинается с длинны первой строки
let charsArray = linesArray[0]
let cursorLine = 1
let charToLine = 0
// Фиксируем на какой строке находится курсор
for (let lineIndex in linesArray) {
// Проверяем, что курсор находится в пределах текущей строки
if (this.cursorPosition <= charsArray) {
break
}
else {
// Фиксируем позицию курсора в текущей строке
charToLine = this.cursorPosition - charsArray - 1
// Увеличиваем длинну символов курсора на длинну символов следующей строки + длинна одного символа переноса строки
charsArray += linesArray[parseInt(lineIndex) + 1] + 1
// Увеличиваем счетчик строки
cursorLine++
}
}
let positionToLine
if (type === 'up') {
if (cursorLine > 1) {
// Фиксируем позицию в строке выше
if (linesArray[cursorLine-2] >= charToLine) {
positionToLine = charToLine
} else {
positionToLine = linesArray[cursorLine-2]
}
const linesArraySlice = linesArray.slice(0, cursorLine-2)
for (let l of linesArraySlice) {
positionToLine = positionToLine + l + 1
}
this.cursorPosition = positionToLine
}
}
else if (type === 'down') {
if (cursorLine < linesArray.length) {
// Если первая строка, обновляем значение текущей позиции в строке
if (cursorLine === 1) {
charToLine = this.cursorPosition
}
// Фиксируем позицию в строке ниже
if (linesArray[cursorLine] >= charToLine) {
positionToLine = charToLine
}
else {
positionToLine = linesArray[cursorLine]
}
const linesArraySlice = linesArray.slice(0, cursorLine)
for (let l of linesArraySlice) {
positionToLine = positionToLine + l + 1
}
this.cursorPosition = positionToLine
}
}
}
// Метод отключения нативного курсора

@@ -413,9 +545,16 @@ disableNativeCursor() {

// Поднимаем поле ввода текста вверх для ручного скроллинга
// else if (key.name === 'up') {
// inputBox.scroll(-1)
// }
else if (key.name === 'up' && key.shift === true) {
inputBox.scroll(-1)
}
// Опускаем поле ввода текста вниз
// else if (key.name === 'down') {
// inputBox.scroll(1)
// }
else if (key.name === 'down' && key.shift === true) {
inputBox.scroll(1)
}
// Навигация курсора между строками
else if (key.name === 'up') {
buffer.navigateUpDown(inputBox,'up')
}
else if (key.name === 'down') {
buffer.navigateUpDown(inputBox,'down')
}
// Удалить словосочетание перед курсором

@@ -442,3 +581,2 @@ else if (key.name === 'delete' && key.ctrl === true) {

}
// Удалить символ после курсором

@@ -452,2 +590,8 @@ else if (key.name === 'delete') {

}
// Переопределяем нажатие Enter, для добавления 4 пробелов в буффер
else if (key.name === 'tab') {
const newText = buffer.getText().slice(0, buffer.getCursorPosition()) + ' ' + buffer.getText().slice(buffer.getCursorPosition())
buffer.setCursorPosition(buffer.getCursorPosition() + 4)
buffer.setText(newText)
}
// Переопределяем нажатие Enter, не добавляя дополнительный символ переноса строки

@@ -467,21 +611,9 @@ else if (key.name === 'enter') {

}
// Фиксируем текущую позицию для ручного скроллинга
let currentScrollIndex = inputBox.getScroll()
// Обновляем поле ввода текста
inputBox.setValue(buffer.viewDisplayCursor())
// Включить ручной скроллинг
// if (key.name !== 'up' && key.name !== 'down') {
// // Если это не скролл вручную, скролим назад к текущей позиции после обновления текста
// inputBox.scrollTo(currentScrollIndex)
// // Если длина буфера и положение курсора совпадают, скролим в самый низ
// if (buffer.getText().length === buffer.getCursorPosition()) {
// inputBox.setScrollPerc(100)
// }
// // Если курсор в самом начале буфера, поднимаем в самый вверх
// else if (buffer.getCursorPosition() === 0) {
// inputBox.setScrollPerc(1)
// }
// }
// Включить автоматический скроллинг
buffer.navigateScroll(inputBox)
// Добавить ручной скроллинг
if (!((key.name === 'up' && key.shift === true) || (key.name === 'down' && key.shift === true))) {
// Обновляем поле ввода текста
inputBox.setValue(buffer.viewDisplayCursor())
// Включить автоматический скроллинг
buffer.navigateScroll(inputBox)
}
screen.render()

@@ -751,7 +883,6 @@ })

// Обработчик событий клавиш для пролистывания экрана панелей вывода: <Up/Down> или Ctrl+<Up/Down>
// inputBox.key(['C-up', 'C-down'], function(ch, key) {
inputBox.key(['up', 'down'], function(ch, key) {
// Обработчик событий клавиш для пролистывания экрана панелей вывода: Ctrl+<Up/Down>
inputBox.key(['C-up', 'C-down'], function(ch, key) {
// Скроллим вверх
if (key.name === 'up') {
if (key.name === 'up' && key.ctrl == true) {
outputBox1.scroll(-1)

@@ -763,3 +894,3 @@ outputBox2.scroll(-1)

// Скроллим вниз
else if (key.name === 'down') {
else if (key.name === 'down' && key.ctrl == true) {
outputBox1.scroll(1)

@@ -766,0 +897,0 @@ outputBox2.scroll(1)

2

package.json
{
"name": "multranslate",
"version": "0.3.3",
"version": "0.3.4",
"description": "Cross-platform TUI for translating text using multiple providers simultaneously and support automatic detection of the source and destination language",

@@ -5,0 +5,0 @@ "keywords": [

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc