ব্লকলি কীবোর্ড শর্টকাটের একটি রেজিস্ট্রি বজায় রাখে যা কীগুলি (অথবা ctrl-C এর মতো কী সংমিশ্রণ) কে অ্যাকশনের সাথে ম্যাপ করে। রেজিস্ট্রিতে বেশ কয়েকটি শর্টকাট, যেমন ctrl-C এবং meta-C কপি করার জন্য আগে থেকেই থাকে। আপনি রেজিস্ট্রিতে শর্টকাট যোগ করতে এবং সেখান থেকে শর্টকাট মুছে ফেলতে পারেন।
কীবোর্ড শর্টকাট কীভাবে কাজ করে
শর্টকাট রেজিস্ট্রিতে এমন বস্তু থাকে যা কীবোর্ড শর্টকাট মডেল করে। যখন ব্যবহারকারী একটি কী (অথবা কীগুলির সংমিশ্রণ) টিপে, তখন ব্লকলি:
কীটিতে কোন শর্টকাট প্রযোজ্য কিনা তা দেখার জন্য রেজিস্ট্রি পরীক্ষা করে। যদি একাধিক শর্টকাট কী ব্যবহার করে, তাহলে শর্টকাটগুলি নিবন্ধনের বিপরীত ক্রমে চেষ্টা করা হয়। অর্থাৎ, সবচেয়ে সাম্প্রতিক নিবন্ধিত শর্টকাটটি প্রথমে চেষ্টা করা হয়।
শর্টকাটের
preconditionFnফাংশন কল করে, যা নির্ধারণ করে যে শর্টকাটটি বর্তমান পরিস্থিতিতে প্রযোজ্য কিনা। উদাহরণস্বরূপ, কপি শর্টকাট ব্লকগুলিতে প্রযোজ্য কিন্তু ওয়ার্কস্পেসে নয়। যদি শর্টকাটটি প্রযোজ্য না হয়, তাহলে Blockly তালিকার পরবর্তী শর্টকাটটি চেষ্টা করে, যদি থাকে।শর্টকাটের
callbackফাংশন কল করে, যা শর্টকাটের ক্রিয়া সম্পাদন করে। উদাহরণস্বরূপ, কপি শর্টকাট বর্তমানে ফোকাস করা বস্তুর একটি কপি তৈরি করে, যেমন একটি ব্লক। যদি এই ফাংশনটিtrueফেরত দেয়, তাহলে প্রক্রিয়াকরণ বন্ধ হয়ে যায়। যদি এটিfalseফেরত দেয়, তাহলে Blockly তালিকার পরবর্তী শর্টকাটটি চেষ্টা করে, যদি থাকে।
ব্যাপ্তি
একটি Scope অবজেক্ট Blockly কম্পোনেন্টকে শনাক্ত করে যার বর্তমানে ফোকাস আছে। Scope অবজেক্টগুলি preconditionFn এবং callback এ পাস করা হয়, যা এগুলি ব্যবহার করে সিদ্ধান্ত নেয় যে একটি শর্টকাট একটি নির্দিষ্ট কম্পোনেন্টের জন্য প্রযোজ্য কিনা এবং যদি তাই হয়, তাহলে এটি কীভাবে প্রয়োগ করা হবে।
একটি Scope অবজেক্ট ব্যবহার করতে, এর focusedNode প্রোপার্টি ব্যবহার করুন। এটি এমন একটি অবজেক্ট যা IFocusableNode বাস্তবায়ন করে। এই ইন্টারফেসটি সমস্ত Blockly কম্পোনেন্ট দ্বারা বাস্তবায়িত হয় যার উপর ব্যবহারকারী ফোকাস করতে পারে, যার মধ্যে রয়েছে ওয়ার্কস্পেস, ব্লক, ফিল্ড, মন্তব্য এবং আপনার নিজস্ব কাস্টম কম্পোনেন্ট; আরও তথ্যের জন্য, Focus system দেখুন।
উদাহরণস্বরূপ, একটি preconditionFn শুধুমাত্র ব্লকের ক্ষেত্রে প্রযোজ্য তা নিশ্চিত করার জন্য focusedNode ব্যবহার করতে পারে।
preconditionFn(workspace, scope) {
return (scope.focusedNode instanceof Blockly.BlockSvg);
}
কীবোর্ড শর্টকাট ইন্টারফেস
শর্টকাট রেজিস্ট্রির অবজেক্টগুলি KeyboardShortcut ইন্টারফেস বাস্তবায়ন করে। এতে নিম্নলিখিত বৈশিষ্ট্যগুলি রয়েছে।
নাম (প্রয়োজনীয়)
শর্টকাটের জন্য একটি অনন্য নাম। এটি ব্যবহারকারীদের দেখানো হয় না এবং এটি মানুষের পঠনযোগ্য হওয়ার প্রয়োজন নেই। এটি অনুবাদ করা উচিত নয়।
const logFieldsShortcut = {
name: 'logFields',
// ...
};
পূর্বশর্ত Fn (ঐচ্ছিক)
বর্তমান পরিস্থিতিতে কোন শর্টকাট প্রযোজ্য কিনা তা নির্ধারণ করার জন্য ব্লকলি এই ফাংশনটিকে কল করে। যদি এটি true রিটার্ন করে, তাহলে ব্লকলি callback কল করে। যদি এটি false রিটার্ন করে, তাহলে ব্লকলি এই শর্টকাটটিকে উপেক্ষা করে। উদাহরণস্বরূপ:
const logFieldsShortcut = {
// ...
preconditionFn(workspace, scope) {
// This shortcut only applies to blocks.
return (scope.focusedNode instanceof Blockly.BlockSvg);
},
// ...
};
যদি শর্টকাটটি সর্বদা প্রযোজ্য হয় (অসাধারণ) তাহলে একটি শর্টকাট এই ফাংশনটি বাদ দিতে পারে। শর্টকাটগুলি এই ফাংশনটি বাদ দেওয়া উচিত নয় এবং তারপর callback শর্তসাপেক্ষে পদক্ষেপ নেওয়া উচিত নয়। এটি করার ফলে ব্লকলি প্রযোজ্য শর্টকাটগুলি দেখানো প্রাসঙ্গিক সহায়তা মেনু তৈরি করার মতো কাজ করতে বাধা দেয়।
কলব্যাক (ঐচ্ছিক)
এই ফাংশনটি শর্টকাটের সাথে সম্পর্কিত ক্রিয়া সম্পাদন করে। এটি কেবল তখনই ডাকা হয় যখন preconditionFn true প্রদান করে অথবা বিদ্যমান না থাকে। এর প্যারামিটারগুলি হল:
-
workspace: বর্তমানWorkspaceSvg। -
e: যেEventশর্টকাট শুরু করেছিল। -
shortcut:KeyboardShortcutনিজেই। -
scope: যেScopeশর্টকাট প্রযোজ্য।
সফল হলে true এবং ব্যর্থ হলে false ফেরত পাঠায়।
উদাহরণস্বরূপ:
const logFieldsShortcut = {
// ...
callback(workspace, event, shortcut, scope) {
// preconditionFn required focusedNode to be a BlockSvg.
for (input of scope.focusedNode.inputList) {
// Log the values of all named fields. (Label fields usually don't have names.)
for (field of input.fieldRow) {
if (field.name) {
console.log(field.name + ': ' + field.getText());
}
}
}
return true;
},
// ...
};
যদিও callback ঐচ্ছিক, সাধারণত এটি বাস্তবায়ন না করার কোনও কারণ নেই।
কীকোড (ঐচ্ছিক)
এই শর্টকাটটি সক্রিয় করার জন্য কীগুলির একটি অ্যারে (অথবা কীগুলির সংমিশ্রণ)। কীগুলি সনাক্ত করতে, Blockly.utils.KeyCodes এ কীকোডগুলি ব্যবহার করুন। উদাহরণস্বরূপ:
const logFieldsShortcut = {
// ...
keyCodes: [Blockly.utils.KeyCodes.L],
// ...
};
যদি আপনি একটি বিদ্যমান শর্টকাটে অতিরিক্ত কী ম্যাপ করতে চান -- উদাহরণস্বরূপ, আপনি একটি ডিফল্ট শর্টকাটে কী যোগ করতে চান -- তাহলে আপনি Blockly.ShortcutRegistry.registry.addKeyMapping কল করতে পারেন। এটি সাধারণ নয়।
কী সমন্বয়
যদি আপনার কীবোর্ড শর্টকাটটি দুটি কী-এর সংমিশ্রণ দ্বারা সক্রিয় করা হয়, যেমন Control এবং C একসাথে ধরে রাখা, তাহলে Blockly.ShortcutRegistry.registry.createSerializedKey এ কল করে একটি সিরিয়ালাইজড কী-কোড তৈরি করুন:
const ctrlC = Blockly.ShortcutRegistry.registry.createSerializedKey(
Blockly.utils.KeyCodes.C, // Keycode of main key
[Blockly.utils.KeyCodes.CTRL], // Array of modifier keys
);
const copyShortcut = {
// ...
keyCodes: [ctrlC], // Use the serialized keycode
// ...
};
নিয়ন্ত্রণ এবং মেটা
উইন্ডোজে, অনেক শর্টকাট Control কী দিয়ে সক্রিয় করা হয়। ম্যাকে, এই কীবোর্ড শর্টকাটগুলি Command কী ব্যবহার করে, যা META কীকোড হিসাবে স্বীকৃত। উভয় অপারেটিং সিস্টেমকে সমর্থন করার জন্য, CTRL কীকোড এবং META কীকোড উভয় দিয়েই আপনার শর্টকাটগুলি নিবন্ধন করুন।
const ctrlC = Blockly.ShortcutRegistry.registry.createSerializedKey(
Blockly.utils.KeyCodes.C,
[Blockly.utils.KeyCodes.CTRL],
);
const metaC = Blockly.ShortcutRegistry.registry.createSerializedKey(
Blockly.utils.KeyCodes.C,
[Blockly.utils.KeyCodes.META],
);
const copyShortcut = {
// ...
keyCodes: [ctrlC, metaC],
// ...
};
বাস্তবায়ন নোট
ব্লকলির কীবোর্ড ইভেন্ট হ্যান্ডলারগুলি KeyboardEvent এর keycode বৈশিষ্ট্য ব্যবহার করে, যদিও এটি অপ্রচলিত।
allowCollision (ঐচ্ছিক)
ডিফল্টরূপে, আপনি একটি প্রদত্ত কী বা কী সংমিশ্রণের জন্য কেবল একটি শর্টকাট নিবন্ধন করতে পারবেন। এই বৈশিষ্ট্যটিকে true হিসাবে সেট করলে আপনি একটি কী (বা কী সংমিশ্রণ) নিবন্ধন করতে পারবেন, এমনকি যদি একই কী (বা কী সংমিশ্রণ) সহ একটি শর্টকাট ইতিমধ্যেই নিবন্ধিত হয়ে থাকে।
মনে রাখবেন যে এই বৈশিষ্ট্যটি শুধুমাত্র এই শর্টকাটটি নিবন্ধন করার সময় প্রযোজ্য। এটি অন্যান্য শর্টকাটগুলিকে একই কী (অথবা কী সংমিশ্রণ) ব্যবহার করতে বাধা দেয় না। এগুলি নিবন্ধিত করা যাবে কিনা তা তাদের allowCollision সম্পত্তির মানের উপর নির্ভর করে।
একটি প্রদত্ত কী বা কী সংমিশ্রণের জন্য কতগুলি শর্টকাট নিবন্ধিত হোক না কেন, সর্বাধিক একটি সফলভাবে কার্যকর করা হবে। শর্টকাটগুলি নিবন্ধনের বিপরীত ক্রমে চেষ্টা করা হয় (শেষ নিবন্ধিত থেকে প্রথম নিবন্ধিত পর্যন্ত)। তাদের মধ্যে একটি তাদের কলব্যাক থেকে true ফেরত দেওয়ার পরে, অন্য কোনও শর্টকাট চেষ্টা করা হয় না।
মেটাডেটা (ঐচ্ছিক)
এটি একটি ইচ্ছাকৃত অবজেক্ট যাতে অতিরিক্ত তথ্য রয়েছে। এটি shortcut প্যারামিটারের মাধ্যমে callback জন্য উপলব্ধ।
শর্টকাট যোগ করুন, মুছুন এবং পরিবর্তন করুন
একটি নতুন কীবোর্ড শর্টকাট যোগ করতে, Blockly.ShortcutRegistry.registry.register এ কল করুন:
Blockly.ShortcutRegistry.registry.register(logFieldsShortcut);
এই ফাংশনটিতে একটি দ্বিতীয় প্যারামিটার ( allowOverrides ) রয়েছে যা আপনাকে একটি বিদ্যমান শর্টকাটকে আপনার শর্টকাটের মতো একই নামের সাথে প্রতিস্থাপন করতে দেয়। মনে রাখবেন যে এটি KeyboardShortcut.allowCollision থেকে আলাদা, যা আপনাকে একটি ভিন্ন নামের একটি শর্টকাট যোগ করতে দেয় কিন্তু বিদ্যমান শর্টকাটের মতো একই কী বা কী সমন্বয় ব্যবহার করে।
একটি কীবোর্ড শর্টকাট মুছে ফেলার জন্য, Blockly.ShortcutRegistry.registry.unregister এ কল করুন এবং শর্টকাটের নামটি দিন:
Blockly.ShortcutRegistry.registry.unregister('logFields');
আপনি কোনও কীবোর্ড শর্টকাট পরিবর্তন করতে পারবেন না। পরিবর্তে, আপনাকে বিদ্যমান শর্টকাটটি মুছে ফেলতে হবে এবং একটি নতুন যোগ করতে হবে। উদাহরণস্বরূপ:
// Get the existing shortcut. getRegistry returns an object keyed by shortcut name.
const allShortcuts = Blockly.ShortcutRegistry.registry.getRegistry();
const modLogFieldsShortcut = allShortcuts[logFieldsShortcut.name];
// Apply the shortcut only to math blocks,
modLogFieldsShortcut.preconditionFn = function (workspace, scope) {
return (scope.focusedNode instanceof Blockly.BlockSvg &&
scope.focusedNode.type.startsWith('math_'));
}
// Delete the existing shortcut and add the modified shortcut.
Blockly.ShortcutRegistry.registry.unregister(logFieldsShortcut.name);
Blockly.ShortcutRegistry.registry.register(modLogFieldsShortcut);
ডিফল্ট শর্টকাট
শর্টকাট রেজিস্ট্রিতে বেশ কিছু শর্টকাট আগে থেকেই থাকে। আপনি এগুলি https://github.com/RaspberryPiFoundation/blockly/blob/main/core/shortcut_items.ts এ খুঁজে পেতে পারেন। শর্টকাটগুলি registerXxxx ফাংশনে সংজ্ঞায়িত করা হয়েছে।
কীবোর্ড নেভিগেশন শর্টকাট
কীবোর্ড নেভিগেশন প্লাগইনে এমন শর্টকাট রয়েছে যা ব্যবহারকারীদের কীবোর্ড দিয়ে ব্লকলি নেভিগেট করতে দেয়, যেমন তীরচিহ্ন ব্যবহার করে। কীবোর্ড নেভিগেশন এমন ব্যবহারকারীদের জন্য অপরিহার্য যারা মাউস ব্যবহার করতে পারেন না, যেমন মোটর বা দৃষ্টি প্রতিবন্ধী ব্যক্তিরা। এটি এমন পাওয়ার ব্যবহারকারীদের জন্যও কার্যকর যারা দক্ষতার জন্য কীবোর্ড শর্টকাট ব্যবহার করতে চান।