คำถามติดแท็ก elisp

สำหรับคำถามเกี่ยวกับ Emacs Lisp เป็นภาษาเทียบกับภาษาอื่นโดยเฉพาะเมื่อเทียบกับภาษา Lisp อื่น ๆ นั่นคือสำหรับคำถาม * เกี่ยวกับภาษา * นั้น * อย่าใช้มัน * สำหรับคำถามเกี่ยวกับ * โดยใช้ * Emacs Lisp Emacs Lisp เป็นภาษาสคริปต์และการเขียนโปรแกรมที่ตัวแก้ไข Emacs สร้างขึ้น

4
ฉันจะจำลองเหตุการณ์กุญแจ Arbitary จาก Elisp ได้อย่างไร
เป็นไปได้หรือไม่ที่จะจำลองเหตุการณ์กุญแจโดยพลการจาก elisp? ฉันตระหนักถึงวิธีที่ฉันสามารถค้นหาการเชื่อมโยงสำหรับคีย์ที่กำหนดและจากนั้นเรียกคำสั่งนั้นแบบโต้ตอบ แต่จะเกิดอะไรขึ้นถ้าเหตุการณ์คีย์นั้นไม่ได้ผูกไว้กับคำสั่ง ในฐานะที่เป็นหนึ่งในตัวอย่างสิ่งที่ถ้าผมอยากจะผูกC-`จะประพฤติเช่นเดียวกับESCที่สำคัญในบริบททั้งหมด ?

1
เหตุใดนิพจน์ทั่วไปที่สร้างด้วยตัวสร้าง regex ใช้ไวยากรณ์ต่างจากนิพจน์ทั่วไปเชิงโต้ตอบ
ดังนั้นการใช้เครื่องมือสร้างนิพจน์ทั่วไป (Mx re-builder) การค้นหาบรรทัดที่ลงท้ายด้วย \ take "\\ $" ในขณะที่ค้นหาและแทนที่ด้วย regex จะใช้เวลาเพียง "\ $" ฉันคาดว่าผู้สร้าง regex จะสร้างนิพจน์ที่ใช้งานได้โดยตรงดังนั้นสิ่งที่บัญชีสำหรับความแตกต่างนี้

2
ฟังก์ชั่นสามารถเข้าถึงชื่อของพวกเขา?
ใน C มีตัวแปรเวทย์มนตร์__func__ที่เก็บชื่อฟังก์ชั่นปัจจุบัน ใน Bash มีอาร์เรย์ที่FUNCNAMEถือชื่อของฟังก์ชั่นทั้งหมดในสแตกการโทร !!! มีสิ่งที่คล้ายกันใน Emacs Lisp หรือไม่? หรือวิธีง่ายๆสำหรับฟังก์ชั่นในการเข้าถึงชื่อหรือไม่? ฉันไม่พบคำตอบในคู่มือ Emacs Lisp (บทที่ 12 เกี่ยวกับฟังก์ชั่นหรือดัชนีของตัวแปรและฟังก์ชั่นและ .. )
25 elisp  functions 

6
ฉันจะรับเค้าร่างโหมดองค์กรในบัฟเฟอร์ที่ 2 เป็นสารบัญแบบไดนามิกได้อย่างไร
เมื่อฉันแก้ไขเอกสารขนาดใหญ่ฉันต้องการดูว่าฉันอยู่ที่ไหนโดยดูโครงร่าง (ที่ไม่มีเนื้อหา) ในบัฟเฟอร์แยกต่างหาก เช่นเดียวกับเมื่อคุณอ่านไฟล์ PDF จะมี TOC ทางด้านซ้าย (ดูด้านล่าง) ในโหมด org เป็นไปได้ที่จะขยาย / ยุบเค้าร่าง แต่เป็นไปได้หรือไม่ที่จะมีโครงร่างแบบคงที่ในด้านซ้าย (หรือขวา) ในบัฟเฟอร์แยกต่างหากดังนั้นเมื่อคุณคลิกที่ส่วนหัวบัฟเฟอร์อื่นจะย้ายไปยังตำแหน่งนั้นหรือไม่? เป็นเช่นนี้ แต่สำหรับโหมดองค์กรหรือไม่ [แก้ไข]อยู่ใกล้กับสิ่งที่ฉันต้องการ ชิ้นส่วนปริศนาที่ขาดหายไปคือการข้ามไปยังตำแหน่งเดียวกันเมื่อคลิกส่วนหัว / (หรือจุดใด ๆ จริงๆ)clone-indirect-buffer สำหรับตอนนี้ฉันได้ลองเขียนโค้ดบางส่วนแล้ว: ย้ายไปยังบัฟเฟอร์ที่โคลนแล้วไปยังจุดเดียวกัน (ซิงค์ตำแหน่งของบัฟเฟอร์ทางอ้อม) (โหมดองค์กร) แต่จะไม่ทำงานหากเนื้อหาถูกยุบ หากสามารถทำให้ทำงานได้ clone-inderect-buffer เป็นคำตอบที่สมบูรณ์สำหรับสิ่งนี้ [โซลูชันการแก้ไข 2] รหัสในลิงก์ด้านบนและในคำตอบด้านล่างรวม niceley เพื่อแก้ปัญหาการกระโดดไปมา ;first call 'clone-indirect-buffer'. Then... ;This function works between buffer and it's clone. …

2
จะตรวจสอบ elisp ได้อย่างไรว่าสตริงนั้นเป็นสตริงย่อยของสตริงอื่น?
จะตรวจสอบได้อย่างไรว่าสตริงs1นั้นเป็นสตริงย่อยของสตริงอื่นs2หรือไม่? ตัวอย่างเช่น,(test-substring "f t" "df tj") --> t (test-substring "ft" "df tj") --> nil
25 elisp  string 

2
รีเซ็ตตัวแปรที่กำหนดเองเป็นค่าเริ่มต้นโดยทางโปรแกรม
ถาม:การใช้ Elisp ฉันจะรีเซ็ตตัวแปรเป็นค่าเริ่มต้นได้อย่างไรโดยไม่ทราบว่าเป็นค่าใด ฉันพยายามหาวิธีการทำเช่นนี้โดยการปรับแต่งอินเตอร์เฟสสำหรับตัวแปรที่ฉันตั้งไว้เป็นค่าเริ่มต้นในไฟล์ init ของฉันและกดC-h kตามด้วยคลิกที่ปุ่ม "เปลี่ยนกลับ ... " ที่นำเอกสารมาwidget-button-clickให้ซึ่งเห็นได้ชัดว่าไม่ได้ช่วยอะไรมาก (ในทำนองเดียวกันการC-h k RETชี้ไปที่ปุ่มจะแสดงวิธีใช้Custom-newlineซึ่งไม่ใช่สิ่งที่ฉันกำลังมองหา)

1
อัลกอริทึมแบบไหนที่ใช้?
ฉันต้องเพิ่มจำนวนเต็มเดียวในรายการที่เรียงลำดับแล้วซึ่งจะไปในตำแหน่งที่ถูกต้อง tought แรกของฉันเป็นอะไรที่ชอบ (sort (cons newelt list) #'<) แต่ให้ที่จะถูกจัดเรียงไว้แล้วเพียงหนึ่งแทรกมีความจำเป็นจริงๆซึ่งหมายถึงวิธีการแก้ปัญหานี้อาจจะไม่เหมาะสมอย่างน่ากลัวขึ้นอยู่กับอัลกอริทึมที่ใช้โดยlistsort ดังนั้นอัลกอริทึมที่sortใช้คืออะไร ฉันจะทำสิ่งต่อไปนี้ดีขึ้นไหม (let ((tail list)) ;; The first element is never less-than (while (and tail (< newelt (cadr tail))) (setq tail (cdr tail))) (setcdr tail (cons newelt (cdr tail))) list)

1
ฟังก์ชั่น 'purecopy' จำเป็นสำหรับอะไร?
ฉันเปิดดูcompile.elและฉันสังเกตเห็นสิ่งก่อสร้างนี้: (defcustom compile-command (purecopy "make -k ")) purecopyเอกสารระบุ: purecopy เป็นฟังก์ชั่นในตัวใน `ซอร์สโค้ด C ' (purecopy OBJ) ทำสำเนาของวัตถุ OBJ ในที่เก็บข้อมูลแท้ คัดลอกเนื้อหาของเวกเตอร์และเซลล์ข้อซ้ำ ๆ ซ้ำ ๆ ห้ามคัดลอกสัญลักษณ์ คัดลอกสตริงโดยไม่มีคุณสมบัติข้อความ ดังนั้นฉันคิดว่าฉันเข้าใจว่าทำไมมันอาจจำเป็นถ้าคาดว่าcompile-commandมี alist ที่ซับซ้อนที่อาจต้องแก้ไขในภายหลัง อย่างไรก็ตามมันเป็นเพียงสตริงธรรมดาทำไมจึงpurecopyจำเป็น? โดยทั่วไปเมื่อpurecopyจำเป็น?
23 elisp 

