* সংকলন * উইন্ডোতে বর্তমান ত্রুটির উপর জোর দিন


12

কমপাইল কমান্ডটি চালিত করার সময় এবং 'পরবর্তী ত্রুটি' তে ঝাঁপিয়ে পড়ার সময়, ইম্যাক্স * সংকলন * বাফারের বাম-হাতের প্রান্তে ডানদিকে নির্দেশ করে, সামান্য কালো ত্রিভুজ রেখে বর্তমান ত্রুটির রেখা চিহ্নিত করে । এটি দুর্দান্ত, তবে আমার পুরানো চোখগুলি আরও সাহসী সূচক চায়। এখানকার মৌলিক লক্ষ্যটি হ'ল বর্তমান সংকলক ত্রুটি হিসাবে কোন লাইন ইমাসকে চিহ্নিত করা হচ্ছে তা চাক্ষুষভাবে চাক্ষুষরূপে সনাক্ত করতে সক্ষম হওয়া। কিছু সমাধান যা মাথায় আসে:

  1. বর্তমান ত্রুটির জন্য আলাদা চেহারা (উদাহরণস্বরূপ বড়)।
  2. বর্তমান ত্রুটির জন্য আলাদা পটভূমির রঙ (এইচএল-লাইন-মোডের মতো কিছু)।
  3. একটি বড় ত্রিভুজ

তবে আমি অন্যান্য ধারণার জন্যও উন্মুক্ত।

কেউ আমাকে সাহায্য করতে পারেন?

উত্তর:


2

সংকলন বাফারে বর্তমান ত্রুটি বার্তাটি খুঁজে পাওয়া প্রায়শই বেদনাদায়ক বলে আমি একই জিনিসটি অর্জন করতে চেয়েছিলাম। এই সমাধানটি next-error-hookত্রুটির বার্তাটি হাইলাইট করার জন্য ড্র ব্যবহারের পরামর্শের ভিত্তিতে তৈরি । বর্তমানে এটি ত্রুটি বার্তায় প্রথম লাইনটি হাইলাইট করে তবে আমি দেখতে পাই এটি যথেষ্ট ভাল।

(defcustom next-error-message-highlight-p nil
  "If non-nil, highlight the current error message in the ‘next-error’ buffer"
  :type 'boolean
  :group 'next-error
  :version "??")

(defface next-error-message
  '((t (:inherit highlight)))
  "Face used to highlight the current error message in the ‘next-error’ buffer"
  :group 'next-error
  :version "??")

(defvar next-error-message-highlight-overlay
  nil
  "Overlay highlighting the current error message in the ‘next-error’ buffer")

