কীভাবে এলিস্পে চিহ্ন স্থাপন করবেন এবং শিফট নির্বাচন করবেন?


9

ট্রান্সিয়েন্ট-মার্ক-মোড সক্রিয় থাকাকালীন ইমাসের স্বাভাবিক আচরণ হ'ল আপনি যখন একটি শিফ্ট-নির্বাচন করেন, তারপরে পরবর্তী কমান্ডটি যদি একটি নন-শিফ্ট চলাচল করে, চিহ্নটি নিষ্ক্রিয় করা হয়। উদাহরণস্বরূপ, কমান্ডগুলির পরে M-l(নীচের ফাংশনটির সাথে বর্তমান লাইনটি চিহ্নিত করতে) এবং C-f, চিহ্নটি নিষ্ক্রিয় করা হয়েছে। এলিসপ থেকে কীভাবে সেই আচরণটি অনুকরণ করা যায় (set-mark-command nil)?

উদাহরণ স্বরূপ:

(defun my-mark-current-line ()
  (interactive)
  (beginning-of-line)
  (set-mark-command nil)
  (end-of-line)
  (forward-char))

(global-set-key (kbd "M-l") 'my-mark-current-line)

এখন এমএল সিএফ এবং অঞ্চলটি বৃদ্ধি পাবে, তবে পরিবর্তে, আমি ডিফল্ট আচরণটি চাই, সিএফ করার সময় অঞ্চলটি নিষ্ক্রিয় করতে, এবং সিএসএফের সাথে বৃদ্ধি পেতে।

সম্পাদনা : সেট-চিহ্ন-কমান্ডের জন্য আলাদা কোনও ফাংশন ব্যবহার করা উচিত যা এটির অনুমতি দেয়? আমি কিছুই খুঁজে পেলাম না।


আমি বিশ্বাস করি যে এটি সম্ভব নয় (এবং আমি ভুল হতে পারি)। যতক্ষণ অঞ্চল সক্রিয় থাকবে ততক্ষণ নেভিগেশন কমান্ড নির্বাচন পরিবর্তন করবে। ব্যবহার করে শিফট-নির্বাচনটি (অঞ্চল সক্রিয়করণ) + (নেভিগেশন) এর সাথে C-S-fসমান । আপনি সম্ভবত যা চান তা কোনও র‌্যাপার ফাংশনের সাথে আবদ্ধ হয়ে পেতে পারেন যা প্রথমে সক্রিয় হলে কোনও অঞ্চলকে নিষ্ক্রিয় করে এবং তারপরে যা করে তা এগিয়ে যায় ( ); এবং সরাসরি বাঁধা । মনে রাখবেন যে আপনি যদি কখনও টার্মিনাল মোডে ইমাস ব্যবহার করেন এবং উভয়ই টার্মিনাল হিসাবে দু'জনের মধ্যে পার্থক্য করতে পারে না এমন আচরণ করবে । C-SPCC-fC-fC-fforward-charC-S-fforward-charC-fC-S-fC-f
দক্ষ মোদী

এছাড়াও আপনি যে মোড়ক এবং বাঁধাইয়ের জন্য করেছিলেন C-fতা আপনার ব্যবহারযোগ্য অন্যান্য নেভিগেশন কমান্ডগুলির ক্ষেত্রেও প্রযোজ্য।
कौशल মোদী

বিটিডব্লু C-fপরে M-lঅঞ্চলটিকে প্রসারিত করে না কারণ শেষে কোনও সক্রিয় অঞ্চল নেই M-l(যা downcase-wordপূর্বনির্ধারিতভাবে আবদ্ধ )।
দক্ষ মোদী

1
@ কাউশালমোদি আমি মনে করি যে M-lওপি দ্বারা উল্লিখিত রেফারেন্সটি ডিফল্ট বাঁধাই নয় ( downcase-word), তবে কাস্টম বাইন্ডিংmy-mark-current-line
নিসপিও

নিঃসন্দেহে
মিক্ল

উত্তর:


8

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

;; (source: http://emacs.stackexchange.com/a/22166/93)
(defun my-mark-current-line ()
  (interactive)
  (beginning-of-line)
  (setq this-command-keys-shift-translated t)
  (call-interactively 'end-of-line)
  (call-interactively 'forward-char))

(global-set-key (kbd "M-l") 'my-mark-current-line)

হালনাগাদ:

উপরের উত্তরটি লেখার পর থেকে শিফট নির্বাচন কীভাবে হুডের নীচে কাজ করে সে সম্পর্কে আমি আরও কিছুটা জানতে সময় নিয়েছি। এটি transient-mark-modeফর্মের একটি কনস সেল হওয়ার প্রতীক মান নির্ধারণ করে (only . OLDVAL), যেখানে OLDVALস্থানান্তর নির্বাচনের আগে মান।

সমাধান নিচে ব্যবহার এড়াতে call-interactivelyচিহ্ন হিসাবে প্রয়োজন সক্রিয়, এবং যথাযথ মান সেট করে transient-mark-mode। মূলত, আমি এই সমাধানটিকে প্রথমটির চেয়ে হ্যাকের চেয়ে কম মনে করি।

বোনাস হিসাবে, এটি এখন একটি optionচ্ছিক পুনরাবৃত্তি গণনা আছে, এবং চিহ্নটি ইতিমধ্যে সক্রিয় থাকলে উভয় দিকের বর্তমান নির্বাচনকে প্রসারিত করবে।

;; (source: http://emacs.stackexchange.com/a/22166/93)
(defun my-mark-current-line (&optional arg)
  "Uses shift selection to select the current line.
When there is an existing shift selection, extends the selection
in the appropriate direction to include current line."
  (interactive "p")
  (let ((oldval (or (cdr-safe transient-mark-mode) transient-mark-mode))
        (backwards (and mark-active (> (mark) (point))))
        (beg (and mark-active (mark-marker))))
    (unless beg
      (if backwards (end-of-line) (beginning-of-line))
      (setq beg (point-marker)))
    (if backwards (end-of-line (- 1 arg)) (beginning-of-line (+ 1 arg)))
    (unless mark-active
      (push-mark beg nil t))
    (setq transient-mark-mode (cons 'only oldval))))

1
উভয়ই নিখুঁতভাবে কাজ করে এবং প্রাচীনকালের জিনিসটি খুব দরকারী! অনেক ধন্যবাদ!
মিক্ল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.