ইউনিটি প্যানেলে কী-বোর্ড মডিফায়ার স্টেট অ্যাপলেট কীভাবে যুক্ত করবেন?


18

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

ইউনিটির প্যানেলে কীভাবে একটি কীবোর্ড সংশোধক রাষ্ট্র অ্যাপলেট দেয়?

স্পষ্টকরণ: আমি ইতিমধ্যে স্টিকি কীগুলি সক্ষম করেছি। আমি কীভাবে একটি অ্যাপলেট যুক্ত করব যা পরিবর্তক কীগুলির স্থিতি নির্দেশ করে । এই সূচকটি প্রদর্শন করবে যখন শিফট কীটি হতাশাগ্রস্থ হয়, যখন Alt কীটি হতাশ হয়, যখন টুক্স কী চাপ হয় এবং যখন Ctrl কীটি হতাশ হয়। এই অ্যাপলেটটি সমস্ত প্রধান ডেস্কটপ পরিবেশে উপস্থিত রয়েছে (কে, কে, উইন্ডোজ, ম্যাক ওএসএক্স এবং জিনোম)। এটি ডেস্কটপের অ্যাক্সেসযোগ্যতার জন্য প্রয়োজনীয়।

কীবোর্ড বিন্যাস সূচক অ্যাপলেটটির পাশে কীবোর্ড সংশোধক রাষ্ট্র অ্যাপলেট-এর একটি চিত্র এখানে রয়েছে। সংশোধনকারীদের প্রতিনিধিত্ব হয় বাঁ দিক থেকে ঠিক আছে, Shift, Ctrl, Alt, I-dont-know-this-one, Tux/Win, NumLock, এবং CapsLock। এটি দেখা যায় যে নমলক কীটি সক্রিয় রয়েছে।

এখানে চিত্র বর্ণনা লিখুন


ত্রুটি ... এটি এলে একটি বৃহত ব্যবধান বলে মনে হচ্ছে ... একটি মডিফায়ার কী টিপ করা হলেও বীপ দেওয়ার একটি জিনিস রয়েছে।
উইলফ

@ উইলফ যদি আমার ভুল না হয় তবে ইউনিটিতে অ্যাক্সেসিবিলিটি আইকন রয়েছে (জিনোম 3 এর সমান) তবে ব্যবহারকারীকে স্থিতি সম্পর্কে অবহিত করার জন্য "অতিরিক্ত" আইকন নয়।
ব্রায়াম

4
@ তক্কাত: এই পরামর্শের জন্য আপনাকে ধন্যবাদ। indicator-keylockকেবলমাত্র সেই চাবি যা ঐতিহ্যগতভাবে কীবোর্ড নিজেই রাজ্যের সূচক আছে রাষ্ট্র প্রদর্শন করা হয়: CapsLock, ScrollLock, NumLock। আমি একটি সূচক যেটি মান সংশোধক কী রাজ্যের দেখায় প্রয়োজন: Shift, Ctrl, Tux, Alt। সমস্ত বড় ডেস্কটপগুলিতে (কেডিএ, উইন্ডোজ, ম্যাক ওএসএক্স) এই সূচক অ্যাপলেট উপলব্ধ।
dotancohen

1
আমি বিশ্বাস করি যে আপনি যে কেডিআই সরঞ্জামটি উল্লেখ করছেন তার প্যাকেটের নাম plasma-widget-kbstateএবং সফ্টওয়্যার কেন্দ্রে একটি তল্লাশি অনুসন্ধান আসলে কোনও সমতুল্য ফলাফলের দিকে মনোযোগ দেয় না
ড্যানিয়েল ডাব্লু

2
@ শেঞ্জি: আমি কেবি স্টেটের প্লাজময়েড ব্যবহার করছি। আপনি যদি কুবুন্টুতে থাকেন তবে এটি দিয়ে ইনস্টল করুন sudo apt-get install plasma-widget-kbstate
dotancohen

উত্তর:


7

এটি Unক্যের একটি অসামান্য বিষয়:

নীচের কোডটি আপডেট করা হয়েছে, এখন এটি অবস্থা দেখানোর জন্য আইকনগুলি ব্যবহার করতে পারে। তবে হার্ড ড্রাইভে আইকন ফাইল আপডেট করতে হবে এবং আবার এটিকে আবার লোড করতে হওয়ায় এটি কিছুটা ধীর হতে পারে। (এই ইস্যু সম্পর্কে নোট দেখুন / এতে সীমাবদ্ধতা libappindicator)