1
อะไรคือความแตกต่างระหว่าง 'และ #' ที่ด้านหน้าของสัญลักษณ์?
ฉันใหม่สำหรับ Emacs นิดหน่อย เมื่อดูการกำหนดค่าบางอย่างฉันพบว่ามีคำสั่งสองประเภทใน "add-hook" (add-hook 'LaTeX-mode-hook #'LaTeX-math-mode) และ (add-hook 'LaTeX-mode-hook 'LaTeX-math-mode) สิ่งนี้ทำให้ฉันสับสนเป็นเวลานานและฉันไม่รู้วิธีค้นหา "#" "ใน google ... ขอบคุณ
22 elisp  hooks  functions  quote 

2
คำสั่งที่ฟอร์แมต (prettifies) รหัส Elisp
สมมติว่าฉันมีฟังก์ชั่นที่มีลักษณะดังต่อไปนี้ (ตามปกติเมื่อพิมพ์เอลลิสเอาท์พุท) (defun my-example-function () (let ((a (do-something)) (b (do-something))) (setq someone me) (with-current-buffer b (do-that (or this (and that those))) (format "%s" a)))) ฉันต้องการคำสั่งที่สามารถเปลี่ยนสิ่งนั้นให้เป็นสิ่งที่มนุษย์จะเขียนเช่นดังต่อไปนี้ (defun my-example-function () (let ((a (do-something)) (b (do-something))) (setq someone me) (with-current-buffer b (do-that (or this (and that those))) (format "%s" a)))) ฉันเข้าใจว่ามีมากกว่าหนึ่งวิธีในการจัดรูปแบบโค้ด elispและมนุษย์ต่างคนทำสิ่งนั้นแตกต่างกัน นอกจากนี้ฉันเข้าใจว่ามันค่อนข้างเป็นอัตนัย …
21 elisp  formatting 


