আমি টাইপ করার সাথে সাথে ডুবেল ক্যাপিটালগুলি স্থির করছি


23

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

THere's nothing in there. DEfinitely not a body.

সাধারণত আমি যা করি তা হিট হয় M-b M-c(ধরে নিলাম আমি এটি তত্ক্ষণাত স্পষ্ট করে ফেলেছি) তবে আমি এতে কিছুটা ক্লান্ত হয়ে পড়ছি।

আমি কীভাবে ইম্যাক্সটি আমার জন্য স্বয়ংক্রিয়ভাবে এটি ঠিক করতে পারি?

এটি হ'ল আমি ইমাকসকে সনাক্ত করতে চাই যখন আমি একটি শব্দ টাইপ করি যা দুটি বড় হাতের অক্ষর দিয়ে শুরু হয় যার পরে কমপক্ষে একটি ছোট হাতের অক্ষর থাকে এবং তা স্বয়ংক্রিয়ভাবে ঠিক করে দেওয়া হয়।

উত্তর:


19

এখানে একটি ফাংশন যা ডিওবল ক্যাপিটালগুলিকে একক রাজধানীতে রূপান্তর করবে। আমি মূলত এটিতে যুক্ত করার পরামর্শ দিয়েছি post-self-insert-hook, তবে নীচে একটি গৌরবযুক্ত নাবালিক মোডের জন্য একটি বিকল্প রয়েছে যাতে আপনি যখন সত্যই এটি চান তখন কেবল সেই হুকটিতে যুক্ত করতে পারেন:

(defun dcaps-to-scaps ()
  "Convert word in DOuble CApitals to Single Capitals."
  (interactive)
  (and (= ?w (char-syntax (char-before)))
       (save-excursion
         (and (if (called-interactively-p)
                  (skip-syntax-backward "w")
                (= -3 (skip-syntax-backward "w")))
              (let (case-fold-search)
                (looking-at "\\b[[:upper:]]\\{2\\}[[:lower:]]"))
              (capitalize-word 1)))))

