এক্স ক্লিপবোর্ডে অ্যাক্সেসের জন্য দুটি কমান্ড-লাইন সরঞ্জাম (দুটি পৃথক প্যাকেজে) রয়েছে:
xclip
xsel
আমি এই দুজনের মধ্যে পার্থক্য জানতে পছন্দ করব এবং কোন ক্ষেত্রে কোনটি ব্যবহার করা উচিত তার একটি প্রস্তাব শুনি hear
এক্স ক্লিপবোর্ডে অ্যাক্সেসের জন্য দুটি কমান্ড-লাইন সরঞ্জাম (দুটি পৃথক প্যাকেজে) রয়েছে:
xclip
xsel
আমি এই দুজনের মধ্যে পার্থক্য জানতে পছন্দ করব এবং কোন ক্ষেত্রে কোনটি ব্যবহার করা উচিত তার একটি প্রস্তাব শুনি hear
উত্তর:
উভয় 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
আপনি যে ক্লিপবোর্ডের বিষয়বস্তু ফাইলগুলিতে আউটপুট দিতে পারেন তাতেও জয়লাভ করে (আপনি সম্ভবত প্রাথমিক নির্বাচনের পুনর্নির্দেশ করতে চাইলে অর্থাত্ হাইলাইটস) যা দরকারী। xsel
stdout শুধুমাত্র আউটপুট উপলব্ধ
xsel
কেবলমাত্র STDIN / STDOUT এর মাধ্যমে পরিচালিত xclip
হতে পারে , যখন সেখানে প্রকৃত ফাইলগুলিও ব্যবহার করতে পারে? কি বিরক্তিকর! ঠিক আছে, আমি xsel
কিছুক্ষণ আগে বন্ধুত্ব করেছি এবং ফাইলগুলিতে শেল পুনর্নির্দেশগুলি ব্যবহার করে বেঁচে থাকতে পারি, তাই আমি এটি ব্যবহার চালিয়ে যাব।
xclip
আজ ইনস্টল করেছি এবং ভাবছি যে এটি সঠিক পছন্দ ছিল কিনা। আপনার উত্তরটি নিশ্চিত হয়ে গেছে কারণ আমি diff
কমান্ড সহ ক্লিপবোর্ড থেকে ফাইল তৈরি করছি । +1 ধন্যবাদ :)
@ সার্গের উত্তরের পাশাপাশি , আর্ক উইকিতে টিমাক্স পৃষ্ঠা থেকে একটি টুকরো তথ্য রয়েছে যা কিছু নির্দিষ্ট ক্ষেত্রে কার্যকর হতে পারে :
এক্সএল এর বিপরীতে এটি [এক্সক্লিপ] কাঁচা বিটস্ট্রিম মুদ্রণের জন্য আরও ভাল কাজ করে যা বর্তমান লোকেলের সাথে খাপ খায় না। তবুও, এক্সক্লিপের পরিবর্তে এক্সসেল ব্যবহার করা আরও পরিষ্কার, কারণ টিএমউক্সের বাফারটি পড়ার পরে এক্সক্লিপ এসটিডিওটি বন্ধ করে না । যেমনটি, টেমাক্স জানে না যে অনুলিপিটি টাস্কটি সম্পন্ন হয়েছে, এবং এক্সক্লিপের সমাপ্তির জন্য অপেক্ষা করতে থাকে, যার ফলে tmux প্রতিক্রিয়াবিহীন করে। একটি কাজের ভিত্তি হল এক্সক্লিপের STDOUT কে / dev / নালটিতে পুনর্নির্দেশ করা
xclip
যদি আপনার মুখোমুখি হয় তবে এটি একটি বড় সমস্যা। আমি এটি ডিবাগিং 2 ঘন্টা নষ্ট। অবশেষে আমি স্যুইচ করেছি xsel -bi
এবং xsel -bo
।
মনে রাখার মতো আরও কিছু, 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
ব্যবহার করুন 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
xclip
অগত্যা হয় বাইনারি ডেটা হ্যান্ডেল করতে সক্ষম হয় না, যেমন জিনোম-স্ক্রিনশট থেকে "ক্লিপবোর্ডে অনুলিপি করুন" বোতামটি ব্যবহার করার সময় আমি কোনও আউটপুট পাই না। উদাহরণস্বরূপ একটি LibreOffice ডকুমেন্ট থেকে Ctrl + C দিয়ে কোনও ছবি অনুলিপি করার সময়, এটি কেবল তখনই কাজ করে যদি আমি ম্যানুয়ালি টার্গেট টাইপের মতো উল্লেখ করি xclip -o -t image/png -selection clipboard
।
gnome-screenshot
, তবে এটি অন্য একটি সমস্যা - gitlab.gnome.org/GNome/gnome-screenshot/issues/14
এক্সস্লিপকে এক্সসেলের ওপরে ব্যবহার করার আরও একটি কারণ রয়েছে - এক্সক্লিপ কাট বাফার 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);