ฟังก์ชันใดในบุ๊กมาร์ก + เกี่ยวข้องกับบุ๊กมาร์กจำนวนมากที่มีชื่อเดียวกัน


1

หัวข้อค่อนข้างชัดเจน การทำซ้ำที่นี่จะอ่าน "ฟังก์ชันใดในบุ๊กมาร์ก + เกี่ยวข้องกับบุ๊กมาร์กหลายชื่อที่มีชื่อเดียวกัน" Bookmarks + เป็นการปรับปรุงเพื่อคั่นหน้าที่การใช้งานดั้งเดิมของ Emacs ฉันมีฟังก์ชั่น elisp มากมายที่บันทึกไว้ในไฟล์ในไดเรกทอรีต่าง ๆ และฉันต้องการคั่นไว้ทั้งหมดในไฟล์คั่นหน้า ฉันจะใช้ไฟล์แท็กของฉัน (สร้าง Etags) เพื่อค้นหาพวกเขาแล้วฉันจะทำบุ๊กมาร์กพวกเขาพร้อมคำอธิบายประกอบเท่ากับเอกสารประกอบการใช้งาน มีชื่อฟังก์ชันซ้ำกันในไฟล์ในไดเรกทอรีที่ต่างกัน

ฉันทำซ้ำที่จะ & เปรียบเทียบกับบุ๊คมาร์คจากไฟล์บุ๊คมาร์คที่มีอยู่ ฉันจะสร้างบุ๊กมาร์กใหม่หากไม่มีชื่อเดียวกันนี้อยู่แล้ว

ฉันได้ดูฟังก์ชันคั่นหน้า + ทั้งหมด (พบโดย Etags) และไม่พบสิ่งที่ฉันต้องการ ฉันอาจต้อง "ม้วนตัวเอง"

คำตอบ:


1

ฉันไม่แน่ใจว่าฉันเข้าใจคำถามของคุณ ใช่ด้วยบุ๊คมาร์ค +คุณสามารถมีบุ๊คมาร์คหลายรายการที่มีชื่อบุ๊คมาร์คเดียวกัน (ที่จริงแล้วคุณสามารถใช้ Vanilla Emacs ได้เช่นกัน แต่ไม่เป็นประโยชน์)

หากคุณสร้างที่คั่นหนังสืออัตโนมัติเช่นชื่อที่คั่นหน้าจะเหมือนกันกับชื่อไฟล์ที่สัมพันธ์กัน แต่ชื่อไฟล์ที่บันทึกไว้นั้นสมบูรณ์ดังนั้นคุณสามารถมีที่คั่นหนังสือที่แตกต่างกันในชื่อเดียวกันโดยชี้ไปที่ไฟล์ที่มีชื่อเดียวกัน ไดเรกทอรีที่แตกต่างกัน

เพื่อที่จะใช้ประโยชน์จากการนี้คุณต้องให้แน่ใจว่าค่าของตัวเลือกคือไม่ใช่bmkp-propertize-bookmark-names-flag nilคุณสามารถสลับตัวเลือกนี้ใน*Bookmark List*การแสดงผลโดยใช้เมนูBookmark+> >ToggleAllowing Identical Bookmark Names

คุณไม่ต้องทำอะไรเป็นพิเศษนอกจากนั้นเพื่อที่จะสามารถสร้างและใช้บุ๊กมาร์กที่มีชื่อเดียวกันได้

สตริงเอกสารของbookmark-setบอกว่า:

Plain prefix arg (`C-u'): Do not overwrite a bookmark that has the
same name as NAME, if such a bookmark already exists.  Instead,
push the new bookmark onto the bookmark alist.

ดังนั้นสำหรับสามัญ (เช่นไม่ AutoFile) บุ๊กมาใช้C-uกับC-x r mการอนุญาตให้สร้างบุ๊คมาร์คเพิ่มเติมที่มีชื่อเดียวกัน

ด้วยมาร์ค + คำสั่งbmkp-bookmark-set-confirm-overwriteที่ไม่ถูกผูกไว้เพื่อbookmark-set C-x r mสตริง doc บอกสิ่งนี้:

This is the same as `bookmark-set', except that with no prefix arg you
are asked to confirm overwriting an existing bookmark of the same
NAME.

นั่นคือถ้าคุณใช้C-x r mโดยไม่มีอาร์กิวเมนต์นำหน้าก่อนที่จะเขียนทับบุ๊กมาร์กที่มีอยู่ในชื่อเดียวกันคุณจะถูกขอให้ยืนยันการเขียนทับ ซึ่งหมายความว่าคุณไม่จำเป็นต้องกังวลเกี่ยวกับการเขียนทับโดยไม่ตั้งใจ


อัปเดตหลังจากความคิดเห็นของคุณ

นี่ไม่ใช่สถานที่สำหรับการสนทนาจริงๆ และคำถามของคุณยังไม่ชัดเจน

คุณกำลังถามว่าจะตรวจสอบว่ามีบุ๊คมาร์คที่มีอยู่ซึ่งมีชื่อและบุ๊คมาร์คของไฟล์ที่กำหนดหรือไม่? ถ้าเป็นเช่นนั้น:

(defun bookmark-name+filename-exists-p (bookmark file)
  "Return a bookmark named BOOKMARK for FILE, or nil if there is none.
BOOKMARK is a bookmark name or a bookmark record."
  (when (consp bookmark) (setq bookmark  (bookmark-name-from-full-record bookmark)))
  (catch 'bookmark-exists-p
    (dolist (bmk  bookmark-alist)
      (when (and (string= bookmark (bookmark-name-from-full-record bmk))
                 (bmkp-same-file-p file (bookmark-get-filename bmk)))
        (throw 'bookmark-exists-p bmk)))
    nil))

คุณกำลังขอรายการบุ๊คมาร์คทั้งหมดที่มีชื่อที่กำหนดหรือไม่? ถ้าเป็นเช่นนั้น:

(defun bookmarks-with-name (bname)
  "Return a list of the bookmarks with name BNAME."
  (bmkp-remove-if-not
   `(lambda (bmk) (string= ',bname (bookmark-name-from-full-record bmk)))
   bookmark-alist))

ยังไม่ชัดเจนสำหรับฉันคือการไปที่คั่นหน้าแต่ละอันที่มีชื่อเดียวกัน (ในรหัสเสียงกระเพื่อม) และทดสอบว่ามันเป็นที่คั่นหน้าสำหรับฟังก์ชั่นเสียงกระเพื่อมที่ฉันอยู่ในรหัสโดยใช้ไฟล์ etags ของฉันหรือไม่ หากสถานที่ที่ฉันอยู่ไม่ได้เป็นตัวแทนของบุ๊คมาร์คที่มีอยู่ฉันต้องการเพิ่มบุ๊คมาร์ค (ผ่านรหัสเสียงกระเพื่อม); มิฉะนั้นถ้ามันถูกแสดงโดยบุ๊คมาร์คที่มีอยู่แล้วฉันไม่ต้องการเพิ่มบุ๊คมาร์คสำหรับตำแหน่งนั้น ฉันได้เรียนที่คั่นหนังสือ + รหัสเป็นแนวทางในการทำเช่นนี้ แต่จะขอบคุณสำหรับความช่วยเหลือพิเศษใด ๆ ที่มาถึงฉัน
Alan Wehmann

ฉันจะทำเช่นนี้ซ้ำ ๆ และจะใช้การติดแท็กเพื่อมุ่งความสนใจไปที่ฟังก์ชั่นเสียงกระเพื่อมของฉันที่เป็นที่สนใจในปัจจุบัน
Alan Wehmann

คุณกำลังถามว่าจะระบุตำแหน่งไฟล์ของบุ๊คมาร์คที่ระบุไว้หรือไม่ (เช่นคุณสามารถบอกได้ว่าคุณได้คั่นหน้าไฟล์ไว้แล้วหรือไม่ถ้าใช่คำตอบคือbookmark-get-filenameถ้าไม่โปรดอธิบายให้ชัดเจน
ดึง

ความคิดปัจจุบันของฉันคือการใช้ bookmark-all-names เพื่อสร้างรายการที่คั่นหน้าใช้ 'assoc-string เพื่อค้นหาที่คั่นหน้าในรายการนั้น (และรับบันทึก) จากนั้นใช้' memq กับระเบียนนั้นเพื่อสร้างรายการที่ถูกตัดทอนและ ค้นหาชื่อบุ๊กมาร์กซ้ำ (ซ้ำ) ซ้ำจนกว่าฉันจะไม่พบข้อมูลที่ซ้ำกันอีก ในแต่ละกรณีฉันจะใช้ bookmark-get-filename เพื่อทดสอบว่าชื่อไฟล์ของที่คั่นหน้าในรายการเหมือนกันกับที่คั่นหน้าใหม่ของผู้สมัคร หากฉันหมดรายการบุ๊กมาร์กที่ตรงกันและไม่พบชื่อไฟล์ที่ตรงกันฉันจะเพิ่มบุ๊กมาร์กที่เหมาะสมตามความเหมาะสม
Alan Wehmann

อย่าใช้assoc-string, memqและไม่ชอบ ใช้ฟังก์ชั่นการเข้าถึงที่มีอยู่และเพรดิเคตจาก Bookmark + หรือ bookmark.el - นั่นคือสิ่งที่พวกเขาต้องการ ดูคำตอบที่อัปเดตสำหรับรหัสบางอย่างที่อาจช่วยได้ คำถามของคุณยังคงแปรเปลี่ยน ... กล่องโต้ตอบประเภทนี้ถาม - ตอบไม่ใช่การใช้ StackOverflow ฉันหวังว่าคุณจะมีคำตอบสำหรับคำถามเดิมของคุณในตอนนี้ ;-)
ดึง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.