মিনি বাফারে বর্তমান ফাইলের সম্পূর্ণ পথ দেখানোর জন্য ফাংশন


98

আমি যে ফাইলটি ইম্যাক্স দিয়ে সম্পাদনা করছি তার পুরো পাথটি পাওয়া আমার দরকার।

  • তার জন্য কোনও অনুষ্ঠান আছে?
  • যদি তা না হয় তবে তা পাওয়ার জন্য কী হবে?
  • আমি কীভাবে ফলাফল (পথের নাম) একটি ক্লিপবোর্ডে অনুলিপি করতে পারি যাতে আমি এটি পুনরায় ব্যবহার করতে পারি?

আমি ম্যাক ওএস এক্স এবং অ্যাকোম্যাকস ব্যবহার করছি।

(setq filepath (get-fullpath-current-file)) ???
(copy-to-clipboard 'filepath) ???

যুক্ত হয়েছে

(শো-ফাইল-নাম defun ()
  "মিনিপুফায়ারে পুরো পাথ ফাইলের নামটি দেখান" "
  (ইন্টারেক্টিভ)
  (বার্তা (বাফার-ফাইলের নাম))
  (কিল-নতুন (ফাইল-ট্রুয়েনাম বাফার-ফাইল-নাম))
)
(গ্লোবাল-সেট-কী "\ সি-সিজেড" 'শো-ফাইল-নাম)

আমি যে দুটি উত্তর পেয়েছি তা একত্রিত করে আমি যা চাই তা পেতে পারি could উত্তরের জন্য ধন্যবাদ। এবং আরও কিছু প্রশ্ন।

  • (ফাইল-ট্রেনাম) এর জন্য কী?
  • সিস্টেমের (ওএস) ক্লিপবোর্ডে আমি কি পাথের নামটি কপি করতে পারি, কিল রিংটি না করে যাতে আমি অন্যান্য অ্যাপ্লিকেশনগুলির সাথে তথ্যটি ব্যবহার করতে পারি?

উত্তর:


93

এটি অন্তর্নির্মিত ফাংশন buffer-file-nameযা আপনাকে আপনার ফাইলের পুরো পথ দেয়।

করণীয় হ'ল সর্বোত্তম কাজটি হ'ল আপনার ইম্যাকস উইন্ডোটি সর্বদা আপনার সিস্টেমের নাম এবং আপনি বর্তমানে সম্পাদন করছেন বাফারের পুরো পথ প্রদর্শন করতে:

(setq frame-title-format
      (list (format "%s %%S: %%j " (system-name))
        '(buffer-file-name "%f" (dired-directory dired-directory "%b"))))

আপনি এর মতো কিছু করতে পারেন:

(defun show-file-name ()
  "Show the full path file name in the minibuffer."
  (interactive)
  (message (buffer-file-name)))

(global-set-key [C-f1] 'show-file-name) ; Or any other key you want

8
buffer-file-name
ইমাস

6
... তবে তবুও একটি ফাংশন
ফিল্ডগুলি

18
যদি এটি একটি ফাংশন হয় তবে কেন এটি উপস্থিত হয় না M-x?
asmeurer

9
asmeurer - কারণ এটি ইন্টারেক্টিভ নয়
বেন

4
@ টেলসপিন_কিট হ্যাঁ, একেবারে। এলিস্প একটি "লিস্প -২" "লিস্প -১" এর বিপরীতে, যার অর্থ দুটি স্বতন্ত্র নাম-স্থান (ভেরিয়েবল এবং ফাংশন) রয়েছে। সুতরাং প্রতিটি প্রতীকে একটি "ফাংশন স্লট" এবং একটি "মান স্লট" থাকে এবং কোন স্লটে অ্যাক্সেস করা হয় তা প্রসঙ্গে নির্ভর করে। অনুশীলনে অনেকগুলি উদাহরণ রয়েছে (উদাহরণস্বরূপ, কোনও ছোট মোডের নামটি একটি ফাংশন এবং ভেরিয়েবল উভয়ই হতে পারে)। এটি আপনাকে funcallভেরিয়েবলের মান হিসাবে সঞ্চিত ফাংশনটিতে কল করতে পছন্দ করতেও প্রয়োজন fooকারণ আপনি যদি ব্যবহার করেন তবে আপনি মান স্লটের চেয়ে (foo)ফাংশন স্লটটি ব্যবহার করবেন foo
ফিল্ডস

74

জেরুমে রেডিক্সের উত্তর থেকে ধার নিতে, আপনি যদি এখনই বর্তমান বাফারের ফাইল পাথটি দ্রুত দেখতে চান তবে আপনি এটি করতে পারেন M-: buffer-file-name

অন্যথায়, (buffer-file-name)কোথাও বাফারটি টাইপ C-x C-eকরুন এবং বন্ধ হওয়া বন্ধনীতে চালিত হন (এটি কেবল লিস্প-মোড নয়, কোনও মোডে কাজ করবে)।


4
ধন্যবাদ, আমি ভেবেছিলাম buffer-file-nameএকটি ফাংশন হিসাবে, কিন্তু এটা দেখা যায় না M-x, কিন্তু দেখা M-:যেমন emacs evalআপনার উত্তর করার জন্য :) সেখানে আমি কমান্ড চালাতে পারেন, ধন্যবাদ
PeterZD

6
হ্যাঁ, M-xকেবল ইন্টারেক্টিভ ফাংশন M-:চালায় , যেখানে কোনও এলিস্প ফাংশন চালায়।
asmeurer

41

আমার কৌশলটি C-x C-fকোনও ফাইল খোলার মতো কাজ করা, এটি বর্তমান ফাইলের পাতায় মিনিফামটি প্রিফিল করে, C-gপ্রস্থান করা। M-: buffer-file-nameঅন্য যে কোনও পদ্ধতির চেয়ে আরও দ্রুত কিন্তু অনেক বেশি খারাপ।


আমিও এটি করি এটি হার্ড ইম্যাক্স-ওয়াই হিসাবে নয় তবে আমার যতটুকু যত্ন করা হয় তা বর্তমান ফাইলটির পথ হয় তবে এটি কার্যকর হয়।
andrunix

আপনি যদি একটি ফাইল খোলেন, এ বলুন এবং তারপরে অন্য কোনও ফাইলে ঝাঁপুন, বি বলুন, উদাহরণস্বরূপ প্লাগইনটির কার্যকারিতা সংজ্ঞায়িত করতে কিছুটা লাফ ব্যবহার করে, এই পদ্ধতিটি বি এর পরিবর্তে A এর পথ দেখায়! সুতরাং, এই উত্তরটি সর্বদা ওপি যা যা চাইতে চায় তা দেয় না।
অভিষেক আনন্দ

5
সিএক্স সিভি আপনাকে কেবল বর্তমান পথ নয় বর্তমান ফাইলের নামও
দেখায়

@kuzzooroo এটি আইডো-মোড ব্যবহারকারীদের জন্য সঠিক (আপনি ইডো-মোড ব্যবহার করে নামটি সিএক্স সিএফতে প্রদর্শিত হবে)।
জুলিয়েন পালার্ড

16

আপনি যা চান তার প্রত্যক্ষ বাস্তবায়ন হ'ল:

(defun copy-full-path-to-kill-ring ()
  "copy buffer's full path to kill ring"
  (interactive)
  (when buffer-file-name
    (kill-new (file-truename buffer-file-name))))

এটি বলেছিল, মিনিপুফারটিতে যা রয়েছে তার পুরো পথ পেতে সক্ষম হওয়া আমার পক্ষে অবিশ্বাস্যরকম দরকারী এবং আমি এটি ব্যবহার করি:

(define-key minibuffer-local-completion-map "\C-r" 'resolve-sym-link)
(defun resolve-sym-link ()
  "Try to resolve symbolic links into true paths."
  (interactive)
  (beginning-of-line)
  (let* ((file (buffer-substring (point)
                                 (save-excursion (end-of-line) (point))))
         (file-dir (file-name-directory file))
         (file-true-dir (file-truename file-dir))
         (file-name (file-name-nondirectory file)))
    (delete-region (point) (save-excursion (end-of-line) (point)))
    (insert (concat file-true-dir file-name))))

এবং তারপরে যদি আমি এটি ক্লিপবোর্ডে চাই, আমি কেবল লাইনটি মেরে ফেলব ( C-a C-k)। তবে আমরা সহজেই উপরের কমান্ডের ক্লিপবোর্ডে সত্যতা অনুলিপি করতে পারি, কেবল শেষ লাইনটি এই হিসাবে পরিবর্তন করুন:

(insert (kill-new (concat file-true-dir file-name)))))

নতুন অংশটি হ'ল সেই কল 'kill-newযা কিলিং রিংটিতে স্ট্রিং রাখে।


আপনি কীভাবে এই সেটিংসটি ব্যবহার করবেন তা বিস্তারিতভাবে বলতে পারেন? এবং "\ Cr" এর অর্থ কী?
মডেলার 18

কিছু মনে করো না. আমি এটি বের করেছিলাম। আমি ইডো মোডে থাকাকালীন এবং কোনও ফাইলের দিকে ইশারা করার সময় এটি দরকারী বলে মনে করি, তখন আমি সেই ফাইলটির পুরো পথটি পেতে সিআর টিপুন। প্রকৃতপক্ষে দরকারী। তবে আমি এখনও জানি না কেন সি এর পরিবর্তে \ সেঃ কেন ব্যবহার করবেন
মডেলার

11

শুধু অতিরিক্ত ক্রিয়াকলাপের প্রয়োজন নেই

M-! pwd

যদিও এটি কাজ করতে পারে, এটি উইন্ডোজ সিস্টেমে কাজ করবে না এবং এটি ইম্যাক্সের বর্তমান ওয়ার্কিং ডিরেক্টরিটি বর্তমান বাফারের ফাইলের ডিরেক্টরি থেকে আলাদা হতে পারে এই বিষয়টি বিবেচনা করতে ব্যর্থ হয়। আপনি নিজের জন্য এটি ফাইল সহ গিয়ে C-x C-f, দৌড়াতে M-! pwd, M-x cdএবং তার পরে অন্য কোনও ডিরেক্টরি নির্বাচন করে M-! pwdআবার দেখতে পেলেন ।
জোসফাতভ

3

আমার নীচের কোডটি ইতিমধ্যে দীর্ঘ সময়ের জন্য ব্যবহৃত। মোড-লাইনে বাফার নামের মাঝের মাউস বোতামটি টিপলে এটি কিল রিংয়ের সম্পূর্ণ ফাইলের পাথটি অনুলিপি করে। আমি মোড-লাইনে বাফার-নামটিতে শিফ্ট-মাউস -2 টিপলে এটি কফ-রিং-এ কেবল বাফারের নামটি অনুলিপি করে।

(defun copy-buffer-file-name (event &optional bufName)
  "Copy buffer file name to kill ring.
If no file is associated with buffer just get buffer name.
"
  (interactive "eP")
  (save-selected-window
    (message "bufName: %S" bufName)
    (select-window (posn-window (event-start event)))
    (let ((name (or (unless bufName (buffer-file-name)) (buffer-name))))
      (message "Saved file name \"%s\" in killring." name)
      (kill-new name)
      name)))

(define-key mode-line-buffer-identification-keymap [mode-line mouse-2] 'copy-buffer-file-name)
(define-key mode-line-buffer-identification-keymap [mode-line S-mouse-2] '(lambda (e) (interactive "e") (copy-buffer-file-name e 't)))

3

C-x C-dএর মাধ্যমে কলযোগ্য M-x list-directory, আপনাকে আপনার বর্তমান ফাইলের জন্য ডিরেক্টরিটি প্রদর্শন করবে এবং মিনিবুফারটি সাফ করার জন্য আপনাকে কেবল "এন্টার" কী চাপতে হবে। অতিরিক্ত বিশদ এখানে পাওয়া যায়


আমার প্রিয় উত্তর, সহজ, দ্রুত এবং সহজ!
টিকটক

2

C-x C-b প্রযোজ্য প্রতিটি বাফারের জন্য বাফারগুলির একটি তালিকা এবং ফাইলের পথ দেখায়।



1

সিস্টেমের (ওএস) ক্লিপবোর্ডে আমি কি পাথের নামটি কপি করতে পারি, কিল রিংটি না করে যাতে আমি অন্যান্য অ্যাপ্লিকেশনগুলির সাথে তথ্যটি ব্যবহার করতে পারি?

আপনি যদি এক্সক্লিপ (লিনাক্স), পিবিসিপি (ম্যাক), পুটক্লিপ (সাইগউইন) এর মতো কিছু করতে পারেন তবে can

আমি ব্যক্তিগতভাবে মোড়কের স্ক্রিপ্টগুলি cএবং pযথাক্রমে অনুলিপি এবং অনুলিপি ব্যবহার করি , স্ট্যান্ডার্ড ইনপুট থেকে প্রথম পাঠ, আধুনিক লেখার পরে স্ট্যান্ডার্ড আউটপুট। এইভাবে, এটি আমার সমস্ত বিকাশ প্ল্যাটফর্মগুলিতে কাজ করে:

(shell-command (format "echo '%s' | c" buffer-file-name))

ইমাস ক্লিপবোর্ড সমর্থন ব্যবহার করার চেয়ে আমি এটি আরও নির্ভরযোগ্য এবং কনফিগারযোগ্য মনে করি। উদাহরণস্বরূপ, আমার cকমান্ড লিনাক্সের সমস্ত 3 টি ক্লিপবোর্ডগুলিতে ইনপুট অনুলিপি করেছে (প্রাথমিক, মাধ্যমিক, ক্লিপবোর্ড), তাই আমি Ctrl-V বা মাঝের ক্লিকের মাধ্যমে পেস্ট করতে পারি।


এটি কাজ করা উচিত তবে এটি আমার পক্ষে নয়। (উবুন্টু 14.04.1।) date | xclipএবং xclip fileশেল টাইপ করা থাকলে উভয়ই বিজ্ঞাপন হিসাবে কাজ করে (তারিখ বা ফাইলের বিষয়বস্তুগুলিকে প্রাথমিকের জন্য সংরক্ষণ করে ) work তবে আমি যদি এম- এর পরে এই কমান্ডগুলির কোনওটি টাইপ করি! ইমাসে (এবং হিট রিটার্ন) কিছুই হয় না; কার্সারটি মিনিপুফারে রয়ে গেছে যেন আরও ইনপুট আশা করে; এবং যদি আমি নিয়ন্ত্রণ ফিরে পেতে বাধা দেয় তবে প্রাথমিকভাবে কোনও কিছুই হ'স সংরক্ষণ করা হয়নি।
সিলভিও লেভি

ঠিক আছে, আপনার ধারণাটি xclip এর পরিবর্তে xsel এর সাথে ঠিকঠাক কাজ করে: (shell-command (format "echo '%s' | xsel -i" buffer-file-name))- এবং যখন একটি ইন্টারেক্টিভ কমান্ড তৈরি করা হয় (যেমন উপরে @ জেরোম্যাডিক্সের দ্বারা সর্বাধিক উত্সাহিত উত্তরের পরামর্শ দেওয়া হয়েছে), এটি একটি বিগ উইন! ধন্যবাদ!
সিলভিও লেভি

0

সহজ উপায় এবং হবে

(buffer-name)<(C-x)(C-e)> for the file name to appear in the echo area

(buffer-name)<(C-u)(C-x)(C-e)> would print the location <here>

ট্রে জ্যাকসনের কাছ থেকে Iণ নিয়ে আমি এটি নিয়ে এসেছি:

(defun buffer-kill-path ()
  "copy buffer's full path to kill ring"
  (interactive)
  (kill-new (buffer-file-name)))

আপনি সাইটে আরও তথ্য পেতে পারেন


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.