Page 1 of 2

Ввод символов через Alt+####

Posted: Wed Apr 10, 2013 6:47 am
by Fr0sT
Не очень понятно, как реализован данный процесс. Покопался в исходниках - вроде все должно обрабатываться нормально, а не через задницу, как у микрософта. Тем не менее, Акель поступает в точности как поделие микрософта, преобразуя коды символов по загадочным критериям.
Проще говоря, результат совпадает с ожидаемым только для тех символов, у которых в приложении "Таблица символов" указан альт-код. Если попробовать ввести десятичный Юникод-код символа, для которого альт-код не прописан - получим совершенно другой символ. Так что хотелось бы понять, что это: намеренная имитация richedit, баг или что-то еще? И как вообще вводить любые символы по их Юникод-коду?

Posted: Wed Apr 10, 2013 3:15 pm
by TNX
Будьте добры, конкретный пример в студию 8)

Posted: Wed Apr 10, 2013 3:48 pm
by Fr0sT
Ради бога:
U+0152 (dec 0338) имеет код Alt+0140
U+0153 (dec 0339) имеет код Alt+0156 (wtf??)
U+0154 (dec 0340) не имеет Alt кода вообще

В Акеле попытка ввести через альт Юникод-коды этих символов приводят к вставке букв R,S,T. Вставка по указанным альт-кодам работает так, как задумал микрософт. В то же время, в Word, например, оба варианта приводят к одинаковым результатам (что, однако, тоже неправильно - как в таком случае вводить U+008C (dec 0140)?)

Posted: Wed Apr 10, 2013 4:51 pm
by Instructor
Fr0sT wrote:U+0152 (dec 0338) имеет код Alt+0140
Для совместимости используется стандартная обработка для Alt+NumPad. AkelEdit поддерживает специальную обработку ввода символа по десятиричному коду, посредством предварительного нажатия два раза на 0. Т.е. для указанного символа необходимо ввести Alt+00338.

Posted: Wed Apr 10, 2013 5:57 pm
by TNX
Добавлю, что с префиксом 0 вводятся символы из набора "Windows: западные" (коды 1-255). Если набирать сразу код без предшествующего 0, то используется набор символов "DOS: кириллица 2" (коды 1-255). Префикс 00 - для ввода символов из набора "Юникод" (коды U+).

Posted: Thu Apr 11, 2013 6:20 am
by Fr0sT
Ага! Вот и докопались до истины. Хорошо бы эту фичу в справку куда-нибудь. Попробуем, спасибо!
TNX
во-во, это я и называю "микрософтовое безумие".

Posted: Thu Apr 11, 2013 7:30 am
by TNX
Fr0sT, это сделано для совместимости с предыдущими версиями ОС, а точнее для корректной работы старого ПО. Ну и пользователи привыкли уже к такой системе, хотя она и несовершенна.

Posted: Thu Apr 11, 2013 10:45 am
by Fr0sT
TNX, мне как пользователю однохренственно, по каким причинам эти костыли тянутся в течение десятков лет. Для меня имеет значение только то, что я не могу вменяемым способом ввести элементарное ударение (U+0769)

upd Это я про Виндуза, а не про Акель

Posted: Thu Apr 11, 2013 12:08 pm
by TNX
Fr0sT wrote:Для меня имеет значение только то, что я не могу вменяемым способом ввести элементарное ударение (U+0769)
Открою вам небольшой секрет: такой способ существует :shock:
HKEY_CURRENT_USER\Control Panel\Input Method
Создаем параметр EnableHexNumpad типа REG_SZ со значением 1. Не забываем перезагрузиться. В Блокноте набираем Alt + +301 и получаем символ ударе́ния.

Posted: Thu Apr 11, 2013 1:05 pm
by Fr0sT
Как много интересного открывается :) Благодарю!

Re: Ввод символов через Alt+####

