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

Russian main discussion
  • Author
  • Message
Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

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

Post by Fr0sT »

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

TNX
Offline
Posts: 57
Joined: Thu Jul 12, 2012 10:59 am

Post by TNX »

Будьте добры, конкретный пример в студию 8)
Last edited by TNX on Wed Apr 10, 2013 6:37 pm, edited 1 time in total.

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post 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)?)

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

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

TNX
Offline
Posts: 57
Joined: Thu Jul 12, 2012 10:59 am

Post by TNX »

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

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Ага! Вот и докопались до истины. Хорошо бы эту фичу в справку куда-нибудь. Попробуем, спасибо!
TNX
во-во, это я и называю "микрософтовое безумие".

TNX
Offline
Posts: 57
Joined: Thu Jul 12, 2012 10:59 am

Post by TNX »

Fr0sT, это сделано для совместимости с предыдущими версиями ОС, а точнее для корректной работы старого ПО. Ну и пользователи привыкли уже к такой системе, хотя она и несовершенна.

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

TNX, мне как пользователю однохренственно, по каким причинам эти костыли тянутся в течение десятков лет. Для меня имеет значение только то, что я не могу вменяемым способом ввести элементарное ударение (U+0769)

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

TNX
Offline
Posts: 57
Joined: Thu Jul 12, 2012 10:59 am

Post by TNX »

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

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Как много интересного открывается :) Благодарю!

Offline
Posts: 46
Joined: Fri Mar 22, 2013 5:05 am
Location: Белово, Кемеровская область, Россия

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

Post 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.

Offline
Posts: 56
Joined: Tue Aug 26, 2008 9:56 am

Post by temp1111 »

А напишите кто-нибудь скрипт Egorkaru.js, чтобы он автоматически с русского на русский переводил :D :D :D

Offline
Posts: 157
Joined: Thu Nov 26, 2015 8:03 pm
Location: Rostov-on-Don

Post 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 старенькая тема правда, попалась вот...

eil
Offline
Posts: 40
Joined: Sun Nov 15, 2009 5:53 pm
Location: Alex

Post by eil »

вопрос по этой же теме - так как на ноуте без NumPad через Alt+код получить символы?
сразу скажу, это для портативной версии, никаких правок реестра, так же "вставка символа" тут не подходит.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post 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; 
    } 
  } 
}
Post Reply