ওয়েলআপড 8 পিপিএতে একটি ভাল প্যাকেজড রিলিজ উপলব্ধ করা হয়েছিল (ধন্যবাদ আলিন আন্ড্রেই / অ্যান্ড্রু / এর প্রতি ধন্যবাদ)

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install indicator-xkbmod

রেফারেন্স: কীবোর্ড সংশোধকগণ উবুন্টুর জন্য রাজ্য সূচক: এক্সকেবিড সূচক


আসল উত্তর:

এটি প্রশ্নের উত্তরীয় উত্তর হতে উপস্থিত হয় না। এটি চারপাশের কাজ হিসাবে গণনা করা যেতে পারে। কাউকে প্রত্যাশা করে এর জন্য পরিশীলিত সমাধান লিখেছেন।

এটি ইউনিটির জন্য একটি সাধারণ প্রোটোটাইপ কীবোর্ড সংশোধক সূচক।

বাম থেকে শুরু হওয়া চিত্র: আইকন, শিফট, লকড ক্যাপস, সিটিআরএল, আল্ট, সুপার, লকড অল্টগ্রি (লকড স্টেটটি নির্দেশ করার জন্য ছোট বৃত্ত)

unityক্য-এক্সকেবিএম প্রোটোটাইপের স্ক্রিনশট

উত্স ফাইল unity-xkbmod.c:

/*
 * unity-xkbmod.c
 *
 * Copyright 2014 Sneetsher <sneetsher@localhost>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301, USA.
 *
 *
 */

#include <string.h>

#include <X11/XKBlib.h>

#include <glib/gprintf.h>
#include <gtk/gtk.h>
#include <libappindicator/app-indicator.h>

//callback data structure
typedef struct _AppData {
  Display *_display;
  int *_deviceId;
  AppIndicator *indicator;
} AppData;

//menu ui
static GtkActionEntry entries[] = {
  { "Quit",     "application-exit", "_Quit", "<control>Q",
    "Exit the application", G_CALLBACK (gtk_main_quit) },
};

static guint n_entries = G_N_ELEMENTS (entries);

static const gchar *ui_info =
"<ui>"
"  <popup name='IndicatorPopup'>"
"    <menuitem action='Quit' />"
"  </popup>"
"</ui>";

//callback function, get xkb state, update indicator label (icon have limitation)
static gboolean update_xkb_state (gpointer data)
{
  //get xkb state
  XkbStateRec xkbState;
  XkbGetState(((AppData*) data)->_display, *(((AppData*) data)->_deviceId), &xkbState);

  //construct label
  GString *label = g_string_new("");

  register int i;
  unsigned bit;

  //loop taken from xkbwatch source
  for (i = XkbNumModifiers - 1, bit = 0x80; i >= 0; i--, bit >>= 1)
  {
    //printf("base%d %s  ", i, (xkbState.base_mods & bit) ? "on " : "off");
    //printf("latched%d %s  ", i, (xkbState.latched_mods & bit) ? "on " : "off");
    //printf("locked%d %s  ", i, (xkbState.locked_mods & bit) ? "on " : "off");
    //printf("effective%d %s  ", i, (xkbState.mods & bit) ? "on " : "off");
    //printf("compat%d %s\n", i, (xkbState.compat_state & bit) ? "on " : "off");

    //todo: change constant with xkb modifier constant (defined in the headers)
    // show effective modifier stat
    switch (i)
    {
      case 7:
        g_string_prepend (label,  ((xkbState.mods & bit) ? "⎇" : ""));
        break;
      case 6:
        g_string_prepend (label,  ((xkbState.mods & bit) ? "⌘" : ""));
        break;
      case 5:
        g_string_prepend (label,  ((xkbState.mods & bit) ? "5" : ""));
        break;
      case 4:
        g_string_prepend (label,  ((xkbState.mods & bit) ? "①" : ""));
        break;
      case 3:
        g_string_prepend (label,  ((xkbState.mods & bit) ? "⌥" : ""));
        break;
      case 2:
        g_string_prepend (label,  ((xkbState.mods & bit) ? "⋀" : ""));
        break;
      case 1:
        g_string_prepend (label,  ((xkbState.mods & bit) ? "⇬" : ""));
        break;
      case 0:
        g_string_prepend (label,  ((xkbState.mods & bit) ? "⇧" : ""));
        break;
      default:
        break;
    };

    // show if modifier is locked
    g_string_prepend (label,  ((xkbState.locked_mods & bit) ? " ˳" : " "));
  }

  //g_string_prepend (label,  "");
  app_indicator_set_label (((AppData*) data)->indicator, label->str, NULL);

  //g_free(label);
  return TRUE;
}


