2010-03-10 16 views
27

क्लिपबोर्ड फ़ाइल पथ के साथ वर्तमान पूर्ण फ़ाइल नाम भेजने के लिए सबसे आसान तरीका क्या है में क्लिपबोर्ड में?फ़ाइल पथ Emacs

क्या मैं अब का उपयोग कर रहा संदेशों बफर है: मैं कॉपी फ़ाइल नाम है कि एक फ़ाइल को सहेजने के बाद वहाँ प्रकट होता है। लेकिन, मुझे लगता है, बहुत आसान तरीका होना चाहिए।

उत्तर

18

मैं इस का उपयोग करें:

(defun my-put-file-name-on-clipboard() 
    "Put the current file name on the clipboard" 
    (interactive) 
    (let ((filename (if (equal major-mode 'dired-mode) 
         default-directory 
        (buffer-file-name)))) 
    (when filename 
     (with-temp-buffer 
     (insert filename) 
     (clipboard-kill-region (point-min) (point-max))) 
     (message filename)))) 
+3

आप ऐसा कर सकते हैं अस्थायी बफर के बिना, का उपयोग करते हुए "को मारने के नए": (चलो ((एक्स-चयन: सक्षम-क्लिपबोर्ड टी)) (मारने-नया फ़ाइल नाम)) – sanityinc

4

वहाँ एक buffer-extension है - और यह copy-buffer-file-name-as-kill समारोह है। यह आपको यह भी पूछता है कि कॉपी करने के लिए: नाम, पूरा नाम या निर्देशिका नाम।

संपादित:

मैं buffer-extension.el से copy-buffer-file-name-as-kill के संस्करण संशोधित का उपयोग करें:

(defun copy-buffer-file-name-as-kill (choice) 
    "Copyies the buffer {name/mode}, file {name/full path/directory} to the kill-ring." 
    (interactive "cCopy (b) buffer name, (m) buffer major mode, (f) full buffer-file path, (d) buffer-file directory, (n) buffer-file basename") 
    (let ((new-kill-string) 
     (name (if (eq major-mode 'dired-mode) 
        (dired-get-filename) 
       (or (buffer-file-name) "")))) 
    (cond ((eq choice ?f) 
      (setq new-kill-string name)) 
      ((eq choice ?d) 
      (setq new-kill-string (file-name-directory name))) 
      ((eq choice ?n) 
      (setq new-kill-string (file-name-nondirectory name))) 
      ((eq choice ?b) 
      (setq new-kill-string (buffer-name))) 
      ((eq choice ?m) 
      (setq new-kill-string (format "%s" major-mode))) 
      (t (message "Quit"))) 
    (when new-kill-string 
     (message "%s copied" new-kill-string) 
     (kill-new new-kill-string)))) 
21

Emacs Prelude में मैं का उपयोग करें:

(defun prelude-copy-file-name-to-clipboard() 
    "Copy the current buffer file name to the clipboard." 
    (interactive) 
    (let ((filename (if (equal major-mode 'dired-mode) 
         default-directory 
        (buffer-file-name)))) 
    (when filename 
     (kill-new filename) 
     (message "Copied buffer file name '%s' to the clipboard." filename)))) 
+1

इसे 'सादे' के साथ काम करता Emacs। – lifeisfoo

+0

'प्रस्तावना कॉपी-फ़ाइल-नाम-से-clipboard' आदेश प्रस्तावना का भाग नहीं है। के रूप में के लिए प्रतिबद्ध संदेश ने सुझाव दिया प्रतिबद्ध जो इसे हटा दिया, बजाय [ 'आसान kill'] (https://github.com/leoliu/easy-kill) पैकेज का उपयोग पर विचार करें। – ack

13

आप के नाम/पथ लिखने के लिए चाहते हैं वर्तमान बफर आप C-u M-: टाइप कर सकते हैं और फिर या तो (buffer-file-name) - पूर्ण पथ के लिए - या बफर नाम के लिए (buffer-name)

यही कारण है:

M-: + ellisp expression मिनी बफर

C-u वर्तमान बफर

को आउटपुट लिखने वास्तव में सवाल का जवाब नहीं है, लेकिन किसी अगर उपयोगी हो सकता है में एक ellisp अभिव्यक्ति का मूल्यांकन करता है इस या अन्य फ़ंक्शन को स्पोरैडिक रूप से उपयोग करें, और प्रत्येक स्टार्टअप पर फ़ंक्शन को प्रारंभ नहीं करना पसंद करते हैं।

+1

ताकि ठीक से सवाल किसी एक का उपयोग कर सकता है जवाब देने के लिए में 'M-- बाद में सी-एम-k' (पिछले sexp मारने)। मान लीजिए कि यह थोड़ा बोझिल है, लेकिन मैक्रो के रूप में इस्तेमाल किया जा सकता है। – rsenna

4

Spacemacs वितरण में, आप अंतरिक्षy minibuffer में बफर नाम प्रदर्शित और यह मार अंगूठी को कॉपी करने के लिए दबा सकते हैं च

फ़ंक्शन spacemacs/show-and-copy-buffer-filename (source) के साथ कार्यान्वित किया गया।

संबंधित मुद्दे