ইমাকগুলিতে কোঁকড়ানো এবং বর্গাকার ধনুর্বন্ধনী অদলবদল করুন


2

বর্তমানে emacsআমি টাইপ করতে হবে SHIFT-[এবং SHIFT-]পেতে {এবং }যথাক্রমে। টাইপিং [এবং ]উৎপাদনের [এবং ]যথাক্রমে। আমি এই আচরণটি ইম্যাকগুলিতে অদলবদল করতে চাই, যথা আমি চাই:

  • [এবং ]ফলন হবে {এবং}
  • SHIFT-[এবং SHIFT-]ফলন হবে [এবং]

এই ধারণাটি https://tex.stackexchange.com/a/1985/412 দ্বারা অনুপ্রাণিত

বোনাস: আমি চাই যে এই আচরণটি কেবলমাত্র কয়েকটি বড় মোডের জন্য প্রয়োগ করা হয়।

উত্তর:


1

আপনি যদি পুরো ইমাস জুড়ে এই আচরণটি চান, তবে এটি ব্যবহার করে এটি অর্জন করা তুচ্ছ হবে key-translation-map, এই উদ্দেশ্যে বিশেষত প্রদত্ত একটি কীম্যাপ ব্যবহার করে । এটি কেবলমাত্র কয়েকটি নির্দিষ্ট মোডে ব্যবহার করতে চাইলে কিছুটা জটিল হয়। আমি এখন পর্যন্ত এটির সবচেয়ে ভাল উপায়টি খুঁজে পেয়েছি একটি সংক্ষিপ্ত মোড সংজ্ঞায়িত করা যা কোনও প্রদত্ত কীম্যাপ অনুসারে অনুবাদ সম্পাদন করে এবং তারপরে প্রতিটি বড় মোডের সাথে আপনি যে ছোট্ট মোডটি প্রয়োগ করতে চান এটি সক্রিয় করতে একটি হুক যুক্ত করুন ।

এখানে ছোটখাটো মোড সংজ্ঞা দেওয়া আছে। swap-braces.elএটি আপনার লোডের পথে কোথাও একটি ফাইলের মধ্যে ফেলে দিন।

;;; swap-braces.el - a minor mode to swap square and curly braces

;;; Installation: 