(make-variable-buffer-local 'next-error-message-highlight-overlay)

(defun next-error-message-highlight ()
  "Highlight the current error message in the ‘next-error’ buffer."
  (when next-error-message-highlight-p
    (with-current-buffer next-error-last-buffer
      (when next-error-message-highlight-overlay
        (delete-overlay next-error-message-highlight-overlay))
      (save-excursion
        (goto-char (point))
        (let ((ol (make-overlay (line-beginning-position) (line-end-position))))
          ;; do not override region highlighting
          (overlay-put ol 'priority -50)
          (overlay-put ol 'face 'next-error-message)
          (overlay-put ol 'window (get-buffer-window))
          (setf next-error-message-highlight-overlay ol))))))

(add-hook 'next-error-hook 'next-error-message-highlight)

ব্যবহার:

(setq next-error-message-highlight-p t)

ডেমো:

ডেমো


1

*compilation*বাফারের বাম-হাতের অংশে প্রদর্শিত বিটম্যাপ চিত্রটি কীভাবে পরিবর্তন করতে হয় তার উদাহরণ এখানে (উদাহরণস্বরূপ, *grep*ফলাফল বাফার):

(define-fringe-bitmap 'custom-right-arrow [128 192 96 48 24 48 96 192 128] 9 8 'center)

(put 'overlay-arrow-position 'overlay-arrow-bitmap 'custom-right-arrow)

ফ্রঞ্জ বিটম্যাপের রঙগুলি কীভাবে সেট করবেন তার একটি উদাহরণ এখানে:

(defface right-triangle-face
  '((t (:background "red" :foreground "yellow")))
  "Face for `right-triangle-face`.")

(set-fringe-bitmap-face 'right-triangle 'right-triangle-face)

আপনার নিজের ফ্রঞ্জ বিটম্যাপটি কীভাবে তৈরি করবেন তার একটি উদাহরণ এখানে রয়েছে:

;; AUTHOR:  Nikolaj Schumacher -- https://github.com/nschum/fringe-helper.el
;;
(defun fringe-helper-convert (&rest strings)
"Convert STRINGS into a vector usable for `define-fringe-bitmap'.
Each string in STRINGS represents a line of the fringe bitmap.
Periods (.) are background-colored pixel; Xs are foreground-colored. The
fringe bitmap always is aligned to the right. If the fringe has half
width, only the left 4 pixels of an 8 pixel bitmap will be shown.
For example, the following code defines a diagonal line.
\(fringe-helper-convert
\"XX......\"
\"..XX....\"
\"....XX..\"
\"......XX\"\)"
  (unless (cdr strings)
  ;; only one string, probably with newlines
    (setq strings (split-string (car strings) "\n")))
  (apply 'vector
    (mapcar
      (lambda (str)
        (let ((num 0))
          (dolist (c (string-to-list str))
            (setq num (+ (* num 2) (if (eq c ?.) 0 1))))
          num))
      strings)))

(define-fringe-bitmap 'backslash (fringe-helper-convert
  "XX......"
  "XX......"
  " XX....."
  ".XX....."
  "..XX...."
  "..XX...."
  "...XX..."
  "...XX..."
  "....XX.."
  "....XX.."
  ".....XX."
  ".....XX.") nil nil 'center)

এটি খুব আশাব্যঞ্জক দেখাচ্ছে। আমি আগামীকাল চেষ্টা করে দেখব (এখানে ঘুমানোর সময় পাচ্ছি)।
স্পেসমুজ

1

next-errorসংকলন-ত্রুটিগুলি বাফারটি স্ক্রোল করে না , যাতে বর্তমান ত্রুটিটি উইন্ডোটির প্রথম লাইন হিসাবে প্রদর্শিত হয়?

যদি তা না হয় তবে এটি কমপক্ষে কার্সারটিকে বর্তমান ত্রুটিরেখায় রাখে না? যদি এটি হয় এবং কার্সারটি আপনার পক্ষে যথেষ্ট পরিমাণে দৃশ্যমান না hl-line-modeহয় তবে বর্তমান লাইনটি হাইলাইট করার জন্য ব্যবহার বিবেচনা করুন । অথবা crosshairsবর্তমান লাইন এবং বর্তমান কলামটি হাইলাইট করতে লাইব্রেরি ব্যবহার বিবেচনা করুন ।


আপনার মন্তব্যের পরে আপডেট করুন

আমি ভেবেছিলাম আপনি next-errorবাফারে ডাকছেন *compilation*। যদি আপনি এটি করেন তবে লাইনটি শীর্ষে স্ক্রোল করা হবে, যেমনটি আমি বর্ণনা করেছি।

কিন্তু আপনি যদি invoking হয় next-errorবাইরে বাফার *compilation*তারপর আপনি ব্যবহার করতে হবে next-error-hookযাও, বাফারে*compilation* , বর্তমান লাইন বা পাড় বা যাই হোক না কেন, যাই হোক না কেন আপনার মত ভাবে তুলে চলেছে।

এখানে একটি দ্রুত এবং নোংরা উদাহরণ:

(defun foo ()
  "..."
  (with-current-buffer next-error-last-buffer
    (hl-line-mode 1)))

(add-hook 'next-error-hook 'foo)

(অবশ্যই, আপনাকে অবশ্যই hl-line-modeসেই বাফারটিতে একবার চালু করতে হবে above উপরের চিত্রের মতো এটি করা অত্যধিক কিল, তবে এতে কোনও ক্ষতি হয় না You আপনি ভাবতে পারেন যে আপনি কেবল যোগ fooকরতে পারেন grep-mode-hookবা compilation-mode-hookBut কিন্তু h হুকগুলি যখন সেখানে অনুরোধ করা হয় তখন সেখানে থাকে না next-error-last-buffer।)

বিঃদ্রঃ:

  1. দুটি ব্যবহারকারীর বিকল্প রয়েছে যা উত্স বাফারে হিট নির্দেশ করার উপায়গুলি (সংকলন বাফারে নয়) নিয়ন্ত্রণ করে: next-error-highlightএবং next-error-highlight-no-select। তারা একই সম্ভাবনাগুলি সরবরাহ করে তবে তারা বিভিন্ন আদেশ দ্বারা ব্যবহৃত হয়। সম্ভাবনার মধ্যে রয়েছে একটি ফ্রঞ্জ তীর ব্যবহার করা বা একটি নির্দিষ্ট সময়ের জন্য ম্যাচটি হাইলাইট করা।

  2. তবে বাফারে বর্তমানের হিটের ইঙ্গিত নিয়ন্ত্রণ করার মতো কোনও বিকল্প নেই *compilation*। সুতরাং ইমাক্স উত্স বাফারের জন্য দুটি বিকল্প (যেখানে সম্ভবত সম্ভবত যথেষ্ট হবে) অফার করে তবে সংকলন বাফারের জন্য কোনও বিকল্প নেই।

আপনি (, grep সহ) বাফার সংকলন জন্য একটি অনুরূপ বিকল্প পেতে একটি বর্ধিতকরণ অনুরোধ ফাইলিং বিবেচনা করতে পারেন: M-x report-emacs-bug। হাইলাইটিংটি সম্পাদন করতে আপনার নিজের ফাংশন সহ একটি হুক ব্যবহার করা ঠিক আছে, তবে এটির প্রয়োজন হবে না।


এবং যদি আপনি কেবল filled-rectangleফ্রঞ্জের সূচকটি পরিবর্তন করতে চান তবে আপনি এটি করতে পারেন (পূর্ববর্তী সংজ্ঞাগুলির তালিকার জন্য ফ্রঞ্জ বিটম্যাপগুলি দেখুন - এর পরিবর্তে আপনি যে কোনও ফ্রঞ্জ বিটম্যাপটি ব্যবহার করতে পারেন ):

(defun bar ()
  (with-current-buffer next-error-last-buffer
    (unless (eq 'filled-rectangle (cdr (assq 'overlay-arrow fringe-indicator-alist)))
      (setq fringe-indicator-alist
            (cons '(overlay-arrow . filled-rectangle) fringe-indicator-alist)))))

(add-hook 'next-error-hook 'bar)

আপডেট # 2:

আমি সবেমাত্র আবিষ্কার করেছি যে আপনি যদি বাম প্রান্তটি দেখানো বন্ধ করেন তবে আপনি শুরুর দিকে বর্ণিত আচরণটি দেখতে পাবেন: বর্তমান ত্রুটিটিকে শীর্ষে রাখার জন্য উইন্ডোটি স্ক্রোল করা আছে। সুতরাং এটি অন্য সম্ভাবনা। (আমার সেটআপে আমি যে আচরণটি দেখি, যেহেতু আমি ফ্রঞ্জ দেখায় না))

এই আচরণে একটি ত্রুটি রয়েছে, যা আমি সবেমাত্র রিপোর্ট করেছি ( # 20829 )। কী হিসাবে গণনা করা হয় (বর্তমানে, বাগ সংশোধন না করা পর্যন্ত) আপনি যখন C-x `( next-error) করছেন তখন নির্বাচিত উইন্ডোতে বামদিকের ফ্রিজটি প্রদর্শিত হচ্ছে কিনা is সংকলন বাফারটি দেখানো উইন্ডোটি বামদিকের প্রান্তটি প্রদর্শন করে না (এটি বর্তমানে যথেষ্ট নয়)।


সংকলন বাফারের স্ক্রোলিং মনে হয় বাকি ইমাকগুলির মতো কাজ করে - যখন 'পয়েন্ট' (সংকলন বাফারের ক্ষেত্রে, বর্তমান ত্রুটি) একটি নির্দিষ্ট পয়েন্ট পেরিয়ে যায়, স্ক্রিন স্ক্রোলগুলি। ডেটা বড় স্ক্রিনের জন্য, এটি ত্রুটি খুঁজে পাওয়া শক্ত করে তোলে। এইচএল-লাইন-মোডের আচরণটি দুর্দান্ত হবে তবে এটি কেবল বর্তমান বাফারটিকে হাইলাইট করে (আমি কী এটিকে ওভাররাইড করতে পারি?) - সুতরাং ত্রুটি দেখা দেওয়ার ক্ষেত্রে কোডের রেখাটি হাইলাইট করা হয়, তবে ত্রুটির তথ্য নেই। ক্রসহায়াররা কলাম এবং লাইন দিয়ে একই জিনিসটি বিট করে বলে মনে হচ্ছে, যা আমার দরকার নেই।
স্পেসমুজ

এখনও অস্পষ্ট, কমপক্ষে আমার কাছে। আমার next-errorজন্য, বাফারের জন্য উইন্ডোটির শীর্ষ লাইনে বর্তমান ত্রুটি রেখা রাখুন *compilation*। অবশ্যই আছে global-hl-line-mode, তবে আপনার অভিযোগ / প্রশ্নটি সম্ভবত *compilation*বাফার সম্পর্কে ছিল । প্রশ্নটি কম স্পষ্ট হচ্ছে, বেশি নয় (আইএমএইচও)।
ড্র হয়েছে

আপনি ত্রুটি সহ ইম্যাকগুলিতে সংকলন করার সময়, পরবর্তী-ত্রুটিটি কার্যকর করুন। উত্স বাফারে আপনার কার্সরটি ত্রুটির উত্সে থাকবে এবং সংকলন বাফারটিতে বর্তমান সংকলক-ত্রুটি-বার্তাটি নির্দেশ করে একটি ছোট কালো ত্রিভুজ রয়েছে । বর্তমান ত্রুটিটি সাধারণত বাফারের শীর্ষতম লাইন নয় (আমি সবেমাত্র 24.5.1 এ পরীক্ষাটি করেছি)। কালো ত্রিভুজটি সন্ধান করার জন্য আমি এটি দৃশ্যত কাজ করে দেখছি। এইচএল-লাইন-মোড কেবল সক্রিয় বাফারের লাইনটি হাইলাইট করে , যা উত্স বাফার। আমি কেবল লাইনটি খুঁজতে সংকলন বাফারে ঝাঁপিয়ে পড়তে চাই না।
স্পেসমুজ

আমি ভেবেছিলাম আপনি বাফারে পরবর্তী ত্রুটিটি চাচ্ছেন *compilation*। যদি তা না হয় তবে আপনাকে বাফারেnext-error-hook হাইলাইটিং (বা যাই হোক না*compilation* কেন) করতে একটি ফাংশন রাখতে হবে । আমি একটি উদাহরণ সহ উত্তর আপডেট।
ড্রং

আপনার দ্রুত এবং নোংরা উদাহরণটি ওপির পয়েন্ট 2 এর উত্তর দেয়, যা ঠিক আমি খুঁজছিলাম। সংকলন বাফার স্ক্রোলিং যাতে সক্রিয় লাইনটি শীর্ষে থাকে (যা কেবলমাত্র বাম পাখাগুলি আকারের হয় তবে 0) প্রসঙ্গটি হারাতে বাধ্য করে (যেহেতু ত্রুটির উপরের রেখাগুলি অর্থবহ হয়), তাই আমাকে সেট করতে হয়েছিল compilation-context-lines। ফলস্বরূপ, বর্তমানে নির্বাচিত ত্রুটিটি খুঁজে পাওয়া শক্ত ছিল। আপনার সমাধান আমাকে বাঁচাতে।
গৌথিয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.