Символ TAB (\t) В Текстовом Поле При Нажатии Клавиши TAB

Символ TAB (t) В Текстовом Поле При Нажатии Клавиши TAB

В этом кратком руководстве я объясню, как вставлять символ табуляции t в поле текстового ввода (textarea) при нажатии клавиши TAB. Мы использовать для этого JavaScript код на основе jQuery.

Что такое Символ TAB?

Символ табуляции (Horizontal Tabulation, HT или просто TAB) — это управляющий символ в таблице ASCII, который имеет код 09. Он используется для выравнивания текста в строках. Когда мы используем этот символ, курсор на экране перемещается на следующую позицию табуляции вправо. Обычно такие позиции расположены через каждые 8 пробелов, то есть в колонках 1, 9, 17, 25 и так далее. Символ TAB можно вставить с помощью клавиши Tab ⇆, в большинстве языков программирования он обозначается как t.

Когда я пишу код на своем блоге, мне часто не хватает возможности вставлять символ t с помощью клавиши TAB. Поэтому я решил написать небольшой код, который перехватывает нажатие клавиши TAB и вставляет символ t в текстовое поле в текущей позиции курсора.

Код для Вставки Символа TAB

Ниже представлен код, который добавляет символ t при нажатии на клавишу TAB:

document.addEventListener( 'keydown', function( event ){

if( 'TEXTAREA' !== event.target.tagName ){
    return
}

// если это не клавиша TAB
if( event.code !== 'Tab' ){
    return
}

event.preventDefault()

// Получаем текстовое поле
let textarea     = event.target
let selStart     = textarea.selectionStart
let selEnd       = textarea.selectionEnd
let before       = textarea.value.substring( 0, selStart )
let selection     = textarea.value.substring( selStart, selEnd )
let after        = textarea.value.substr( selEnd )
let selection_new = ''

// Удаляем отступ TAB
if( event.shiftKey ){

    // Исправляем выбор
    let selectBefore = before.substr( before.lastIndexOf( 'n' ) + 1 )
    let isfix = /^s/.test( selectBefore )
    if( isfix ){
        let fixed_selStart = selStart - selectBefore.length
        before   = textarea.value.substring( 0, fixed_selStart )
        selection = textarea.value.substring( fixed_selStart, selEnd )
    }

    let once = false
    selection_new = selection.replace( /^(t|[ ]{2,4})/gm, ( mm )=>{
        if( isfix && ! once ){
            once = true // один раз для первой строки
            selStart -= mm.length
        }
        selEnd -= mm.length
        return ''
    })
}
// Добавляем отступ TAB
else {
    selStart++

    // Если есть выделенный текст
    if( selection.trim() ){
        selection_new = selection.replace( /^/gm, ()=>{
            selEnd++
            return 't'
        })
    }
    else {
        selection_new = 't'
        selEnd++
    }
}

textarea.value = before + selection_new + after

// Перемещаем курсор
textarea.setSelectionRange( selStart, selEnd )

} );

Этот код будет работать для всех полей текстового ввода на странице. Если вам нужно добавить функциональность только для конкретного поля, измените условие:

if ('TEXTAREA' !== event.target.tagName)

Установка Ширины Табуляции в CSS

При использовании отступов в коде 8 пробелов — это слишком много. Обычно достаточно 4 пробелов, и это неофициальный стандарт, принятый в текстовых редакторах. Кроме того, язык разметки Markdown использует 4 пробела для выделения кода.

Свойство CSS tab-size позволяет изменить ширину отступа табуляции, установленную с помощью символа табуляции (клавиши Tab). Значение этого свойства должно указывать количество символов. Например, чтобы установить ширину табуляции в 4 символа, нужно задать свойство следующим образом:

pre {
tab-size: 4;
-o-tab-size: 4;
-moz-tab-size: 4;
}

Поддержка этого свойства в браузерах составляет 98% (с префиксами). Единственный браузер, который не поддерживает его — это IE.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *