วิธีคัดลอกลิงก์ออกจากโหมดองค์กร?


16

มีเอกสารจำนวนมากเกี่ยวกับการแทรกหรือจัดเก็บลิงก์โหมดองค์กร แต่ดูเหมือนว่าจะไม่มีการคัดลอกไปยังบัฟเฟอร์ในรูปแบบอื่น

คุณจะคัดลอก URL ของ org-mode-link จากไฟล์ org ไปยังคลิปบอร์ด / kill ring ด้วยการกดปุ่มเพียงไม่กี่ครั้งเท่าที่จะทำได้อย่างไร ฉันพยายามorg-store-linkและorg-insert-linkแต่มันทิ้งไวยากรณ์ org โหมดทั้งเป็นสิ่งที่บัฟเฟอร์อื่น ๆ ที่คุณได้เปิด

ตัวอย่าง: บัฟเฟอร์ 1 โหมดองค์กร, บัฟเฟอร์ 2 Markdown

  1. เยี่ยมชมบัฟเฟอร์ 1 C-sค้นหาลิงค์
  2. เกิดเวทย์มนตร์ URL อยู่ในคลิปบอร์ด
  3. เยี่ยมชม buffer 2 C-yเพื่อดึง URL เข้าสู่บัฟเฟอร์

คำตอบ:


10

นี่คือวิธีหนึ่งในการบรรลุสิ่งที่คุณต้องการโดยใช้คุณสมบัติข้อความ

คุณสามารถไปที่ลิงค์ในไฟล์ org ที่คุณต้องการคัดลอกและรันคำสั่ง my-org-retrieve-url-from-pointซึ่งจะเป็นการคัดลอกลิงค์ org ณ จุดปัจจุบันไปยังคลิปบอร์ด ก่อนที่จะเพิ่มลิงก์ไปยังคลิปบอร์ด yank-handler ( my-yank-org-link) จะถูกลงทะเบียนซึ่งจะถูกเรียกในขณะที่วางลิงก์ yank-handler ตรวจสอบว่าบัฟเฟอร์ปัจจุบันอยู่ในโหมด org หรือโหมดที่ได้มาจากโหมด org หรือไม่ถ้ามันแทรกลิงค์ตามที่มันเป็น (ลิงค์ org) หรือมิฉะนั้นมันจะดึง URL จากลิงค์และแทรกเข้าไป

