'xclip' বনাম 'xsel'


43

এক্স ক্লিপবোর্ডে অ্যাক্সেসের জন্য দুটি কমান্ড-লাইন সরঞ্জাম (দুটি পৃথক প্যাকেজে) রয়েছে:

  • xclip
  • xsel

আমি এই দুজনের মধ্যে পার্থক্য জানতে পছন্দ করব এবং কোন ক্ষেত্রে কোনটি ব্যবহার করা উচিত তার একটি প্রস্তাব শুনি hear


1
ঠিক আজ আমি যা জানতে চেয়েছিলাম :) +1
উইনউনুকস 2 ইউনিক্স

উত্তর:


26

উভয় xclipএবং 3 টি পৃথক নির্বাচনেxsel পাঠ্য সংরক্ষণ করতে পারে (ডিফল্টরূপে এটি প্রাথমিক নির্বাচন)। অভিজ্ঞতা থেকে আমি জানি যে প্রাথমিক নির্বাচনটি মূলত আপনি মাঝারি মাউস ক্লিক (যা ল্যাপটপে ডান এবং বাম উভয় টাচপ্যাড কী টিপানোর সাথে মিল রেখে) প্রকাশিত হয় high ক্লিপবোর্ডটি প্রচলিত ।CtrlV

manউভয়ের জন্য পৃষ্ঠাগুলি পরীক্ষা করে , তবে আমি আবিষ্কার করেছি যে xclipএটি একটি দিক থেকে জিতেছে - একটি ইনপুট ফাইল থেকে পড়া:

xieerqi:
$ cat testfile.txt                                                             
HELLOWORLD

xieerqi:
$ xclip -selection clipboard testfile.txt

xieerqi:
$ HELLOWORLD
mksh: HELLOWORLD: not found

xieerqi:
$ xsel testfile.txt 
Usage: xsel [options]
Manipulate the X sele . . . (usage page goes on)

অবশ্যই আপনি xselএটি পেতে শেল পুনর্নির্দেশ ব্যবহার করতে পারেন

xieerqi:
$ xsel --clipboard < testfile.txt                                              

xieerqi:
$ HELLOWORLD
mksh: HELLOWORLD: not found

xclipআপনি যে ক্লিপবোর্ডের বিষয়বস্তু ফাইলগুলিতে আউটপুট দিতে পারেন তাতেও জয়লাভ করে (আপনি সম্ভবত প্রাথমিক নির্বাচনের পুনর্নির্দেশ করতে চাইলে অর্থাত্ হাইলাইটস) যা দরকারী। xselstdout শুধুমাত্র আউটপুট উপলব্ধ


2
সুতরাং কোন পার্থক্য নেই যে xselকেবলমাত্র STDIN / STDOUT এর মাধ্যমে পরিচালিত xclipহতে পারে , যখন সেখানে প্রকৃত ফাইলগুলিও ব্যবহার করতে পারে? কি বিরক্তিকর! ঠিক আছে, আমি xselকিছুক্ষণ আগে বন্ধুত্ব করেছি এবং ফাইলগুলিতে শেল পুনর্নির্দেশগুলি ব্যবহার করে বেঁচে থাকতে পারি, তাই আমি এটি ব্যবহার চালিয়ে যাব।
বাইট কমান্ডার

2
আমি যদি ম্যান পেজগুলিতে কিছু মিস না করি বা কিছু লুকানো বৈশিষ্ট্য না পেয়ে থাকি তবে এই দুটি প্রোগ্রামের মধ্যে সত্যই রয়েছে: উভয়ই যথেষ্ট ভাল কাজ করছে, তাই আমি অনুমান করি এটি যে কোনও কিছুর চেয়ে বেশি পছন্দ
সের্গি কোলোডিয়াজহনি

আমি xclipআজ ইনস্টল করেছি এবং ভাবছি যে এটি সঠিক পছন্দ ছিল কিনা। আপনার উত্তরটি নিশ্চিত হয়ে গেছে কারণ আমি diffকমান্ড সহ ক্লিপবোর্ড থেকে ফাইল তৈরি করছি । +1 ধন্যবাদ :)
WinEunuuchs2 ইউনিক্স