int main (int argc, char **argv)
{
  AppData appdata;
  Display *_display;
  int _deviceId;

  char* displayName = strdup("");
  int eventCode;
  int errorReturn;
  int major = XkbMajorVersion;
  int minor = XkbMinorVersion;;
  int reasonReturn;


  AppIndicator *indicator;
  GtkWidget *indicator_menu;
  GtkUIManager *uim;
  GtkActionGroup *action_group;
  GError *error = NULL;

  gtk_init (&argc, &argv);


  XkbIgnoreExtension(False);

  g_printf("Xkb client lib ver: %d.%d\n" , major , minor );
  _display = XkbOpenDisplay(displayName, &eventCode, &errorReturn,
                            &major, &minor, &reasonReturn);
  g_printf("Xkb server lib ver: %d.%d\n" , major , minor );

  if (reasonReturn != XkbOD_Success)
  {
    g_printf("Unable to open display!\n");
    return 1;
  }

  XkbDescRec* kbdDescPtr = XkbAllocKeyboard();
  if (kbdDescPtr == NULL)
  {
    g_printf ("Failed to get keyboard description.\n");
    return 2;
  }
  kbdDescPtr->dpy = _display;
  _deviceId = kbdDescPtr->device_spec;

  /*
  //no need for event listener, used gtk_timeout timer
  XkbSelectEventDetails(_display, XkbUseCoreKbd, XkbStateNotify,
                     XkbAllStateComponentsMask, XkbGroupStateMask);
  */


  action_group = gtk_action_group_new ("AppActions");
  gtk_action_group_add_actions (action_group, entries, n_entries, NULL);

  indicator = app_indicator_new_with_path (
                                        "Simple XKB Modifier Indicator",
                                        "icon",
                                        APP_INDICATOR_CATEGORY_HARDWARE,
                                        g_get_current_dir());

  uim = gtk_ui_manager_new ();
  gtk_ui_manager_insert_action_group (uim, action_group, 0);
  if (!gtk_ui_manager_add_ui_from_string (uim, ui_info, -1, &error))
  {
    g_printf ("Failed to build menus: %s\n", error->message);
    g_error_free (error);
    error = NULL;
    return 3;
  }

  indicator_menu = gtk_ui_manager_get_widget (uim, "/ui/IndicatorPopup");
  app_indicator_set_menu (indicator, GTK_MENU (indicator_menu));
  app_indicator_set_status (indicator, APP_INDICATOR_STATUS_ACTIVE);

  //app_indicator_set_label (indicator, " ⇧ ⋀ ⌥ ⎇  ⌘ ", NULL);
  //symbols: shift U21E7 ctrl U22C0 alt/altgr U2325 U2387  cmd U2318
  //from font: DejaVu Sans

  appdata._display = _display;
  appdata._deviceId = &_deviceId;
  appdata.indicator = indicator;
  gtk_timeout_add (120, (GtkFunction) update_xkb_state, &appdata);
  //nice for realtime tasks, to replace gtk_timeout
  //gtk_idle_add ((GtkFunction) idle_func, &appdata);

  gtk_main ();

  XCloseDisplay (_display);
  return 0;
}
  1. প্রয়োজনীয় শিরোনাম / libs ইনস্টল করা: (আমি কোনও মিস করি কিনা তা নিশ্চিত নয়)

    sudo apt-get install libx11-dev libappindicator-dev libgtk2.0-dev
    
  2. কম্পাইল:

    gcc -Wall unity-xkbmod.c -o unity-xkbmod `pkg-config --cflags --libs appindicator-0.1` -lX11
    
  3. চালান:

    ./unity-xkbmod
    

