كيفية نسخ النص من إيماكس إلى تطبيق آخر على لينكس

StackOverflow https://stackoverflow.com/questions/64360

  •  09-06-2019
  •  | 
  •  

سؤال

عندما أقوم بقص (قتل) نص في Emacs 22.1.1 (في نافذته الخاصة على X، في KDE، على Kubuntu)، لا يمكنني لصقه (سحبه) في أي تطبيق آخر.

هل كانت مفيدة؟

المحلول 2

أدخل ما يلي في الخاص بك .emacs ملف:

(setq x-select-enable-clipboard t)

نصائح أخرى

دعونا نكون حذرين مع تعريفاتنا هنا

  • ان نسخة ايماكس هو الأمر kill-ring-save (عادة ما يرتبط ب م-ث).
  • أ نسخة النظام هو ما تحصل عليه عادة من الضغط نسخة (أو اختيار "تحرير->نسخ" في نافذة التطبيق).
  • ان نسخة X هو تمييز النص "فعليًا" باستخدام مؤشر الماوس.
  • ان معجون ايماكس هو الأمر yank (عادة ما يرتبط ب ج-ص).
  • أ لصق النظام هو ما تحصل عليه عادة من الضغط السيرة الذاتية (أو اختيار "تحرير-لصق" في نافذة التطبيق).
  • ان لصق X يضغط على "زر الماوس الأوسط" (تتم محاكاته بالضغط على زري الماوس الأيمن والأيسر معًا).

في حالتي (على جنوم):

  • عادةً ما يعمل كل من Emacs ونسخة النظام مع لصق X.
  • تعمل نسخة X عادةً مع لصق Emacs.
  • لجعل نسخة النظام تعمل مع لصق Emacs ونسخة Emacs تعمل مع لصق النظام، تحتاج إلى إضافة (setq x-select-enable-clipboard t) لك .emacs.او جرب

    META-X set-variable RET x-select-enable-clipboard RET t
    

أعتقد أن هذا هو سلوك Unix الحديث القياسي جدًا.

من المهم أيضًا ملاحظة (على الرغم من أنك تقول أنك تستخدم Emacs في نافذة منفصلة) أنه عندما يتم تشغيل Emacs في وحدة التحكم، فإنه يتم فصله تمامًا عن النظام وحافظة X:يتم القص واللصق في هذه الحالة بواسطة الجهاز.على سبيل المثال، يجب أن يعمل "تحرير->لصق" في النافذة الطرفية لديك تمامًا كما لو كنت كتبت النص من الحافظة في المخزن المؤقت لـ Emacs.

تكمن صعوبة النسخ واللصق في Emacs في أنك تريده أن يعمل بشكل مستقل عن القتل/السحب الداخلي، وتريده أن يعمل في كل من الجهاز الطرفي وواجهة المستخدم الرسومية.توجد حلول قوية موجودة للمحطة الطرفية أو واجهة المستخدم الرسومية، ولكن ليس لكليهما.بعد تثبيت xsel (على سبيل المثال. sudo apt-get install xsel)، إليك ما أفعله للنسخ واللصق للجمع بينهما:

(defun copy-to-clipboard ()
  (interactive)
  (if (display-graphic-p)
      (progn
        (message "Yanked region to x-clipboard!")
        (call-interactively 'clipboard-kill-ring-save)
        )
    (if (region-active-p)
        (progn
          (shell-command-on-region (region-beginning) (region-end) "xsel -i -b")
          (message "Yanked region to clipboard!")
          (deactivate-mark))
      (message "No region active; can't yank to clipboard!")))
  )

(defun paste-from-clipboard ()
  (interactive)
  (if (display-graphic-p)
      (progn
        (clipboard-yank)
        (message "graphics active")
        )
    (insert (shell-command-to-string "xsel -o -b"))
    )
  )

(global-set-key [f8] 'copy-to-clipboard)
(global-set-key [f9] 'paste-from-clipboard)

ألصق هذا في ملف .emacs الخاص بي:

(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)

بعد ذلك، لم أواجه أية مشكلات في القص واللصق ذهابًا وإيابًا من أي شيء في Emacs إلى أي تطبيق X11 أو Gnome آخر.

علاوة:لتحقيق هذه الأشياء في Emacs دون الحاجة إلى إعادة تحميل .emacs بالكامل، قم بإجراء C-x C-e باستخدام المؤشر مباشرة بعد القوس المغلق لكل من هذه التعبيرات في المخزن المؤقت .emacs.

حظ سعيد!

أفترض أنك بواسطة emacs تعني Emacs ضمن X (أي ليس داخل نافذة طرفية).

هناك طريقتان:

  1. (ينطبق على UNIX OS فقط) الضوء على النص المطلوب مع الماوس الخاص بك (هذا ينسخه إلى الحافظة X) ثم النقر الأوسط إلى لصق.
  2. قم بتمييز النص المطلوب ثم "MX الحافظة-حلقة القلق" (لاحظ أنه يمكنك ربط هذا بمفتاح أسهل).ثم فقط "تحرير-> لصق" في تطبيقك المفضل.

عمليات الحافظة المتاحة:

  • الحافظة-القوارر-رينج-اختيار نسخ من emacs إلى الحافظة
  • الحافظة-القاتل-اختيار قطع من emacs إلى الحافظة
  • الحافظة-اللصق من الحافظة إلى emacs

هنالك مقالة إيماكس ويكي يشرح ذلك بعض المشكلات المتعلقة بالنسخ واللصق ضمن X وكيفية تهيئته للعمل.

هذا يعمل مع M-w على نظام التشغيل Mac OSX.فقط أضف إلى الخاص بك .emacs ملف.

(defun copy-from-osx ()
   (shell-command-to-string "pbpaste"))
(defun paste-to-osx (text &optional push)
   (let ((process-connection-type nil))
      (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
         (process-send-string proc text)
         (process-send-eof proc))))

(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx)

مصدر https://Gist.github.com/the-kenny/267162

يضيف الكود أدناه، المستوحى من إجابة @RussellStewart أعلاه، دعمًا لـ x-PRIMARY وx-SECONDARY، ويستبدل region-active-p مع use-region-p لتغطية حالة المنطقة الفارغة، لا يُرجع بصمت إذا لم يتم تثبيت xsel (يُرجع رسالة خطأ)، ويتضمن وظيفة "قص" (emacs C-y، windows C-x).

(defun my-copy-to-xclipboard(arg)
  (interactive "P")
  (cond
    ((not (use-region-p))
      (message "Nothing to yank to X-clipboard"))
    ((and (not (display-graphic-p))
         (/= 0 (shell-command-on-region
                 (region-beginning) (region-end) "xsel -i -b")))
      (error "Is program `xsel' installed?"))
    (t
      (when (display-graphic-p)
        (call-interactively 'clipboard-kill-ring-save))
      (message "Yanked region to X-clipboard")
      (when arg
        (kill-region  (region-beginning) (region-end)))
      (deactivate-mark))))

(defun my-cut-to-xclipboard()
  (interactive)
  (my-copy-to-xclipboard t))

(defun my-paste-from-xclipboard()
  "Uses shell command `xsel -o' to paste from x-clipboard. With
one prefix arg, pastes from X-PRIMARY, and with two prefix args,
pastes from X-SECONDARY."
  (interactive)
  (if (display-graphic-p)
    (clipboard-yank)
   (let*
     ((opt (prefix-numeric-value current-prefix-arg))
      (opt (cond
       ((=  1 opt) "b")
       ((=  4 opt) "p")
       ((= 16 opt) "s"))))
    (insert (shell-command-to-string (concat "xsel -o -" opt))))))

(global-set-key (kbd "C-c C-w") 'my-cut-to-xclipboard)
(global-set-key (kbd "C-c M-w") 'my-copy-to-xclipboard)
(global-set-key (kbd "C-c C-y") 'my-paste-from-xclipboard)

حسنًا، ما هو النظام الأساسي وما هو إصدار emacs الذي تستخدمه؟مع GNU Emacs 22.1.1 على نظام التشغيل Windows Vista، يعمل بشكل جيد بالنسبة لي.

إذا كنت، بأي حال من الأحوال، تقوم بذلك من Windows إلى Linux من خلال عارض RealVNC، فتأكد من تشغيل "vncconfig -iconic" على مربع Linux أولاً .....

أستخدم دائمًا اللصق السريع - اسحب التحديد في emacs، واضغط على زر الماوس الأوسط في النافذة المستهدفة.

(من الإشارة إلى kate، أعتبر أنك تستخدم Linux أو ما شابه، وربما تستخدم emacs في X بطريقة أو بأخرى.)

قد ترغب في تحديد النظام الأساسي الذي تستخدمه.هل هو على Linux، Unix، Macosx، Windows، MS-DOS؟

أعتقد أنه بالنسبة للنوافذ يجب أن يعمل.بالنسبة لنظام التشغيل MacOSX، ستتم إضافته إلى حافظة x-windows، وهي ليست نفس حافظة macosx.بالنسبة لنظام التشغيل Linux، يعتمد الأمر على أسلوبك في إدارة النوافذ، لكنني أعتقد أن x-windows يتعامل معه بطريقة لطيفة في معظمها.

لذا، يرجى التحديد.

ما أفعله هو استخدام أداة طرفية جيدة (PuTTY على Windows أو Konsole أو Terminal على Linux) تحتوي على مرافق نسخ مدمجة.

في PuTTY، يمكنك تحديد النص الذي تريده باستخدام الماوس ثم لصقه في مكان آخر.يؤدي النقر بزر الماوس الأيمن في نافذة PuTTY إلى لصق محتويات المخزن المؤقت للنسخ/اللصق في Windows.

في Konsole أو Terminal على Linux، يمكنك تحديد ما تريد ثم الضغط على Shift+Ctrl+C للنسخ وShift+Ctrl+V للصق.

في مجموعة Win32 من emacs، يؤدي سحب النص إلى وضعه في مخزن النسخ/اللصق المؤقت.معظم الوقت.

في نظام التشغيل Mac OS X، تعمل اختصارات مفتاح Apple بشكل جيد، لأن الوحدة الطرفية تحجزها.

لا توجد طريقة مباشرة للقيام بذلك من خلال سطر الأوامر لأن الصدفة لا تحتفظ بمخزن مؤقت للنسخ/اللصق لكل تطبيق.سحق يفعل احتفظ بمخزن مؤقت للنسخ/اللصق لنفسه، وبشكل افتراضي، تعمل اختصارات emacs ^k/^y.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top