1
আমি দৌড়ে একটি পোস্ট জুড়ে এক্সক্লিপের জন্য একটি দুর্দান্ত র‍্যাপার ফাংশন রয়েছে যা স্কেলের পক্ষে এটির পক্ষে টিপতে পারে। madebynathan.com/2011/10/04/a-nicer-way-to-use-xclip
ড্রাগন 788

@ ড্রাগন 8৮৮ ভাল, এটি দুর্দান্ত তবে প্রশ্ন দুটি কমান্ডের ব্যবহারের পার্থক্যের বিষয়ে, সুতরাং এটি কীভাবে প্রাসঙ্গিক তা আমি পুরোপুরি দেখতে পাচ্ছি না
সের্গি কলডিয়াজহনি

22

@ সার্গের উত্তরের পাশাপাশি , আর্ক উইকিতে টিমাক্স পৃষ্ঠা থেকে একটি টুকরো তথ্য রয়েছে যা কিছু নির্দিষ্ট ক্ষেত্রে কার্যকর হতে পারে :

এক্সএল এর বিপরীতে এটি [এক্সক্লিপ] কাঁচা বিটস্ট্রিম মুদ্রণের জন্য আরও ভাল কাজ করে যা বর্তমান লোকেলের সাথে খাপ খায় না। তবুও, এক্সক্লিপের পরিবর্তে এক্সসেল ব্যবহার করা আরও পরিষ্কার, কারণ টিএমউক্সের বাফারটি পড়ার পরে এক্সক্লিপ এসটিডিওটি বন্ধ করে না । যেমনটি, টেমাক্স জানে না যে অনুলিপিটি টাস্কটি সম্পন্ন হয়েছে, এবং এক্সক্লিপের সমাপ্তির জন্য অপেক্ষা করতে থাকে, যার ফলে tmux প্রতিক্রিয়াবিহীন করে। একটি কাজের ভিত্তি হল এক্সক্লিপের STDOUT কে / dev / নালটিতে পুনর্নির্দেশ করা


এটির সাথে STDOUT ইস্যুটি বন্ধ না করাxclip যদি আপনার মুখোমুখি হয় তবে এটি একটি বড় সমস্যা। আমি এটি ডিবাগিং 2 ঘন্টা নষ্ট। অবশেষে আমি স্যুইচ করেছি xsel -biএবং xsel -bo
ব্রুনো ব্রোনোস্কি

15

মনে রাখার মতো আরও কিছু, xselএর চেয়ে কম নির্ভরতা রয়েছে xclip:

# apt-cache depends xsel
xsel
  Depends: libc6
  Depends: libx11-6
  Conflicts: xsel:i386

# apt-cache depends xclip
xclip
  Depends: libc6
  Depends: libx11-6
  Depends: libxmu6
  Conflicts: xclip:i386

2
আমার সন্দেহ হয় বেশিরভাগ প্রতিষ্ঠানের ইতিমধ্যে libxmu6 রয়েছে যদিও অনেকগুলি প্যাকেজ যেমন xterm, x11-apps, এবং x11-utils এর উপর নির্ভর করে।
জোশবি

6

ব্যবহার করুন xclip, কারণ xselস্ক্রিনশোস্টের মতো ক্লিপবোর্ড থেকে বাইনারি ডেটা বের করতে পারে না। উদাহরণস্বরূপ, ক্লিপবোর্ডে স্ক্রিনশট সংরক্ষণ করুন:

$ maim -s | xclip -selection clipboard -t image/png

তারপরে ফাইল এ সংরক্ষণ করুন এবং আউটপুট তুলনা করুন:

$ xclip -o -selection clipboard > 1xclip
$ xsel -o --clipboard > 1xsel
$ ls -go 1*
-rw-rw-r-- 1 11948 Sep 26 20:13 1xclip
-rw-rw-r-- 1     0 Sep 26 20:13 1xsel