(add-hook 'post-self-insert-hook #'dcaps-to-scaps nil 'local)

এবং গৌণ মোড সংজ্ঞা:

(define-minor-mode dubcaps-mode
  "Toggle `dubcaps-mode'.  Converts words in DOuble CApitals to
Single Capitals as you type."
  :init-value nil
  :lighter (" DC")
  (if dubcaps-mode
      (add-hook 'post-self-insert-hook #'dcaps-to-scaps nil 'local)
    (remove-hook 'post-self-insert-hook #'dcaps-to-scaps 'local)))

এই সংস্করণটি ব্যবহার করে এটির মূল্য কী?

  • সহজ: কেবল এটি ম্যানুয়ালি বা একটি মোড হুক এ চালু / বন্ধ করুন;
  • কী বাইন্ডিংগুলিতে কোনও পরিবর্তন দরকার নেই, সুতরাং আপনি অন্য কোনও কার্যকারিতা হারাচ্ছেন না।

এমনকি আপনি এটি যুক্ত করার পরেও post-self-insert-hookওভারহেড প্রায় অস্তিত্বহীন, কমপক্ষে কিছু সাধারণ বেঞ্চমার্কিং অনুসারে। আমার মেশিনে, 10,000 টি পুনরাবৃত্তির সাথে আমি প্রতিটি হাস্যকরভাবে সরল ফর্ম এবং dcaps-to-scapsফাংশনটি দিয়ে এখানে যা পেয়েছি তা এখানে :

(benchmark-run-compiled 10000 (+ 1 1))          ; => .001 to .003 -ish
(benchmark-run-compiled 10000 (dcaps-to-scaps)) ; => .003 to .006 -ish

সুতরাং, হ্যাঁ, এটি 1 + 1 যোগ করার চেয়ে ধীর, তবে নিখুঁত পদে আপনি কখনই লক্ষ্য করবেন না।


আপনি ব্যবহার করতে পারেন looking-at-p, যা ম্যাচের ডেটা একেবারেই সেট করে না (এটি আপনার প্রয়োজন হয় না বা এটি এখানে ব্যবহার না করার কারণে এটি ঠিক আছে)।
ইয়ংফ্রোগ

আরও কয়েকটি মন্তব্য, বেশিরভাগ গুরুত্বহীন (তবে আমি আপনার উত্তরটিকে প্রাধান্য দিয়েছি তাই আমি অবদান রাখতে চাই; পি): উইলের ব্যবহারের forward-wordসাথে ভাল subword-modeব্যবহার (char-syntax (char-before))হবে না (আমার ধারণা) বৈশিষ্ট্য সহ কোনও সিনট্যাক্স শ্রেণি সেট উপেক্ষা করুন (বিকল্প সমাধান (syntax-after (1- (point)):) , এবং (সর্বশেষে তবে অন্তত নয়) উচ্চারণযুক্ত অক্ষরগুলি (যেমন "findমিন্সার", ফরাসি ভাষায়) খুঁজে পাবেন না
ইয়ংফ্রোগ

@ ইয়ংফ্রোগ: forward-wordইস্যুটি মোকাবেলা করতে আপডেট হয়েছে এবং উচ্চারণকৃত রাজধানীগুলি মোকাবেলায় রেজিএক্সপ্রেস পরিবর্তন করেছে।
ড্যান

বিশেষত প্রথম উদাহরণে andবেশি পছন্দ করার কোনও কারণ আছে কি when?
ক্লাইমেন্ট

@ ক্লাইমেন্ট: andসংক্ষিপ্ত প্রচারিত, সুতরাং যুক্তি whenএখানে কাজ করে । আমি নিশ্চিত না যে অন্যটির বিপরীতে কোনও ব্যবহার সম্পর্কে সর্বোত্তম অনুশীলন রয়েছে কিনা তবে মনে হচ্ছে এটি এই সাইটে একটি ভাল প্রশ্ন করবে (আমি যেভাবেই হোক না কেন)
ড্যান

8

আমার পক্ষপাত কেবল একটি নতুন ফাংশন কি স্বাভাবিক নয় যে তৈরি করা self-insert-commandপ্লাস করতে হবে আরো

এখানে কয়েকটি কারণ রয়েছে:

  • কোন বৃহত মোডে এই স্বতঃ-সংশোধন করার ক্ষমতা থাকতে হবে তার সর্বোত্তম নিয়ন্ত্রণ। এই ব্যবহারের ক্ষেত্রে, এটি হতে পারে শুধুমাত্র পাঠ্য মোড পছন্দ org-mode, text-modeইত্যাদি
  • প্রশ্নে অনুরোধ করা সংশোধন প্রকারের জন্য, ব্যবহারকারী সাধারণত শব্দের পরে আঘাত SPCবা RETবা .কী ব্যবহার করবেন । সুতরাং এর মতো কিছু ব্যবহার করা post-self-insert-hookওভারকিল হতে পারে এবং প্রতিবার যে কোনও কী কী চাপলে আমরা সেই অতিরিক্ত প্রক্রিয়াজাতকরণ করব।

সুতরাং নীচের প্রস্তাবিত সমাধানটি এই ফাংশনটিকে কেবল SPCকী org-mode-map(যা কোণার ক্ষেত্রে উপেক্ষা করবে যেখানে শব্দটি একটি লাইনের শেষ শব্দ হতে পারে) দিয়ে আবদ্ধ করে । প্রয়োজনে ব্যবহারকারী একই ধরণের রেপার ফাংশনগুলিকে আরও কীগুলিতে আবদ্ধ করতে পারে।

(defun space-plus-more ()
  (interactive)
  (save-excursion
    (backward-word 1)
    (let ((case-fold-search))
      (when (looking-at-p "[A-Z]\\{2\\}.*?[a-z]+.*?\\b")
        (capitalize-word 1))))
  (self-insert-command 1))

(define-key org-mode-map (kbd "<SPC>") #'space-plus-more)

এটি একটি আকর্ষণীয় elisp অনুশীলন :)

আমি ব্যক্তিগতভাবে এটির সাথে বাঁধাই করতে চাই না RETতবে আমি ডিফল্ট বাইন্ডিংগুলি org-modeএবং সম্ভবত অন্যান্য বড় মোডগুলিও হারাব । কিন্তু এটা সম্পর্কে জানতে আকর্ষণীয় ছিল eltএবং this-command-keys-vector

(defun my/fix-double-caps ()
  (interactive)
  (save-excursion
    (backward-word 1)
    (let ((case-fold-search))
      (when (looking-at-p "[A-Z]\\{2\\}.*?[a-z]+.*?\\b")
        (capitalize-word 1))))
  (if (eq 13 (elt (this-command-keys-vector) 0)) ; detect RET
      (newline)
    (self-insert-command 1)))

(let ((maps-list (list org-mode-map
                       text-mode-map))
      (keys-list (list "<SPC>" "<RET>" ".")))
  (dolist (map maps-list)
    (dolist (key keys-list)
      (define-key map (kbd key) #'my/fix-double-caps))))

ওহ হ্যাঁ, এটি পাঠ্য-উত্পন্ন মোডে সীমাবদ্ধ করা অবশ্যই একটি ভাল ধারণা। :)
মালবারবা

@ মালবারবা আপনি কি প্রগ-মোড থেকে প্রাপ্ত মোডগুলির জন্য স্ট্রিংগুলিতে এই আচরণটি চান না?
ইয়ংফ্রোগ

@ ইউংফ্রোগ নিশ্চিত, তবে তারপরে এটি পরীক্ষা করে দেখতে হবে যে এটি আসলে একটি স্ট্রিংয়ের ভিতরে রয়েছে, অন্যথায় এটি ঠিক পথে চলে যাবে।
মালবারবা

0

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

প্রথমত, আমি এমন জিনিস পছন্দ করি না যা নিঃশব্দে আমার পাঠ্য পরিবর্তন করে (মূলধন ইত্যাদি), আপনি যদি শব্দটি টাইপ করতে চান তবে IBufferআমি এই জাতীয় "সংশোধনকারী" একটি ভুল উপায় বলে মনে করি), তাই আমি দুটি জিনিসকে পরামর্শ দিই:

প্রথমে "স্টিকি কী" বৈশিষ্ট্যটি সক্ষম করার চেষ্টা করুন। এটি প্রথমে অদ্ভুত বলে মনে হতে পারে তবে আমি এটি সর্বদা ব্যবহার করি। এই বৈশিষ্ট্যটি ওএস / ডেস্কটপ পরিবেশ পর্যায়ে উপলভ্য, এটি ইমাস স্টাফ নয় stuff এই জিনিসটি সক্ষম হয়ে গেলে আপনি প্রথমে টিপুন ⇧ Shiftএবং তারপরে আপনি অন্যটি কী টিপুন যা আপনি মূলধন করতে চান। এইভাবে আপনার সমস্যা এমনকি উত্থাপিত হতে পারে না, কেবলমাত্র একটি অক্ষর এই ক্রমিক পদ্ধতিতে মূলধন করা হয়! এটি আপনার হাতের ⇧ Shiftচাবিটি ধরে রাখার কাজও হ্রাস করে । আমি মনে করি এটি এখন টাইপ করা সহজ।

দ্বিতীয়ত, আপনি এখনও ⇧ Shiftযখন এটি প্রয়োজনীয় মনে করেন তখন আপনি সাধারণত কী ব্যবহার করতে পারেন (এটি ধরে রেখেছেন) তবে আমি আপনাকে ফিক্স ওয়ার্ড নামে একটি ইমাস প্যাকেজ প্রস্তাব করতে চাই । এমনকি যদি আপনি "স্টিকি কী" পছন্দ না করেন তবে আপনি শব্দগুলি তাদের যথাযথ আকারগুলিতে সহজেই সংশোধন করতে পারেন এবং আপনি কার্সারের অকার্যকর গতিবিধি ছাড়াই পরপর কয়েকটি শব্দ সংশোধন করতে পারেন। একবার চেষ্টা করে দেখুন, আমি সব সময় এটি ব্যবহার করি। (আপনি যদি বেশ কয়েকটি শব্দের প্রবেশ করে থাকেন এবং আপনাকে যে শব্দটি মূলধন করতে হবে সেই শব্দটি মাঝখানে কোথাও রয়েছে তবে জিনিসগুলি সংশোধন করা এখনও কঠিন))

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