বিঃদ্রঃ:

  • libappindicatorইউনিটি সূচকগুলির জন্য ব্যবহৃত একটি গুরুত্বপূর্ণ বৈশিষ্ট্যের অভাব রয়েছে যা অন্যান্য ডেস্কটপ সূচকগুলি পোর্ট করতে সহজ করে। বাগ # 812067 এপিআই প্রয়োজনীয় দেখুন: পিক্সুফ আইকন সেটিং সমর্থন

    এই বৈশিষ্ট্যটি ব্যতীত, আসুন আমরা আমাদের (শিফট, সিটিআরএল, আল্ট, আল্টজিআর, সুপার) স্টিকি স্টিভ কীগুলি সহ প্রয়োজনীয় প্রয়োজন; আমাদের প্রত্যেকের জন্য 3 টি প্রধান স্থিতি রয়েছে (অফ, অন / ল্যাচড, লকড)। সুতরাং 3 ^ 5 সম্মিলিত আইকন উত্পন্ন করা উচিত। (যেখানে সাধারণ কেস মাত্র 3x5 একক আইকন)

    এজন্য আমি দেজাভু সানস ফন্ট থেকে প্রতীক সহ সূচক লেবেল ব্যবহার করেছি ।

  • আইকন রাখার জন্য, এটি একই ফোল্ডারে রাখুন এবং নাম দিন icon.*। স্বীকৃত ফর্ম্যাটগুলি: পিএনজি, এসভিজি, আইসিও, এক্সপিএম ...

    আপনি যদি কোনও আইকন পছন্দ করেন না, কেবল পরিবর্তে 1x1 পিক্স্স চিত্র তৈরি করুন।

তথ্যসূত্র:


সুন্দর ধন্যবাদ আপনাকে! আমি এটি ব্যবহার করে দেখুন এবং আপনার কাছে ফিরে আসব। দুর্দান্ত কাজ, স্নিটার!
dotancohen

যে আপনি স্নিটার!
dotancohen

হ্যাঁ, আপনাকে ধন্যবাদ কমপক্ষে আপনি ইউনিটি ব্যবহার করতে পারেন, স্থির অবস্থানের আইকনগুলি ছাড়াই এটি কুশ্রী হতে পারে?
user.dz

1
আমি কুৎসিত কিছু মনে করি না, আপনার আমার একটি ছবি দেখা উচিত! আমি এই বিষয়টি উবুন্টু বাগট্র্যাকারে উল্লেখ করেছি ।
dotancohen

1
স্নিটার, আমি আবার আপনাকে ধন্যবাদ বলতে চাই। আমি এখন ইউনিটিতে চলে এসেছি এবং এই ভয়ঙ্কর প্রয়োগ ব্যতীত পদক্ষেপটি অসম্ভব হত। আমি কোড থেকেও কিছুটা শিখেছি। ধন্যবাদ!
dotancohen

2

আর একটি সমাধান যা নিখুঁত নয়, তবে কারও কারও কাছে এটি কার্যকর হিসাবে কার্যকর হিসাবে যেমন কোনও ক্লিকের সাথে একটি মোড সক্রিয় করার মতো কেডিএর মতো সম্পূর্ণ কার্যকারিতা পাওয়া সম্ভব।

  1. kbstateঅ্যাপলেট ইনস্টল করুন

    sudo apt-get install plasma-widget-kbstate kde-workspace-bin
    
  2. plasma-windowedপ্লেয়ারে এটি চালান

    • নিয়মিত উইন্ডো

      plasma-windowed kbstate
      

      এক্সুয়ান্টুতে প্লাজমা-উইজেট-কেবিস্টেটের স্ক্রিনশট

    • সীমান্তহীন উইন্ডো

      plasma-windowed --noborder kbstate
      

      ইউনিটিতে সীমান্তহীন প্লাজমা-উইজেট-কেবিস্টেটের স্ক্রিনশট

আমার সাথে খেলতে খুব বেশি সময় ছিল না, তবে wmctrlপজিশনিং, আকার পরিবর্তন এবং এটি আরম্ভের সময় শীর্ষে রাখতে সহায়তা করতে পারে।

তথ্যসূত্র: কেডি প্লাজময়েড এবং কিকস্টার্ট মেনুটি আরম্ভ করার জন্য কোন আদেশ command