(defun my-yank-org-link (text)
  (if (derived-mode-p 'org-mode)
      (insert text)
    (string-match org-bracket-link-regexp text)
    (insert (substring text (match-beginning 1) (match-end 1)))))

(defun my-org-retrieve-url-from-point ()
  (interactive)
  (let* ((link-info (assoc :link (org-context)))
         (text (when link-info
                 ;; org-context seems to return nil if the current element
                 ;; starts at buffer-start or ends at buffer-end
                 (buffer-substring-no-properties (or (cadr link-info) (point-min))
                                                 (or (caddr link-info) (point-max))))))
    (if (not text)
        (error "Not in org link")
      (add-text-properties 0 (length text) '(yank-handler (my-yank-org-link)) text)
      (kill-new text))))

นี่คือรุ่น DWIM kill-ring-saveซึ่งใช้kill-ring-saveหากภูมิภาคนั้นใช้งานอยู่หรือคัดลอกลิงก์ org-point

(defun my-smarter-kill-ring-save ()
  (interactive)
  (if (region-active-p)
      (call-interactively #'kill-ring-save)
    (when (eq major-mode 'org-mode)
      (call-interactively #'my-org-retrieve-url-from-point))))

หมายเหตุ : สิ่งนี้ไม่ได้แยกความแตกต่างระหว่างลิงค์ URL และลิงค์ภายใน


1
ฉันลบifเพราะเมื่อใช้ GUI Emacs มันจะคัดลอกลิงค์ทั้งหมด ( [[a]][b]]) แทนส่วน URL ( a)
Nitz

3

เป็นไปได้อีก: org-insert-linkด้วยเคอร์เซอร์ที่ลิงค์รัน C-c C-lนี้เป็นปกติ ด้วยโหมดความชั่วร้าย (หรืออาจจะแค่กับ Spacemacs) , i lก็ใช้งานได้ สิ่งนี้จะเข้าสู่โฟลว์แทรกลิงก์พร้อมกับค่าลิงก์ที่เติมไว้ล่วงหน้า จากนั้นคุณสามารถทำได้M-x evil-yank-lineขณะที่ minibuffer มีเนื้อหาของที่อยู่ลิงก์


C-c C-l M-S-<backspace> C-gวิธีการนี้จะเป็นพื้นสิ่งที่ฉันใช้เฉพาะที่ผมไป
โอมาร์

มันใช้งานได้ แต่ไม่ค่อยมีประสิทธิภาพ
itirazimvar

2

ไปงานปาร์ตี้สาย (และโพสต์แรกของฉันที่นี่โดยวิธี) แต่ฉันคิดว่านี่อาจเป็นประโยชน์กับผู้อื่นเช่นกัน คำตอบที่ได้รับการยอมรับทำงานได้อย่างสมบูรณ์แบบเมื่อ yanking ภายใน emacs อีกครั้ง แต่ข้อความจริงที่คัดลอกไปยังคลิปบอร์ดของระบบยังคงเป็นไวยากรณ์โหมดเต็มรูปแบบขององค์กร ฉันต้องการบางสิ่งที่สามารถคัดลอกลิงก์จากทั้งโหมดองค์กรและ emacs กรณีการใช้งาน: ฉันทำเว็บหลายครั้งเมื่อเร็ว ๆ นี้และฉันมักจะใช้เบราว์เซอร์หลายตัว มีเพียงหนึ่งในนั้นเท่านั้นที่สามารถเป็นค่าเริ่มต้นสำหรับC-c c-oทางลัดและบางครั้งฉันต้องการเปิดลิงก์ในที่ไม่ใช่ค่าเริ่มต้น นอกจากนี้การวางลิงก์ไปยังผู้ร่วมงานใน Slack และอื่น ๆ

เรื่องสั้นสั้นฉันมากับวิธีนี้โดยการผสมและจับคู่คำตอบที่ยอมรับ :

(defun my-org-export-url ()
  (interactive)
  (let* ((link-info (assoc :link (org-context)))
         (text (when link-info
                 (buffer-substring-no-properties (or (cadr link-info) (point-min))
                                                 (or (caddr link-info) (point-max))))))
    (if (not text)
        (error "Not in org link")
      (string-match org-bracket-link-regexp text)
      (kill-new (substring text (match-beginning 1) (match-end 1))))))

สิ่งนี้จะคัดลอกไปยังคลิปบอร์ดลิงก์เป็นเพียงส่วนหนึ่งของลิงก์โหมดองค์กร

ที่จริงแล้วฉันได้รวมทั้งคำตอบก่อนหน้านี้และฟังก์ชั่นใหม่นี้ภายในของฉัน.emacsแต่ละคนมีการผูกกุญแจของตัวเอง รหัสเต็มที่นี่:

(defun my-yank-org-link (text)
  (if (derived-mode-p 'org-mode)
      (insert text)
    (string-match org-bracket-link-regexp text)
    (insert (substring text (match-beginning 1) (match-end 1)))))

(defun my-org-copy-smart-url ()
  (interactive)
  (let* ((link-info (assoc :link (org-context)))
         (text (when link-info
                 (buffer-substring-no-properties (or (cadr link-info) (point-min))
                                                 (or (caddr link-info) (point-max))))))
    (if (not text)
        (error "Not in org link")
      (add-text-properties 0 (length text) '(yank-handler (my-yank-org-link)) text)
      (kill-new text))))
(global-set-key (kbd "C-c c") 'my-org-copy-smart-url)

(defun my-org-export-url ()
  (interactive)
  (let* ((link-info (assoc :link (org-context)))
         (text (when link-info
                 (buffer-substring-no-properties (or (cadr link-info) (point-min))
                                                 (or (caddr link-info) (point-max))))))
    (if (not text)
        (error "Not in org link")
      (string-match org-bracket-link-regexp text)
      (kill-new (substring text (match-beginning 1) (match-end 1))))))
(global-set-key (kbd "C-c e") 'my-org-export-url)

ฉันได้เลือกC-c eและC-c cปุ่มลัดเพราะมันเป็นตัวช่วยจำที่ดีสำหรับexport และcopy และพวกมันไม่ได้ใช้ในโหมดองค์กร พวกเขายังพอดีกับปุ่มลัดที่มีอยู่แล้วC-c C-oสำหรับการoเชื่อมโยงการ pening

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.