Emacs 24: ELPA এর মাধ্যমে ইনস্টল করা একটি প্যাকেজ লোড হচ্ছে


12

আমি স্রেফ cmake-modeEmacs 24 এ প্যাকেজটি ইনস্টল করেছি :

M-x package-install cmake-mode

আমি এখানে প্যাকেজটি দেখতে পাচ্ছি ~/.emacs.d/elpa/cmake-mode-20110824, এবং আমি এর Commentary:বিভাগে নির্দেশটি ব্যবহার করে এটি লোড করতে পারি ~/.emacs.d/elpa/cmake-mode-20110824/cmake-mode.el:

;; Add this code to your .emacs file to use the mode:
;;
;;  (setq load-path (cons (expand-file-name "/dir/with/cmake-mode") load-path))
;;  (require 'cmake-mode)
;;  (setq auto-mode-alist
;;        (append '(("CMakeLists\\.txt\\'" . cmake-mode)
;;                  ("\\.cmake\\'" . cmake-mode))
;;                auto-mode-alist))

তবে এটি ELPA এর EmacsWiki পৃষ্ঠায় ব্যবহারের নির্দেশের সাথে বৈপরীত্য করছে :

... প্যাকেজগুলি ইনিশিয়াল করা হয় init.el লোড হওয়ার পরে। এর অর্থ আপনার প্যাকেজ নির্দিষ্ট সূচনাটি আরম্ভ করা উচিত নয় ...

আমি এই নির্দেশের সাথে একমত হতে চাই কারণ আমার ~/.gnu-emacsফাইলটিতে একটি লাইন যুক্ত করা যেমন:

(add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")

কুরুচিপূর্ণ, এবং আমি যখন প্যাকেজটি আপগ্রেড করব এবং কখন ভেঙে যাবে। তবে এই লাইন ছাড়া আমি ব্যবহার করতে অক্ষম cmake-mode

আমি কি এখানে কিছু মিস করছি?

মন্তব্য:

  • আমি এর সাথে অদ্ভুত কিছু করি নি package-enable-at-startupএবং এর মানটি t
  • আমি ব্যবহার করছি মঙ্গলাচরণ
  • user-emacs-directoryমানটি হ'ল "~/.emacs.d/" (পরামর্শের জন্য @ আইনজীবি তালিকা)
  • package-user-dir মান হয় "~/.emacs.d/elpa"

1
ডিরেক্টরি বা লোড হচ্ছে না এমন কি আপনি default-directoryবা এর অবস্থানগুলি পরিবর্তন করেছেন ? একটি ডিরেক্টরি তৈরি করে এবং ইনস্টলেশনের সময় তৈরি করা অটোলোড ফাইল সেই অবস্থানের উপর ভিত্তি করে তৈরি হয়। user-emacs-directoryelpapackage-installelpa
আইনজীবি

1
আপনার প্রশ্নে আপনার কোডের শেষ লাইনটি পরামর্শ দেয় যে আপনি প্যাকেজটিকে elpaডিরেক্টরি থেকে সরিয়ে নিয়েছেন - অর্থাত্ ~/.emacs.d/cmake-mode-20110824/অটোল্যাড ফাইল এটি প্রত্যাশা করে না।
আইনজীবি

@ আইনজীবি তালিকা: আপনি খুব পর্যবেক্ষণকারী। আমি প্রশ্নে একটি ভুল করেছি। এটি এখন সঠিক প্রশ্নে (প্রশ্ন) স্থির হয়েছে ~/.emacs.d/elpa/cmake-mode-20110824/। সমস্যা থেকেই যায়।
চেন লেভি

উত্তর:


2

আমি মার্বেল-রেপোর সাথে cmake- মোড ইনস্টল করেছি এবং cmake- মোড-অটোল্যাডস.এল একবার দেখেছি। দেখা যাচ্ছে যে লেখক একটি সচেতন সিদ্ধান্ত নিয়েছিলেন notঅটোলোড ফাইলের মধ্যে সেটআপের জন্য প্রয়োজনীয় সমস্ত কিছুই। যাইহোক, cmake-mode.el এর 25 থেকে 30 লাইনের নির্দেশাবলী সঠিক, যা আপনি আপনার প্রশ্নে উদ্ধৃত করেছেন। আপনি লাইন 30 থেকে 25 ব্যবহার করি এবং পথ সঠিকভাবে সেট, তাহলে আপনি কি করবেন যেমন কোডের একটি অতিরিক্ত লাইন প্রয়োজন (add-to-list 'load-path "~/.emacs.d/elpa/cmake-mode-20110824/")

স্পষ্টতই, আপনি ব্যবহার করতে চাইবেন না /dir/with/cmake-mode- আপনি ~/.emacs.d/elpa/cmake-mode-20110824শেষে একটি ফরোয়ার্ড স্ল্যাশ ছাড়াই ব্যবহার করতে চান ।

(setq load-path (cons (expand-file-name "~/.emacs.d/elpa/cmake-mode-20110824") load-path))
(require 'cmake-mode)
(setq auto-mode-alist
      (append '(("CMakeLists\\.txt\\'" . cmake-mode)
                ("\\.cmake\\'" . cmake-mode))
              auto-mode-alist))

আপনাকে সি-মেক-মোড ... ডিরেক্টরি মুছতে হবে এবং উপরের কোডটি (নিজের পথ ব্যবহার করে) যদি কাজ না করে তবে পুনরায় ইনস্টল করার চেষ্টা করতে পারেন।


অবশ্যই, তবে আমি যদি কিছু মিস করছি না, যদি আপনি পরে ELPA এর মাধ্যমে cmake- মোড আপডেট করেন তবে ডিরেক্টরিটি আপনার init ফাইলটিতে নেই এমন কিছুতে পুনরায় নামকরণ করা হবে, বা নতুন সংস্করণটি আপনার লোডের পথে নেই এমন একটি ডিরেক্টরিতে শেষ হবে; পরবর্তী ক্ষেত্রে, আপনি হয় আপডেটটি দেখতে পাচ্ছেন না বা আপনি অযৌক্তিক অদ্ভুততা পান কারণ আপনি নিজেই একটি সংস্করণ লোড করছেন এবং (package-initialize)অন্যটি লোড করছেন। আমি কি ভূল? আমি বোঝাতে চাইছি, আমি খুব বেশি ইএলপিএ ব্যবহার করি নি এবং এর সাথে এখনও কোনও প্যাকেজ আপডেট করেছি, যাতে আমার ভুল হতে পারে। এবং, অবশ্যই, এটি কোনও ক্ষেত্রেই বড় উদ্বেগ নয়, তবে কেন এটি পুরোপুরি এড়িয়ে যাবেন না?
অ্যারন মিলার

আপনি সঠিক. যাইহোক, প্যাকেজগুলি কেবল এটি সম্পর্কে আপনাকে না জেনে নিজেদের আপডেট করে না - যদি আপনি আপডেট করেন এবং আপনার গৃহকর্মী করার সময় হবে। আমি প্রায়শই বিভিন্ন প্যাকেজগুলির উত্স ফাইলগুলি সংশোধন করার জন্য পর্যাপ্ত পরিমাণে বিনিয়োগ করি এবং এগুলি পুরোপুরি সঠিকভাবে কাটিয়ে দেওয়ার পরে আমি তাদের আপডেট করতে চাই না। ইমাকগুলি "রক্ষণাবেক্ষণ মুক্ত" হিসাবে বিবেচিত হতে পারে তার থেকে অনেক দূরে।
আইনজীবি

একটি দুর্দান্ত পয়েন্ট।
অ্যারন মিলার

3

অর্ধেক কোড ভান্ডার হিসাবে উইকির প্রকৃতি দেওয়া, ইমাস হ্যাকারদের অর্ধেক সহায়তা -স্মৃতি , আপনি বোধগম্যভাবে এই বিষয়টিকে উপেক্ষা করেছেন:

প্রারম্ভকালীন সময়ে প্যাকেজ-ইনিশিয়ালাইজ করা অন্য পয়েন্টে সরানো সহজ হতে পারে যাতে আপনি ELPA প্যাকেজগুলি (প্রয়োজনীয়) করতে পারেন; এটি বর্ণিত সমস্যার অনেকের যত্ন নেয়:

এই আমি কি কি; আমার কাস্টম থ্রি স্ক্রিপ্ট দ্বারা লোড হওয়া প্রথম ফাইলগুলির মধ্যে একটি (যার সৃষ্টিটি, আমি সমস্ত সংগ্রহ করতে পারি, তা কি গুরুতর ইমাক্স 1 ব্যবহারের প্যানস অ্যাসিনোরাম ) করে

(require 'package)
(setq package-enable-at-startup nil)
(package-initialize)

এবং সেখান থেকে কেবল (require)আমার যা প্রয়োজন ELPA প্যাকেজগুলি। ইএলপিএ-ইনস্টলড প্যাকেজগুলির আচরণের উপর সূক্ষ্ম নিয়ন্ত্রণের অনুমতি দেওয়ারও সুবিধা রয়েছে; যদি, উদাহরণস্বরূপ, আমি এই মুহুর্তের জন্য প্রদত্ত প্যাকেজটি অক্ষম করতে চাই তবে এটি সম্পূর্ণরূপে আনইনস্টল না করে, এটি প্রাসঙ্গিক (require)কলটি মন্তব্য করার একটি সহজ বিষয় , যেখানে ডিফল্ট আচরণের জন্য আমার ELPA ডিরেক্টরিটি পুরোপুরি প্যাকেজটি সরিয়ে নিতে হবে।

(১. প্রায় প্রচণ্ড প্রলোভন সত্ত্বেও, আমি ম্যানুয়ালি আমার কাস্টম থ্রি স্ক্রিপ্টটির নাম দিতে অস্বীকার করেছি lightsaber.el))


ELPA প্যাকেজগুলি সেখানে পূর্বনির্ধারিতভাবে পরিবর্তিত হলে ব্যবহারকারী-ইমাস-ডিরেক্টরিতে পরীক্ষা করার জন্য কেবলমাত্র একটি অনুস্মারক । আমি আমার জিনিসগুলি ড্রপবক্সে রাখি এবং আমি আমার ব্যাচের স্ক্রিপ্টে উপরের কমান্ডগুলির কোনও প্রভাব না দেখে অবাক হয়েছি যতক্ষণ না আমি সেট না করি।
22:44 এ mlt

1

প্যাকেজ লোড ব্যবহার করে আপনি কেবল আপনার সমস্ত সূচনা করতে পারেন after-init-hookইমাসকুইকি থেকে :

;; init.el
(add-hook 'after-init-hook (lambda () (load "<real init file>")))

0

আমি যখন ইএলপিএ ব্যবহার শুরু করি তখন আমারও একই সমস্যা হয়েছিল। আমার ক্ষেত্রে আমার বেশ কয়েকটি স্থানীয় প্যাকেজ রয়েছে কারণ সেগুলি ইএলপিএতে উপস্থিত ছিল না।

এবং এইভাবে আমি লোড-পথ পরিবর্তন করেছি। কোনও কারণে লোড-পাথ সঠিকভাবে প্যাকেজ.েল দ্বারা আপডেট করা হয়নি। সমস্যা সমাধানের জন্য আমাকে কল করার (setq load-path (cons "~/.emacs.d" load-path)) পরে ফোন করতে হয়েছিলpackage-initialize

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