1

আমি উবুন্টু স্টিকি কী মনিটরের জন্য একটি অনুসন্ধান করেছি এবং এমন কিছু খুঁজে পেয়েছি যা এখানে সহায়ক হতে পারে: http://code.google.com/p/key-mon/

কেস স্ক্রিনশট প্রদর্শন করুন

চালানোর চেষ্টা করুন

key-mon --sticky স্টিকি কীগুলির জন্য সমর্থন।

তথ্যসূত্র: http://code.google.com/p/key-mon/

নোট করুন যে সফ্টওয়্যার কেন্দ্রের মাধ্যমে উপলব্ধ সংস্করণটি 1.6-0ubuntu1। ২০১১ সালের জুনে মুক্তি পেল যা - স্টিকি স্যুইচটিকে সমর্থন করে না। যদি সূচকটি ঠিক উপরের মতো মনে হয় তবে আপনার পুরানো সংস্করণটি এই রচনার হিসাবে http://code.google.com/p/key-mon/ এ সর্বশেষতম সংস্করণটি চেষ্টা করুন এটি keymon_1.17-1_all.deb 229 কেবি মুক্তি পেয়েছে জানুয়ারী 3 2014. - স্টিকি স্যুইচ পরীক্ষা এবং নিশ্চিত হওয়ার জন্য সমর্থন।


1
নিস খোঁজ অবশ্য key-monশো যা বাটন টেপা ছিল এবং সংশোধক কী রাজ্যের । পার্থক্য হ'ল key-monডিসপ্লেটি বোতাম টিপে 1 সেকেন্ড পরে চাপবিহীন অবস্থায় ফিরে আসে । একটি কিবোর্ড সংশোধনকারী রাষ্ট্র অ্যাপলেট যখন পরবর্তী কী টিপবে তখন তা চাপবিহীন অবস্থায় প্রদর্শনটি ফিরিয়ে আনবে এবং ফলস্বরূপ 'চাপানো' স্থিতি অক্ষম করে
ডটানকোচেন

পুনরায় সম্পাদিত উত্তর।
বয়স্ক গীক

বিভ্রান্তির জন্য দুঃখিত. আপনার যা প্রয়োজন ঠিক তা জবাব দেওয়ার জন্য আমি উত্তরটি (আবার) সম্পাদনা করেছি।
বয়স্ক গীক

1
আপনাকে ধন্যবাদ এল্ডার গীক --stickyবিকল্প রাষ্ট্র অন্যান্য কী দেখার পরিবর্তে সঠিক ইন্টারফেস অনুসন্ধান হিসাবে সঠিক কীবোর্ড পরিবর্তক রাষ্ট্র অ্যাপলেট করছি সংশোধক কী রাজ্যের অনুমান বলে মনে হয়। এটি দুটি বার একটি সংশোধক কী টিপে দেখা যায়: প্রথমবার অ্যাপলেটে সূচকটি সক্ষম করে, তবে দ্বিতীয়বার এটি প্রকাশ করে না। সুতরাং, রাষ্ট্রটি যখন তা না থাকে তখন ভুলভাবে সক্রিয় বলে অভিযোগ করা হয়। এই সম্পর্কিত বাগটি সমস্যাটিকে আংশিকভাবে সম্বোধন করে, আমি সেখানে বিশদ এবং অতিরিক্ত বাগগুলি পূরণ করব। ধন্যবাদ.
ডটানকোচেন

1
@ ডটানকোহেন আমি আপনার বক্তব্যটির ভিত্তিতে পরীক্ষা করেছিলাম যে "পরবর্তী কিপ্রেসটি উপস্থিত হলে একটি কীবোর্ড সংশোধনকারী রাষ্ট্র অ্যাপলেটটি চাপবিহীন অবস্থায় প্রদর্শনটি ফিরিয়ে দেবে এবং অতএব 'চাপযুক্ত' স্থিতি অক্ষম করে।" এবং এটি আমার উপর কখনই প্রকাশ পায়নি যে উদ্দেশ্য অনুসারে যে কেউ পর পর দু'বার মডিফায়ার কীটি চাপবে। তদারকির জন্য আমার ক্ষমা চাই।
বয়স্ক গীক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.