;; Drop it in your load path and (require 'swap-braces).
;; Possibly also (add-hook 'foo-mode-hook 'swap-braces-mode).

;;; Commentary:

;; The swap function explicitly instructs Linum to schedule an update,
;; if Linum mode is enabled; otherwise, Linum does not automatically 
;; update while Swap-Braces mode is enabled.
;; This seems like it should not be necessary, and I'm uncertain whether 
;; it has greater implications regarding interaction between this mode 
;; and others. 
;; (That is, it makes me worry that something about how I've implemented 
;; this makes it screw up other modes using post-command-hook. Caveat user!)

;;; Author

;; Aaron Miller (me@aaron-miller.me)

(setq swap-braces-map (make-sparse-keymap))

(define-key swap-braces-map (kbd "{") "[")
(define-key swap-braces-map (kbd "}") "]")
(define-key swap-braces-map (kbd "[") "{")
(define-key swap-braces-map (kbd "]") "}")

(define-minor-mode swap-braces-mode
  "When active, swap square braces and curly braces, so that e.g. pressing [
elicits '{', and S-[ elicits '['.

The keymap `swap-braces-map' defines this mode's behavior. It is strongly
recommended that you do not define keys in this map which are not self-
inserting characters; the resulting behavior is indeterminate, but almost
certainly not what you intended."
  :init-value nil
  :lighter " [{"
  (if swap-braces-mode
      (add-hook 'post-command-hook
                'swap-braces-mode-swap)
    (remove-hook 'post-command-hook
                 'swap-braces-mode-swap)))

(defun swap-braces-mode-swap ()
  ;; this worries me
  (if (and (boundp 'linum-mode)
           (not (eq nil linum-mode)))
      (linum-schedule))
  (when (and (eq (char-before) last-command-event)
             (not (window-minibuffer-p (selected-window))))
    (let* ((translation (lookup-key swap-braces-map (string (char-before)))))
      (if (stringp translation)
          (progn
            (backward-delete-char 1)
            (insert translation))))))

(provide 'swap-braces)

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

তারপরে, আপনার সূচনা কোডের কোথাও (require 'swap-braces); এখন থেকে, আপনি এর সাথে অদলবদল আচরণ সক্রিয় করতে পারেন M-x swap-braces-mode

অবশেষে, একটি প্রধান মোডের সাথে গৌণ মোডটি সক্রিয় করতে, এটি প্রধান মোডের লোড হুকের সাথে যুক্ত করুন। আপনি যে প্রধান মোডটি ব্যবহার করছেন তার নাম যদি 'ফু-মোড' হয়, তবে আপনি নিম্নলিখিতটি আপনার প্রারম্ভিককরণের কোডটিতে যুক্ত করতে চান:

(add-hook 'foo-mode-hook 'swap-braces-mode)

স্বাদে সামঞ্জস্য করুন; আপনার ক্ষেত্রে, এটি সম্ভবত বলা হবে latex-mode-hook, তবে এটি নিশ্চিত করার জন্য মোডের ডকুমেন্টেশন পরীক্ষা করুন।

শুধুমাত্র নির্বাচিত উইন্ডোটি মিনিফার না হলে অনুবাদ প্রয়োগ করতে 2013-10-09-এ সম্পাদিত; মন্তব্য দেখুন।


আপনি কি ভূমিকাটির ভূমিকা ব্যাখ্যা করতে পারেন linum-mode?
ভয়ঙ্কর

@ ডোর এটি একটি (সম্ভাব্য গ্লোবাল) গৌণ মোড, এটি জিএনইউ ইম্যাকস স্ট্যান্ডার্ড লাইব্রেরিতে অন্তর্ভুক্ত রয়েছে, এটি যেখানে সক্রিয় রয়েছে সেখানে উইন্ডোজের বাম-প্রান্তে লাইন নম্বর সরবরাহ করে। ( ইমাসকুইকিতে লিনাম ; বিকাশকারীর (বরং সর্বনিম্ন) সাইট থেকে স্ক্রিনশট ; উত্স ))
অ্যারন মিলার

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

@ ডারার অনুবাদ কীস্ট্রোক একটি বড় সমস্যা নয়; এটি কেবল নির্দিষ্ট প্রসঙ্গেই করা দ্রুত জটিল হয়ে ওঠে। swap-braces-mode-swapমিনিবুফারে স্ট্রোক অনুবাদ না করার জন্য আমি কেবল সম্পাদনা করেছি ; এটি আপনাকে যে আচরণটি সন্ধান করছে তা দেওয়া উচিত। আমি আরও দৃ strongly়ভাবে কিছু ইমাস লিস্প শেখার পরামর্শ দেব; আমি এখানে যা পোস্ট করেছি তা একটি সম্পূর্ণ সমাধানের চেয়ে আরও একটি সূচনা পয়েন্ট, যার অর্থ আপনি সম্ভবত এটির স্বাদ নিতে হ্যাক করতে চাইবেন। ভাষা শেখা কঠিন নয় এবং আপনি কীভাবে নিষেধকারী এবং এলিয়েনকে খুঁজে পেয়েছেন তা ইমাস লিসপকে আপনি কতটা ভাল জানেন তার বিপরীতভাবে আনুপাতিক।
অ্যারন মিলার

1

দেখা যাক...

M-x describe-key [
\\    [ runs the command self-insert-command ...
M-x describe-key
\\    { runs the command self-insert-command ...

দেখে মনে হচ্ছে আমরা যুক্ত করে তাদেরকে নির্দ্বিধায় অদলবদল করতে পারি

(global-set-key (kbd "{") (lambda () (interactive) (insert "[")))

to .emacs। নির্দিষ্ট মোডের জন্য, mode-hookএগুলি বিশ্বব্যাপী সেট করার পরিবর্তে উপযুক্তগুলিতে যুক্ত করুন। সুতরাং,

(add-hook 'some-mode-hook
          (lambda ()
             (define-key some-mode-map (kbd "{") (lambda () (interactive) (insert "[")))
             ...))

আমি অনুভূতিটি পাই যদিও এটি সর্বোত্তম সমাধান নয়। যদি আপনি সেই ধনুর্বন্ধনী শৈলীর সাথে অটোপেইয়ার বা পেয়ারডিটের মতো জিনিস ব্যবহার করেন তবে অদ্ভুত জিনিসগুলি ঘটবে ™ © ©


ডাউনভোটের জন্য দুঃখিত, তবে "নিষ্পাপ" এখানে সমস্যার গভীরতাকে নিম্নরূপ দেয়। আমার উত্তর দেখুন, মুহুর্তে পোস্ট করা।
অ্যারন মিলার

অন্যদিকে, দেখে key-translation-mapমনে হচ্ছে না এটি এটিকে মোড-নির্দিষ্ট করে তোলা যায়, সুতরাং এটি কোনও আদর্শ সমাধান নয়; আন-downvoted। (এটা এখনও একটি ভাল ধারণা এই স্পষ্টভাবে কী আচরণ ওভাররাইড করতে, যদিও এর।)
হারুন মিলার

এই মুহুর্তে আমি এই অদলবদলটি কেবল ভিতরে রাখতে চাই LaTeX-mode। আমি এটি অন্যান্য পদ্ধতিতে চাই কিনা তা মূল্যায়ন করিনি। সুতরাং, বোনাস অংশ একরকম গুরুত্বপূর্ণ। আমি আরও কিছুক্ষণ অপেক্ষা করব
21:55

@ আতঙ্ক আমি আমার উত্তরটি সবেমাত্র একটি ছোটখাটো মোডের সাথে প্রতিস্থাপন করেছি যা আপনার যা করা উচিত তা করা উচিত।
অ্যারন মিলার

এই সমাধানটি হালকা এবং কার্যকর করা সহজ। তবে @ অ্যারোনমিলারের মন্তব্যের কারণে মনে হচ্ছে এই সমাধানটি (কীভাবে আমি বুঝতে ব্যর্থ হয়েছি) সমস্যার কারণ হতে পারে। হারুনের সমাধানও কাজ করে।
Dror
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.