Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вставка/удаление 4-х пробелов при нажатии, "Ctrl+]"/"Ctrl+[" 
:(
    Опции темы
Cr@$h
Дата 3.10.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



Цитата(pythonwin @  3.10.2006,  18:22 Найти цитируемый пост)
что собираем подписи и просим администрацию внедрить? 

Да, теперь всё готово, ядумаю. воя идея, предлагаю тебе же и создать тему в Обсуждении. Предоставить скрипт, указать темы, где всё обсуждалось, сказать, что он оттестировался. Попросить внедрить его в обработку этих клавиш на всех форумах. Потом после внедрения напишу в новостях Винграда и на шапке Python (с разработчиками).
PM MAIL ICQ   Вверх
pythonwin
Дата 3.10.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Cr@$h, Хорошо!
Но только завтра - поздно уже smile




PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 3.10.2006, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41



 smile Утро вечера мудренее.  smile 
PM MAIL ICQ   Вверх
pythonwin
Дата 4.10.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(Cr@$h @  4.10.2006,  00:48 Найти цитируемый пост)

Да, теперь всё готово, ядумаю. воя идея, предлагаю тебе же и создать тему в Обсуждении. Предоставить скрипт, указать темы, где всё обсуждалось, сказать, что он оттестировался. Попросить внедрить его в обработку этих клавиш на всех форумах. Потом после внедрения напишу в новостях Винграда и на шапке Python (с разработчиками).

создал тему внедрение вставки/удалении 4-х пробелов при нажатии "Ctrl+]"/"Ctrl+["


PM WWW GTalk Jabber   Вверх
Zeroglif
Дата 4.10.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Немножко прокомментировал скрипт, чтоб было понятно, если будут править, менять чего-нибудь, оптимизировать и т.п., внедрять, в общем. Всё. Пост сдал. smile

Код

    var ZRGLF = function () {
        /* собсно это и есть типа индент такой, 4 пробела, можно и 2 или 20...*/
        var p = '    ';
        /* инициализирующая функция, в ней вызов функции, прикрепляющей обработчик,
        первый аргумент - textarea, меняем его по-желанию или добавляем вызовы*/
        function I() {   
            E(document.getElementsByTagName('textarea')[0], 'keydown', F, 1);
        }
        /* функция, прикрепляющая обработчик, выглядит стрёмно, но я к ней привык
        последний параметр (s) может быть числом 1 (прикрепить) или 0 (открепить), 
        но этому скрипту это по-барабану, объяснил, чтоб не пугались, остальные 
        параметры обычные - объект, имя события, функция*/
        function E(o, e, f, s) {
            var p = '', b = ['remove', 'add', 'detach', 'attach'];
            (o[b[s]+'EventListener'] || (p = 'on', o[b[s+2]+'Event']))(p + e, f, false);
        }
        /* основная функция, в ней всё и происходит*/
        function F() {
            /* e - это объект события, он автоматом приходит в эту функцию первым аргументом,
            a - кнопки индента, b - кнопки анинтдента, n - textarea*/
            var e  = arguments[0],
                n = e.target,
                a = (e.ctrlKey && String.fromCharCode(e.keyCode).match(/^\u00FD|\]|\u042A$/i)),
                b = (e.ctrlKey && String.fromCharCode(e.keyCode).match(/^\u00FB|\[|\u0425$/i));           
            if (a || b) {
                /* если IE или Opera (они поддерживают selection)*/
                if (document.selection) {
                    var r = document.selection.createRange(), o = window.opera, r2, t, c = 'character';
                    /* идея в том, чтобы выделить ПОЛНОСТЬЮ строку (строки), где стоит курсор или где 
                    местами есть выделение, соответственно нам нужно расширить текстовый диапазон налево (направо) до
                    метки новой строки (\r в IE) или (\n в Opera) или до начала/конца textarea value. Функция работает
                    так: создаём дубликат диапазона, расширяем этот дубликат на 1 символ влево (вправо).
                    Затем запускаем цикл, который должен остановиться, когда мы или упрёмся в метку новой строки или
                    в начало (конец) textarea value. В цикле наращивается число шагов (i), на это самое число мы 
                    должны потом сдвинуть реальный диапазон (не дубликат). Параметр m - это или 'moveStart' (идём налево) 
                    или 'moveEnd' (идём направо), в первом случае шаг отрицательный, во втором - наоборот.*/                   
                    function F(m, n) {
                        var r2 = r.duplicate(), l = r.text.length, s = (n) ? -1 : 1, i = 0;
                        r2[m](c, s);
                        while (r2.text.length > l &&
                            r2.text.charAt(n || r2.text.length - 1) != ((o) ? '\n' : '\r')) {
                            l = r2.text.length;
                            r2[m](c, s);
                            i--;
                        } 
                       return i;
                    }
                    /* расширяем диапазон влево*/
                    r.moveStart(c, F('moveStart', '0'));
                    /* расширяем диапазон вправо, но предварительно определяем, не зацепили ли мы выделением скрытый
                    символ \r справа, для этого создаём дубликат, делаем шаг вправо на один символ и сразу сравниваем длины
                    текста в дубликате и текста в оригинале. Если разница = 3, то мы зацепили \r. В этом случае нам нет
                    необходимости расширять диапазон вправо, а нужно сделать один шаг влево, чтобы убрать \r из диапазона*/
                    (((r2 = r.duplicate()).moveEnd(c, 1), r2.text.length) - r.text.length != 3)
                        ? r.moveEnd(c, - F('moveEnd'))
                        : r.moveEnd(c, -1);
                    /*тут всё просто, меняем текст внутри текстового диапазона в зависимости от нажатых кнопок*/
                    r.text = (t = (b) 
                        ? r.text.split('\n' + p).join('\n').replace(eval('/^' + p + '/'), '')
                        : p + r.text.split('\n').join('\n' + p));
                    /*двигаем диапазон, для Оперы на длину нового текста, а для IE с поправкой на скрытые \r*/
                    r.moveStart(c, (!o)
                        ? t.split('\r').length - t.length - 1
                        : - t.length);
                    /*выделяем*/
                    r.select();
                /* если FF, Seamonkey и проч... (не поддерживают selection)*/
                } else {
                    /*по-моему всё более-менее понятно, выделяем вставляем, снова выделяем*/
                    var ss = 'selectionStart', se = 'selectionEnd', x = n[ss], y = n[se], l = n.value.length, z;                                   
                    x = (n[ss] = n.value.slice(0, x).lastIndexOf('\n') + 1);
                    y = (n[se] = (((z = n.value.slice(y, l)).indexOf('\n') != -1) ? y + z.indexOf('\n') : l));
                    if (a) {
                        n.value = n.value.slice(0, x) + p + n.value.slice(x, y).split('\n').join('\n' + p) + n.value.slice(y, l);
                        n[ss] = x;
                        n[se] = y + n.value.length - l;
                    } else {
                        n.value = n.value.slice(0, x) + n.value.slice(x, y).split('\n' + p).join('\n').replace(eval('/^' + p + '/'), '') + n.value.slice(y, n.value.length);                  
                        n[ss] = x;
                        n[se] = y - (l - n.value.length);
                    }               
                }
                /*отменяем стандартные действия для выбранных кнопок, Опера подглючивает*/                 
                e.preventDefault ? e.preventDefault() : e.returnValue = false;
                return false;
            }
        }
        /*вешаем обработчик на окно*/
        window.onload = I;
    /*вызываем самоё себя*/
    }();

PM MAIL WWW   Вверх
pythonwin
Дата 4.10.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Zeroglif, спасибо!
+1
PM WWW GTalk Jabber   Вверх
12345c
Дата 4.10.2006, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Почитал эту тему первый раз и поудивлялся - где используют такую кодировку клавиш? Обычно в редакторах (UltraEdit - пример) добавляют табы или пробелы, нажимая на клавишу Tab, если выделена строка или группа строк (выделение должно охватывать хотя бы 1 перенос строки). Удаление табов или группы пробелов - Shift+Tab.

Использование Ctrl+[ , когда курсор просто в строке - очень уж неочевидно.
PM WWW   Вверх
GIK
Дата 4.10.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 6
Всего: 14



А что-за конструкция в строке 15, зачем там две скобки?


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
pythonwin
Дата 4.10.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(12345c @  4.10.2006,  23:07 Найти цитируемый пост)
Использование Ctrl+[ , когда курсор просто в строке - очень уж неочевидно. 

кому как, но питонщика например это нормально! smile
хотя возможно и в других языках используется.

12345c, сможешь внедрить этот скрипт к нам на форум?

Цитата(GIK @  4.10.2006,  23:19 Найти цитируемый пост)
А что-за конструкция в строке 15, зачем там две скобки? 

наверное - функциональное программирование в JS smile

Это сообщение отредактировал(а) pythonwin - 4.10.2006, 17:25
PM WWW GTalk Jabber   Вверх
12345c
Дата 4.10.2006, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Скрипты JS к форуму писал Sardar, насколько я понимаю, поэтому внедрять лучше ему, чтобы не нарушить некоторые другие идеи.

Да и внедрять надо совсем не этот скрипт, а взять функционал кнопок Ж,Н,П,... и базироваться на нём. Вопросы совместимости браузеров решатся сами собой, так как имеющийся скрипт совместимый.

Потом, возникают вопросы отображения функциональности, затрагивается дизайн. И остаётся вопрос, почему обделять другие форумы и почему делать только по Ctrl+[ .
PM WWW   Вверх
Zeroglif
Дата 4.10.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(12345c @  4.10.2006,  18:24 Найти цитируемый пост)
Да и внедрять надо совсем не этот скрипт, а взять функционал кнопок Ж,Н,П,... и базироваться на нём. Вопросы совместимости браузеров решатся сами собой, так как имеющийся скрипт совместимый.

Согласен. В принципе, хозяину всего js-наполнения форума (Sardar?) удобнее перебрать скрипт под себя или даже написать свой (решение проблем IE понятны), под свою модульную систему. Клавиши оттуда вытащить и проч.
Цитата(12345c @  4.10.2006,  16:07 Найти цитируемый пост)
Почитал эту тему первый раз и поудивлялся - где используют такую кодировку клавиш? Обычно в редакторах (UltraEdit - пример) добавляют табы или пробелы, нажимая на клавишу Tab, если выделена строка или группа строк (выделение должно охватывать хотя бы 1 перенос строки). Удаление табов или группы пробелов - Shift+Tab.

Мне было тоже енто весьма удивительно, изначально я вставил в скрипт дополнительно обычную схему индента по TAB, но заказчик заругался. smile Потому убрал. Но пока сам тестил непостижимым образом привык к этому сочетанию, клавиши неплохо под руку ложатся. Более того я вдруг осознал для себя, что мне не мешает, а наоборот, помогает то, что сдвигается вся строка при одиноком курсоре, а не только правая от него часть (может я где-то в глубине души питонщик?)...
Цитата(GIK @  4.10.2006,  16:19 Найти цитируемый пост)
А что-за конструкция в строке 15, зачем там две скобки?

Какие две из шести круглых и восьми квадратных? smile


Это сообщение отредактировал(а) Zeroglif - 4.10.2006, 22:40
PM MAIL WWW   Вверх
Sardar
Дата 4.10.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Zeroglif @  4.10.2006,  18:25 Найти цитируемый пост)
В принципе, хозяину всего js-наполнения форума (Sardar?) удобнее перебрать скрипт под себя или даже написать свой (решение проблем IE понятны), под свою модульную систему. Клавиши оттуда вытащить и проч.

Помимо меня писали скрипты sergej.z(транслит, подсветка, селекция и т.д.) и Girder (всё самое последнее вкусное). На досуге посмотрю, перенсу на текущие форумские скрипты.


Сейчас занят одной, на первый взгляд бесполезной, но интересной фичей - расширяю функционал TextAreaSelectionHelper'a, что бы человеческая селекция была. Для вас это может означать например ctrl+shift+T, появляються: [][/]; кусор в первом теге, пишем тег, он одновременно пишеться в обоих тегах; затем tab, курсор прыгает в текст между тегами, пишем содержимое; снова tab и мы после закрывающего тега (shift+tab - перед открывающим). Конечно многое можно на этом построить smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
pythonwin
Дата 5.10.2006, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



Цитата(12345c @  5.10.2006,  01:24 Найти цитируемый пост)
И остаётся вопрос, почему обделять другие форумы и почему делать только по Ctrl+[ . 


Цитата(pythonwin @  25.8.2006,  15:24 Найти цитируемый пост)
где можно применить 4 пробела для увеличиния читабельности кода:
1) Python (обязательно - основной принцип групировки операторов)
2) JavaScript
3) HTML
4) CSS
5) PHP
6) C++
7) Pascal и Delphi


теперь почему именно Ctrl+] и Ctrl+[
1) этот набор клавиш используется в IDLE питона и поэтому писать код питона привычней Ctrl+] и Ctrl+[
2) если заменить их на табы, то осложниться жизнь у пользователей, которые пользуются Tab, для навигации

Добавлено @ 07:28 
хотя лучше, чтобы пользователь мог сам для себя настраивать горячие клавиши. smile
PM WWW GTalk Jabber   Вверх
smartov
Дата 5.10.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Zeroglif, красивый код! Здорово.
PM MAIL   Вверх
pythonwin
Дата 5.10.2006, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 1
Всего: 36



все кто за этот код и за внедрение его на форуме - поддержите пожалуйста внедрение вставки/удалении 4-х пробелов при нажатии "Ctrl+]"/"Ctrl+["
PM WWW GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1039 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.