Posted: Mon Jan 13, 2014 9:05 am
by Egorkaru
Fr0sT wrote:Не очень понятно, как реализован данный процесс. Покопался в исходниках - вроде все должно обрабатываться нормально, а не через задницу, как у микрософта. Тем не менее, Акель поступает в точности как поделие микрософта, преобразуя коды символов по загадочным критериям.
Проще говоря, результат совпадает с ожидаемым только для тех символов, у которых в приложении "Таблица символов" указан альт-код. Если попробовать ввести десятичный Юникод-код символа, для которого альт-код не прописан - получим совершенно другой символ. Так что хотелось бы понять, что это: намеренная имитация richedit, баг или что-то еще? И как вообще вводить любые символы по их Юникод-коду?
1. Запустите редактор реестра. Для этого нажмите сочетание клавиш Win+R, введите regedit и нажмите ОК или Enter.
2. Откройте раздел реестра HKEY_CURRENT_USER\Control Panel\Input Method.
3. Создайте строковый параметр EnableHexNumpad со значением 1.
4. Перезагрузите компьютер.
5. После перезагрузки компьютера запустите AkelPad, зажмите клавишу Alt, нажмите клавишу + и введите Юникод-код символа. Например, при вводе белого смайлика зажмите клавишу Alt, нажмите клавишу + и введите 263A.

Posted: Tue Feb 04, 2014 5:45 pm
by temp1111
А напишите кто-нибудь скрипт Egorkaru.js, чтобы он автоматически с русского на русский переводил :D :D :D

Posted: Wed Oct 24, 2018 11:37 am
by Eskander88
Fr0sT wrote:... Для меня имеет значение только то, что я не могу вменяемым способом ввести элементарное ударение (U+0769)
вообще-то по таблице Юникод символов U+0769 —Арабская буква noon с маленькой v
https://unicode-table.com/ru/0769/

у меня работает.. ударение ставится согласно таблице U+0301 — Комбинируемый акут (лёгкое ударение)
https://unicode-table.com/ru/0301/

пример: ударе́ние

:D старенькая тема правда, попалась вот...

Posted: Thu Dec 27, 2018 12:12 pm
by eil
вопрос по этой же теме - так как на ноуте без NumPad через Alt+код получить символы?
сразу скажу, это для портативной версии, никаких правок реестра, так же "вставка символа" тут не подходит.

Posted: Fri Dec 28, 2018 9:41 am
by opk44
eil wrote:вопрос по этой же теме - так как на ноуте без NumPad через Alt+код получить символы?
сразу скажу, это для портативной версии, никаких правок реестра, так же "вставка символа" тут не подходит.
1. Что значит "не подходит"? Если есть физическое ограничение (в виде отсутствия NumPad), то волей-неволей надо определяться "вам шашечки или ехать?".
2. Решение с вставкой Unicod-символов по их коду с помощью скрипта показано KDJ довольно давно вот тут. Единственно, там вставка производится по шестнадцатеричному коду, а вам нужен десятичный. Поэтому в строке, где используется parseInt

Code: Select all

          sText += String.fromCharCode(parseInt(sHex.substr(i, 4), 16)); 
не забудьте обязательно поменять радикс с 16 на 10. (Также желательно убрать и прочие отсылки к шестнадцатеричной системе в скрипте, но это не обязательно).

Code: Select all

var hMainWnd = AkelPad.GetMainWnd(); 
var sDec = "0169"; 
var sText    = ""; 
var i; 

if (AkelPad.GetEditWnd()) 
{ 
  for (;;) 
  { 
    sDec = AkelPad.InputBox(hMainWnd, "", "ALT+", sDec); 

    if (! sDec) 
      break; 
    else if (/[^\d]+/i.test(sDec)) 
      AkelPad.MessageBox(hMainWnd, "Digits only (0-9).", "Error", 0x10 /*MB_ICONERROR*/); 
    else 
    { 
      if (sDec= sDec.substr(0, Math.floor(sDec.length / 4) * 4)) 
      { 
        for (i = 0; i < sDec.length; i += 4) 
          sText += String.fromCharCode(parseInt(sDec.substr(i, 4), 10)); 

        AkelPad.ReplaceSel(sText); 
      } 
      break; 
    } 
  } 
}