Вот тут написано, как получить место курсора в textarea. В нём уже можно показывать текущий режим ввода. Правда, я не думаю, что браузер может получить информацию о системной раскладке, но я всё равно планирую переключать раскладку внутри браузера.
В виме как раз форма курсора меняется. Не представляю как бы я в нем жил без этой фичи. Нужно только чтобы терминал это умел. Есть плагин togglecursor для ленивых, а так требуется всего пара заклинаний в конфиге.
а я привык уже смотреть на цвет statusline и переключаться по [F1]:
"
set keymap=russian-jcukenwin " установить keymap, чтобы по Ctrl+^ переключался на русский и обратно
set iskeyword=@,48-57,_,192-255 " настраиваю для работы с русскими словами (чтобы w, b, * понимали русские слова)
set iminsert=0 " по умолчанию - латинская раскладка
set imsearch=0 " по умолчанию - латинская раскладка при поиске
set backspace=indent,eol,start " allow backspacing over everything in insert mode
colorscheme koehler
" Переключение раскладок и индикация выбранной в данный момент раскладки.
" При английской раскладке статусная строка текущего окна будет синего цвета, а при русской - красного.
function MyKeyMapHighlight()
if &iminsert == 0
hi tabLine ctermfg=darkBlue guifg=darkBlue guibg=darkGrey
hi StatusLine ctermfg=darkBlue guifg=darkBlue guibg=Gray30
else
hi tabLine ctermfg=darkBlue guifg=darkBlue guibg=darkGrey
hi StatusLine ctermfg=darkRed guifg=darkRed guibg=Gray30
endif
endfunction
" Вызываем функцию, чтобы она установила цвета при запуске Vim'a
call MyKeyMapHighlight()
" При изменении активного окна будет выполняться обновление индикации текущей раскладки
au WinEnter * :call MyKeyMapHighlight()
"
cmap <silent> <F1> <C-^>
imap <silent> <F1> <C-^>X<Esc>:call MyKeyMapHighlight()<CR>a<C-H>
nmap <silent> <F1> a<C-^><Esc>:call MyKeyMapHighlight()<CR>
vmap <silent> <F1> <Esc>a<C-^><Esc>:call MyKeyMapHighlight()<CR>gv
"
set encoding=utf8 " set charset translation encoding
set termencoding=utf8 " set terminal encoding
set fileencoding=utf8 " set save encoding
set fileencodings=utf8,cp1251,cp866,ucs-2le,koi8r " список предполагаемых кодировок, в порядке предпочтения
set fileformats=dos,unix,mac
"
set laststatus=2 " всегда показывать строку статуса
set statusline=%f%m%r%h%w\ %y\ \{\hl:%{&syn}}\{ff:%{&ff}\}\{fenc:%{&fenc}\}\{enc:%{&enc}\}\{tenc:%{&tenc}\}%=\{dec:%3b\ hex:%2B\}%4c:%3l/%L[%2p%%]
"
Думаю, статус бар далёк от курсора. Даже смотреть на экран не всегда хочется, а уж далеко от курсора - тем более. Фон экрана или что-то около курсора было бы лучше. Хотя то, что около курсора, может загораживать часть текста и это может раздражать.
Насчёт аббревиатур - вопрос не в том, как их сделать,а в том, пользуются ли ими. Я, например, почти никогда не пользуюсь, поскольку считаю, что не нужно привязываться к IDE - сегодня она одна, а завтра вынужденно будет другая. Ну и плюс к тому в лиспе считается более правильным сделать DSL, в котором сама запись будет более компактной. Потому что написать-то простыню легко, а потом при поддержке её ещё придётся читать, и на долгом проекте чтение многократно перекроет запись по трудоёмкости. Но это лишь мой опыт и мои предпочтения, а вопрос сейчас в том, чем народ пользуется.
Думаю, статус бар далёк от курсора. Даже смотреть на экран не всегда хочется, а уж далеко от курсора - тем более. Фон экрана или что-то около курсора было бы лучше. Хотя то, что около курсора, может загораживать часть текста и это может раздражать.
там же функция с указанием цветов классам — что хочешь, то и раскрашивай, например:
* комментарии (серый - англ, синий - рус)
* строки (зеленый - англ, фиолетовый - рус)
* можно и фон красить: set background=light (или dark)
* ...
Впрочем, не настаиваю, каждый сам кузнец своих фломастеров.
Насчёт аббревиатур - вопрос не в том, как их сделать,а в том, пользуются ли ими. Я, например, почти никогда не пользуюсь, поскольку считаю, что не нужно привязываться к IDE - сегодня она одна, а завтра вынужденно будет другая.
кхм, а кто недавно рассказывал, сколько нужно жать на пробел, чтоб латиницу печатать? в блокноте такого нет )
вот, например, достаточно пару строк добавить в функцию:
"
function MyKeyMapHighlight()
if &iminsert == 0
set background=dark
hi tabLine ctermfg=darkBlue guifg=darkBlue guibg=darkGrey
hi StatusLine ctermfg=darkBlue guifg=darkBlue guibg=Gray30
else
set background=light
hi tabLine ctermfg=darkBlue guifg=darkBlue guibg=darkGrey
hi StatusLine ctermfg=darkRed guifg=darkRed guibg=Gray30
endif
endfunction
"
Нет, я в данном случае не про вим, а про гипотетический веб-редактор. Похоже, что в виме всё гораздо проще. С клавиатурой в вебе просто ад, JavaScript Madness: Keyboard Events. Опять же и форму каретки при вводе текста в вебе поменять нельзя, я не нашёл способа.
Вот, например, вёрстка страниц на арабском — это проблема :D Когда при движении вправо при переходе от англоязычного html к арабскому тексту курсор прыгает в конец текста и меняет направление движения :) При чём ещё и курсорные кнопки меняются, теперь «вправо» одначает движение к началу текста и нужно начинать нажимать «влево»...
В общем, я уже почти доделал клавиатуру, где с зажатым пробелом вводится латиница. По правде говоря, я знал, что в вебе всё плохо, но не знал, что всё совсем уж плохо. Сейчас занимаюсь кросс-браузерной совместимостью, потом сделаю тестовую страничку на тех браузерах, которые выживут :) Репозиторий тут, без всяких объяснений, но в нём есть пример. jquery и т.п.
Если хватит сил, сделаю какой-нибудь онлайн редактор маркдауна, хотя по правде сказать, я уже от этого проекта подустал. Может быть, оставлю просто демо.
Если у вас есть идеи, где ещё кроме маркдауна актуально частое переключение раскладки - пишите.
Неохота новую тему заводить, но вопрос такой: как распознать браузер. Почитал, что сейчас модно распознавать не браузер, а поддержку фич. Так вот фича в данном случае, состоит в том, что нажатие на кнопку «=» в разных браузерах порождает разный код клавиши. Не мыслю, как проверить это, не нажав на кнопку, и при этом в modernizr тоже подобной проверки не нашёл. jquery.browser в моём Firefox возвращает пустоту.
Я прикинул по трём имеющимся у меня (под офтопиком) браузерам: если в navigator.userAgent есть слово Firefox, то это Firefox. Если есть слово .NET, то это IE. В Yandex есть слово Chrome. Не уверен, что возьмусь поддерживать Oper-у - и так уже достало.
Я ещё собираюсь писать на странице «похоже, что ваш браузер - такой-то. Если я неправ, то ничего работать у вас не будет».