3
ทำไม lisp-interaction-mode มีอยู่และเราต้องการมันหรือไม่?
Q:ทำไมไม่lisp-interaction-modeอยู่และจะมีเหตุผลใดที่จะใช้มันแทนemacs-lisp-mode? คู่มือระบุว่าemacs-lisp-modeและlisp-interaction-modeจะเหมือนกันยกเว้นว่าผูกหลังไปC-j eval-print-last-sexpนอกเหนือจากนั้น"คำสั่งอื่นทั้งหมดในโหมด Lisp Interaction นั้นเหมือนกับในโหมด Emacs Lisp" เท่าที่ฉันสามารถบอกได้มีเพียง*scratch*บัฟเฟอร์เท่านั้นที่ใช้โหมดหลัง มันทำให้ฉันรู้สึกแปลก ๆ ว่ามีโหมดทั้งหมดที่แตกต่างจากที่อื่นโดยการกดปุ่มเพียงครั้งเดียวดังนั้นฉันจึงสันนิษฐานว่าฉันไม่มีประวัติหรือบริบทบางอย่าง ดังนั้น: ทำไมจึงlisp-interaction-modeมีอยู่? ไม่นับการทำC-jพวงกุญแจมีสถานการณ์ใดบ้างที่เหมาะสมกว่าemacs-lisp-mode? จะมีผลใด ๆ ที่ไม่คาดคิดจากการเปลี่ยน*scratch*โหมดบัฟเฟอร์เป็นemacs-lisp-modeหรือไม่? แรงจูงใจสำหรับคำถามนี้คือตอนนี้ฉันผูกกุญแจสองครั้ง (ในสองโหมด) เพื่อให้*scratch*บัฟเฟอร์ของฉันทำงานเหมือนกับบัฟเฟอร์ที่ไปที่*.elไฟล์ หากไม่มีเหตุผลเชิงปฏิบัติที่จะต้องรักษาlisp-interaction-modeฉันจะ(setq initial-major-mode 'emacs-lisp-mode)ทำมันให้สำเร็จ

2
วิธีที่เร็วกว่าในการรับ 'หมายเลขบรรทัดที่ตำแหน่ง pos' ในบัฟเฟอร์ขนาดใหญ่
ฟังก์ชั่นline-number-at-pos(เมื่อทำซ้ำประมาณ 50 ครั้ง) ทำให้เกิดการชะลอตัวลงอย่างเห็นได้ชัดในบัฟเฟอร์กึ่งใหญ่เช่น 50,000 บรรทัด - เมื่อจุดใกล้ถึงจุดสิ้นสุดของบัฟเฟอร์ เมื่อชะลอความเร็วลงฉันหมายถึงผลรวมทั้งหมดประมาณ 1.35 วินาที แทนที่จะใช้elispfunciton 100% เพื่อนับจำนวนบรรทัดและข้ามส่วนบนสุดของบัฟเฟอร์ฉันสนใจวิธีไฮบริดที่แตะเข้าไปในความสามารถ C ในตัวที่รับผิดชอบต่อหมายเลขบรรทัดที่ปรากฏบนโหมดบรรทัด หมายเลขบรรทัดที่ปรากฏบนโหมดบรรทัดเกิดขึ้นที่ความเร็วแสงโดยไม่คำนึงถึงขนาดของบัฟเฟอร์ นี่คือฟังก์ชั่นทดสอบ: (defmacro measure-time (&rest body) "Measure the time it takes to evaluate BODY. http://lists.gnu.org/archive/html/help-gnu-emacs/2008-06/msg00087.html" `(let ((time (current-time))) ,@body (message "%.06f" (float-time (time-since time))))) (measure-time (let* ( line-numbers (window-start (window-start)) (window-end (window-end))) (save-excursion (goto-char …

2
วิธีการเลือกระหว่างศูนย์และ 0 หรือ t และ 1 เมื่อตั้งค่าตัวแปรหรือเปิดใช้งานโหมด
ผมเข้าใจว่าnil, 0และ / หรือ-1จะใช้สำหรับการปิดใช้งานคุณลักษณะบางอย่างและt, 1และ / หรือ+1จะใช้สำหรับการเปิดใช้งานคุณลักษณะบางอย่าง เมื่อกำหนดตัวแปรหรือเปิด / ปิดการใช้งานโหมดรองฉันควรเลือกแบบใด ฉันได้เห็นการเปลี่ยนแปลงเหล่านี้ทั้งหมดที่ใช้ในจุดหนึ่งหรืออื่น มันทำให้ฉันสงสัยว่าจริงๆแล้วมีความแตกต่างระหว่างพวกเขาหรือไม่ ฉันเห็นว่าบางครั้งการใช้0ไม่ได้ผลสำหรับฉันในขณะที่nilไม่ มีการใช้งานที่แตกต่างกันหรือไม่?
19 elisp 

6
รับการแข่งขัน regexp ทั้งหมดในบัฟเฟอร์เป็นรายการ
ในเว็บไซต์ Code Golf Stack Exchange วันนี้ฉันพบคำตอบนี้ใน Clojure กับคำถาม "รับลิงก์ทั้งหมดบนเว็บเพจ" (->> (slurp "http://www.stroustrup.com") (re-seq #"(?:http://)?www(?:[./#\+-]\w*)+")) หากไม่มีมาโครสุดหรูมันก็แค่นี้: (re-seq #"(?:http://)?www(?:[./#\+-]\w*)+" (slurp "http://www.stroustrup.com")) ส่งคืนรายการ: ("http://www.morganstanley.com/" "http://www.cs.columbia.edu/" "http://www.cse.tamu.edu" ...) ฉันสามารถทำสิ่งที่คล้ายกันใน Emacs Lisp ได้หรือไม่ บางทีฟังก์ชั่นเช่น(re-seq regexp (buffer-string))นั้นกลับมาแล้ว'(firstmatch secondmatch thirdmatch ...)?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.