1
আমি দেখতে পেয়েছি যে xclipঅগত্যা হয় বাইনারি ডেটা হ্যান্ডেল করতে সক্ষম হয় না, যেমন জিনোম-স্ক্রিনশট থেকে "ক্লিপবোর্ডে অনুলিপি করুন" বোতামটি ব্যবহার করার সময় আমি কোনও আউটপুট পাই না। উদাহরণস্বরূপ একটি LibreOffice ডকুমেন্ট থেকে Ctrl + C দিয়ে কোনও ছবি অনুলিপি করার সময়, এটি কেবল তখনই কাজ করে যদি আমি ম্যানুয়ালি টার্গেট টাইপের মতো উল্লেখ করি xclip -o -t image/png -selection clipboard
বাইট কমান্ডার

2
আমি মোটেও আউটপুট পাই না gnome-screenshot, তবে এটি অন্য একটি সমস্যা - gitlab.gnome.org/GNome/gnome-screenshot/issues/14
অ্যানাটোলি টেকটোনিক

0

এক্সস্লিপকে এক্সসেলের ওপরে ব্যবহার করার আরও একটি কারণ রয়েছে - এক্সক্লিপ কাট বাফার 0 কে ম্যানিপুলেট করতে পারে পাস করার মাধ্যমে -selection buffer-cut, যা এক্সসেল করতে পারে না।

এটি অন্যান্য কাটা বাফারগুলিকেও পরিচালনা করতে তুলনামূলকভাবে সহজ; এখানে আমার প্যাচটি রয়েছে, যদিও এটি ভালভাবে পরীক্ষিত নয় এবং কোনও গ্যারান্টি সহ আসে না।

diff --git a/xclip.c b/xclip.c
index 5fc760cb7..eeb05f662 100644
--- a/xclip.c
+++ b/xclip.c
@@ -35,11 +35,12 @@
 #include "xclib.h"

 /* command line option table for XrmParseCommand() */
-XrmOptionDescRec opt_tab[14];
+XrmOptionDescRec opt_tab[15];

 /* Options that get set on the command line */
 int sloop = 0;         /* number of loops */
 char *sdisp = NULL;        /* X display to connect to */
+int bufnum = 0;        /* Cut buffer number to use */
 Atom sseln = XA_PRIMARY;   /* X selection to work with */
 Atom target = XA_STRING;

@@ -165,6 +166,9 @@ doOptSel(void)
        break;
    case 'b':
        sseln = XA_STRING;
+       if (XrmGetResource(opt_db, "xclip.buffer", "Xclip.Buffer", &rec_typ, &rec_val)) {
+           bufnum = atoi(&rec_val.addr[0]);
+       }
        break;
    }

@@ -177,8 +181,10 @@ doOptSel(void)
        fprintf(stderr, "XA_SECONDARY");
        if (sseln == XA_CLIPBOARD(dpy))
        fprintf(stderr, "XA_CLIPBOARD");
-       if (sseln == XA_STRING)
+       if (sseln == XA_STRING) {
        fprintf(stderr, "XA_STRING");
+       fprintf(stderr, "\nUsing buffer number %d", bufnum);
+       }

        fprintf(stderr, "\n");
    }
@@ -276,7 +282,7 @@ doIn(Window win, const char *progname)

     /* Handle cut buffer if needed */
     if (sseln == XA_STRING) {
-   XStoreBuffer(dpy, (char *) sel_buf, (int) sel_len, 0);
+   XStoreBuffer(dpy, (char *) sel_buf, (int) sel_len, bufnum);
    return EXIT_SUCCESS;
     }

@@ -445,7 +451,7 @@ doOut(Window win)
     unsigned int context = XCLIB_XCOUT_NONE;

     if (sseln == XA_STRING)
-   sel_buf = (unsigned char *) XFetchBuffer(dpy, (int *) &sel_len, 0);
+   sel_buf = (unsigned char *) XFetchBuffer(dpy, (int *) &sel_len, bufnum);
     else {
    while (1) {
        /* only get an event if xcout() is doing something */
@@ -595,6 +601,11 @@ main(int argc, char *argv[])
     opt_tab[13].argKind = XrmoptionNoArg;
     opt_tab[13].value = (XPointer) xcstrdup(ST);

+    opt_tab[14].option = xcstrdup("-buffer");
+    opt_tab[14].specifier = xcstrdup(".buffer");
+    opt_tab[14].argKind = XrmoptionSepArg;
+    opt_tab[14].value = (XPointer) NULL;
+
     /* parse command line options */
     doOptMain(argc, argv);

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