জিনোম শেল এক্সটেনশন কী বাইন্ডিং


11

কোন <Super>+Aজিনোম শেল এক্সটেনশনে কোনও ফাংশনটির (কী ) সমন্বয় (বিশ্বব্যাপী) সবচেয়ে সহজ উপায় কী ?

বেশ কয়েকটি এক্সটেনশান পরিদর্শন করে আমি নিম্নলিখিত কোডটিতে চলে এসেছি:

global.display.add_keybinding('random-name',
                              new Gio.Settings({schema: 'org.gnome.shell.keybindings'}),
                              Meta.KeyBindingFlags.NONE,
                              function() { /* ... some code */ });

আমি বুঝতে পারি যে কী সংমিশ্রণটি স্কিমা প্যারামিটার দ্বারা নির্দিষ্ট করা হয়েছে এবং মিশ্রণটি বর্ণনা করে একটি এক্সএমএল ফাইল তৈরি করা সম্ভব possible এটি করার একটি সহজ উপায় আছে?


আপনি যদি কোনও জিনোম শেল এক্সটেনশন তৈরি করে থাকেন তবে আপনি সম্ভবত http://stackoverflow.com/- এ আরও ভাল প্রতিক্রিয়া পেতে পারেন । মডারেটরের মনোযোগের জন্য পতাকাঙ্কিত করুন এবং তাদের আপনার প্রশ্নটি স্থানান্তর করা উচিত।
NobleUplift

উত্তর:


5

টি এল; ডিআর

এখানে একটি শ্রেণি রয়েছে:

KeyManager: new Lang.Class({
    Name: 'MyKeyManager',

    _init: function() {
        this.grabbers = new Map()

        global.display.connect(
            'accelerator-activated',
            Lang.bind(this, function(display, action, deviceId, timestamp){
                log('Accelerator Activated: [display={}, action={}, deviceId={}, timestamp={}]',
                    display, action, deviceId, timestamp)
                this._onAccelerator(action)
            }))
    },

    listenFor: function(accelerator, callback){
        log('Trying to listen for hot key [accelerator={}]', accelerator)
        let action = global.display.grab_accelerator(accelerator)

        if(action == Meta.KeyBindingAction.NONE) {
            log('Unable to grab accelerator [binding={}]', accelerator)
        } else {
            log('Grabbed accelerator [action={}]', action)
            let name = Meta.external_binding_name_for_action(action)
            log('Received binding name for action [name={}, action={}]',
                name, action)

            log('Requesting WM to allow binding [name={}]', name)
            Main.wm.allowKeybinding(name, Shell.ActionMode.ALL)

            this.grabbers.set(action, {
                name: name,
                accelerator: accelerator,
                callback: callback,
                action: action
            })
        }

    },

    _onAccelerator: function(action) {
        let grabber = this.grabbers.get(action)

        if(grabber) {
            this.grabbers.get(action).callback()
        } else {
            log('No listeners [action={}]', action)
        }
    }
})

এবং এটিই আপনি এটি ব্যবহার করেন:

let keyManager = new KeyManager()
keyManager.listenFor("<ctrl><shift>a", function(){
    log("Hot keys are working!!!")
})

আপনার প্রয়োজন হবে আমদানি:

const Lang = imports.lang
const Meta = imports.gi.Meta
const Shell = imports.gi.Shell
const Main = imports.ui.main

শুনতে বন্ধ করতে:

for (let it of keyManager.grabbers) {
    global.display.ungrab_accelerator(it[1].action)
    Main.wm.allowKeybinding(it[1].name, Shell.ActionMode.NONE)
}

ব্যাখ্যা

আমি ভীষণ ভুল হতে পারি, তবে গত কয়েকদিনে আমি যা আবিষ্কার করেছি।

সবার আগে হ'ল হটকি বাজানোর জন্য দায়ী দায়িত্বে থাকা মাটার। মুটার উইন্ডো ম্যানেজার তৈরির জন্য একটি কাঠামো, এটি নিজে উইন্ডো ম্যানেজার নয়। জিনোম শেলের জেএস-এ লেখা একটি ক্লাস রয়েছে এবং এটি "উইন্ডো ম্যানেজার" নামে পরিচিত - এটি আসল উইন্ডো ম্যানেজার যা সমস্ত নিম্ন-স্তরের স্টাফ করার জন্য অভ্যন্তরীণভাবে মাটার ব্যবহার করে। মিটারের একটি মেটাডিজপ্লে রয়েছে। হটকি শোনার অনুরোধ করতে আপনি এটি ব্যবহার করেন। কিন্ত! তবে এই হটকি ব্যবহার অনুমোদনের জন্য মুটারকে উইন্ডো ম্যানেজারের প্রয়োজন হবে। হটকি চাপলে কী হয়? - মেটাডিসপ্লে ইভেন্ট 'ফিল্টার-কি-বাইন্ডিং' উত্পন্ন করে। - এই হটকিটি প্রক্রিয়া করার অনুমতি দেয় কিনা জিনোম শেলের উইন্ডো ম্যানেজার পরীক্ষা করে। - উইন্ডো ম্যানেজার মেটাডিসপ্লেতে যথাযথ মান প্রদান করে - যদি এই হটকিটি প্রক্রিয়া করার অনুমতি দেওয়া হয় তবে মেটাডিসপ্লে ইভেন্ট 'এক্সিলারেটর-অ্যাক্টিভেটড' উত্পন্ন করে


আমি এই কোডটি শুধুমাত্র জিনোম ৩.২২
p2t2p

এটি একটি দুর্দান্ত উত্তর, ভাগ করে নেওয়ার জন্য অনেক ধন্যবাদ।
andy.holmes

গ্লোবাল কোথা থেকে আসে? এটি কোন গ্রন্থাগারের অংশ?
বোরিজ্জ্জেজ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.