emacs, วิธีการคัดลอกภูมิภาคและปล่อยให้มันถูกเน้น?


9

ฉันมีความสุขมากที่ค่า Mw เริ่มต้น(kill-ring-save)ซึ่งสูญเสียการเน้นของพื้นที่เมื่อเรียกใช้คำสั่ง ฉันไม่ต้องการเปลี่ยนพฤติกรรมของมัน แต่ฉันต้องการผูกอีกครั้ง<C-insert>เพื่อดำเนินการที่คล้ายกันและรักษาเน้นของภูมิภาค

ฉันได้ลอง (ยกเลิก) ตั้งค่าtransient-mark-modeโดยตรงและผ่านฟังก์ชั่น แต่ภูมิภาคยังคงไฮไลต์อยู่

ทำงานเฉพาะ(kill-ring-save (region-beginning) (region-end))ในฟังก์ชั่นแบบโต้ตอบทำงานตามที่คาดไว้เช่น มันสูญเสียการเน้น

ทำงานเฉพาะ(exchange-point-and-mark) (exchange-point-and-mark)ในฟังก์ชั่นแบบโต้ตอบทำงานตามที่คาดไว้เช่น มันไฮไลต์ภูมิภาคและทำให้ / ออกจากจุดในตำแหน่งเดิม / ถูกต้อง

อย่างไรก็ตามเมื่อฉันรวบรวมพวกมันทั้งหมดเข้าด้วยกันมันไม่ได้เน้นบริเวณนั้นอีก นี่คือฟังก์ชั่นที่ไม่ทำงานและมีผลผูกพัน:

(defun kill-ring-save-keep-highlight ()
  (interactive)
  (kill-ring-save (region-beginning) (region-end))
  (exchange-point-and-mark) (exchange-point-and-mark)
)
(global-unset-key (kbd "<C-insert>"))
(global-set-key   (kbd "<C-insert>") 'kill-ring-save-keep-highlight)

การใช้: GNU Emacs 23.1.1 ใน Ubuntu 10.04.3

คำตอบ:


8

เล่นkill-ring-saveไม่ได้ยกเลิกการใช้งานเครื่องหมายโดยตรง แต่เพียงกำหนดตัวแปรdeactivate-markเพื่อtเพื่อให้การเสื่อมที่จะทำนั้น เพื่อป้องกันสิ่งนี้ให้รีเซ็ตdeactivate-markเป็นnil ก่อนปิดการใช้งาน

(defun kill-ring-save-keep-highlight (beg end)
  "Keep the region active after the kill"
  (interactive "r")
  (prog1 (kill-ring-save beg end)
    (setq deactivate-mark nil)))

(global-set-key (kbd "<C-insert>") 'kill-ring-save-keep-highlight)

0

ภูมิภาคนี้ถูกเน้นเนื่องจากเครื่องหมายเป็น "ใช้งานอยู่" - ดังนั้นการเปิดใช้งานเครื่องหมายอย่างชัดแจ้งจึงเป็นการหลอกลวง หมายเหตุ: ฉันไม่แน่ใจว่าทำไมการแลกเปลี่ยนจุด / เครื่องหมายไม่ทำงาน นี่คือฟังก์ชั่นที่อัปเดตฉันยังอัปเดตให้ใช้แบบโต้ตอบเพื่อกรอกอาร์กิวเมนต์

(defun kill-ring-save-keep-highlight (beg end)
  "Keep the region active after the kill"
  (interactive "r")
  (kill-ring-save beg end)
  (activate-mark))

ขอบคุณสำหรับพอยน์เตอร์ในส่วนของการโต้ตอบและactivate-markแต่ก็ยังใช้งานไม่ได้ ฉันได้ติดตั้ง VM แบบชนวนของ Ubuntu 11.04 ด้วยโค้ดเพียงอย่างเดียวใน.emacsการใช้งานฟังก์ชั่นนี้ แต่มันยังไม่เปิดใช้งานเครื่องหมาย แต่การปรับใช้ด้วยตนเองC-x C-xทันทีหลังจากC-insertคืนสถานะการเน้น ...
Peter.O

@ เฟร็ดคุณลองใช้ Emacs แล้วด้วย. emacs ของคุณหรือไม่ เช่นทำงานemacs -qด้วยรหัสและตรวจสอบเพื่อดูว่ามันทำงาน
Trey Jackson

ฉันใช้มัน (ไม่สำเร็จ) โดยไม่มีอะไรเลยนอกจากฟังก์ชั่นนี้ทั้งใน~/.emacsและโดยไม่มีอะไรเลย~/.emacs.d/และตามที่กล่าวไว้ในการติดตั้ง emacs ใหม่ใน VM ใหม่ฉันได้ลองใช้คำสั่งนี้แล้ว แต่/usr/bin/emacs --no-init-file --no-site-file --eval '(defun kill-ring-save-keep-highlight (beg end) (interactive "r") (kill-ring-save beg end) (activate-mark))'ฟังก์ชั่นนี้ใช้ไม่ได้กับ...
Peter.O
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.