LINUX.ORG.RU

emacs и переключение раскладки

 ,


0

1

Решил я податься в секту емаксеров с gui версией emacs-а, т.к. gedit никуда не годится, а vim что-то в urxvt стал фигово работать, скорее всего urxvt в ubuntu поломан или просто забросили его, но порой обновление экрана не происходит. Господа емаксеры, а как вы переключаете раскладки? Emacs активно использует клавиши Ctrl и Alt, а раскладки обычно на Ctrl+Shift и Alt+Shift... Что перебиваете? Раскладки или хоткеи в emacs-е?

★★★★★

У меня четыре раскладки, активируются по Ctrl+[1|2|3|4]. Если включена первая или вторая (основные), то CapsLock переключает между ними.

aquadon ★★★★★ ()

Левый shift - английский

Правый shift - русский

В linux использую s1kls, ранее loloswitcher от лоровца, но его на arch нету, а собирать лень, но он лучше, ибо задержек не даёт. На windows - punto switcher.

Решение позволяет не думать, какая раскладка включена, не смотреть на индикаторы, тупо жмякать нужный шифт.

Но привязка к X11 под линукс и 2 языка.

anonymous ()

Одновременно два шифта со времён ДОС. Удобнее и беспроблемнее комбинации нет. В емаксе не парюсь и использую системную переключалку.

anonymous ()
Ответ на: комментарий от mord0d

Я использую KDE. System Settings -> Input Devices -> Keyboard -> …

Там легко назначить каждой раскладке свою комбинацию, ограничить кольцо переключения по общей комбинации двумя раскладками и настроить индикацию светодиодами на клавиатуре.

Думаю, что и без KDE такое делается.

aquadon ★★★★★ ()
Ответ на: комментарий от anonymous

Capslock для переключения раскладки - это безумие, потому что куда важнее замаппить его на контрол.

В имаксе? Да, это удобно. Хотя я пользуюсь и контролом часто, по привычке. Кстати, посмотрел, именно в имаксе у меня caps не переключает раскладку (использую ctrl+shift) - потому что редко в emacs нужен язык отличный от англ, но в остальных приложениях да. Идея с перебиндиванием друг на друга ctrl и caps именно в emacs, возможно, имеет смысл.

alienclaster ★★ ()

Я использую awesome и раньше использовал три раскладки.

Решил для себя проблему так: awesome смотрит, какое окно активно, если это не емакс, то зовёт setxkbmap. Если емакс, то зовёт емаксклиент.

Для того, чтобы это работало, емакс должен работать в режиме сервера и выводить имя буфера в имя окна.

Таким образом раскладки везде переключаются по ctrl+\

Сейчас раскладки осталось две, потому что я открыл для себя compose ıęüğ ололо

Овёс:

-- Store keyboard layout for each window, show flags etc.
-- In my config, it goes into screen definition

    kbdcfg = {}
    kbdcfg.state = {}
    kbdcfg.cmd = "setxkbmap"
    kbdcfg.layout = {
       { "pl", "", "PL", 'nil', "poland" },
       { "ru", "", "RU", '\\"russian-computer\\"', "russia" }  
       -- { "tr", "", "TR", '\\"turkish-postfix\\"', "turkey" }
    } 
    kbdcfg.current = 1  -- pl is our default layout
    kbdcfg.widget = wibox.widget.textbox()
    kbdcfg.widget:set_text(" " .. kbdcfg.layout[kbdcfg.current][3] .. " ")

    -- Set keyboard layout with a command and update the widget
    kbdcfg.set = function (k)
       kbdcfg.state[client.focus.window] = k
       local t = kbdcfg.layout[k]
       kbdcfg.widget:set_text(" " .. t[3] .. " ")
       -- kbdcfg.flag(t[5])
       os.execute( kbdcfg.cmd .. " " .. t[1] .. " " ..t[2] )
    end
    
    -- Lookup the layout seen in this window the last time
    kbdcfg.restore = function ()
       local t = kbdcfg.state[client.focus.window] or 1
       kbdcfg.set(t)
    end
    
    kbdcfg.flag = function (flag)
       naughty.notify({ icon = "/home/hoodoo/.config/awesome/resources/flags/" .. flag .. ".png", icon_size = 140 })
    end
        
    -- Just cycle through all the layouts by one, call the switch function
    kbdcfg.cycle = function ()
       kbdcfg.current = kbdcfg.current % #(kbdcfg.layout) + 1
       kbdcfg.smartswitch(kbdcfg.current)
    end
    
    -- Distinct between Emacs and all the rest, if it's emacs then set input method instead of switch command
    kbdcfg.smartswitch = function (n)
       local layout_description = kbdcfg.layout[n]
       if client.focus.class == 'Emacs' then
	  os.execute( "emacsclient -e " .. '"' .. '(with-current-buffer \\"' .. client.focus.name .. '\\" (set-input-method ' .. layout_description[4] .. '))"' )
       else
	  kbdcfg.set(n)
       end
    end

-- This goes into keys definition
   -- Defined for all variants of the \ button - in Turkish Q there's a comma there, meh
   awful.key({ "Control"         }, "backslash", kbdcfg.cycle ),
   -- awful.key({ "Control"         }, "comma", kbdcfg.cycle ),

Емакс:

(setq frame-title-format '("%b"))

На caps повешен compose. Ушёл от турецкого инпута в емаксе, потому что тогда получается два разных способа ввода - в емаксе и во всём остальном. А turkish-postfix работает очень похоже на compose.

Hoodoo ★★★★★ ()
Последнее исправление: Hoodoo (всего исправлений: 1)
Ответ на: комментарий от Hoodoo

Какие раскладки? Английская, русская, украинская и европейская (повторяет английскую, но добавляет еще букв на второй уровень).

https://eurkey.steffen.bruentjen.eu/layout.html

aquadon ★★★★★ ()
Последнее исправление: aquadon (всего исправлений: 1)

В имаксе С-\, системную – два шифта разом. Идеально ложатся под мизинцы, из-за чего просто запомнить. Ну и такой подход заставляет держать обе руки на клаве.

Ну и согласен с первым комментом – попробуй doom если не просвятишся от нативных сочетаний.

Cirno ()
Последнее исправление: Cirno (всего исправлений: 4)

Раскладка на капсе, контрол и мета как обычно, бинды оконного менеджера на win, бинды в емаксе не дефолтные, а чуть более эргономичные.

Если бы использовал DE, то раскладку повесил бы на win, и контрол с капсом поменял местами.

raven_cler ★★ ()