สร้างเฟรมใหม่ด้วยโหมดบรรทัดเท่านั้น


13

ฉันต้องการสร้างเฟรมใหม่ที่ไม่มีอะไรนอกจากโหมดบรรทัด โดยเฉพาะอย่างยิ่งไม่ใช่บัฟเฟอร์ไฟล์

ทำไมฉันต้องการสิ่งนี้ ฉันใช้การตอกบัตรของโหมดองค์กรเพื่อกำหนดเวลาทำงาน Org-mode แสดงตัวจับเวลาสำหรับงานปัจจุบันที่ฉันกำลังทำงานในโหมดบรรทัดและอัปเดตตัวจับเวลาแบบเรียลไทม์ ฉันใช้แอพอื่นนอกเหนือจาก Emacs ดังนั้นเมื่อฉันเปลี่ยนมาใช้ (เช่นเมื่อใช้เบราว์เซอร์หรือเทอร์มินัล) ฉันยังต้องการดูตัวจับเวลาที่กำลังทำงานอยู่ ฉันคิดว่าฉันสามารถสร้างเฟรมใหม่ได้ แต่เมื่อฉันคลิกที่ตัวจับเวลาในโหมดบรรทัดไฟล์. org จะถูกเปิดในเฟรมใหม่ (ซึ่งถูกปรับขนาดแล้วเพื่อแสดงเฉพาะโหมดบรรทัด) แทนที่จะกระโดดกลับไปที่ มันอยู่ในเฟรมแรก

นี่คือลักษณะบรรทัดโหมดของฉัน (แถบสีฟ้า) - นั่นคือทั้งหมดที่ฉันต้องการในเฟรมใหม่:

ป้อนคำอธิบายรูปภาพที่นี่

(ในที่สุดฉันจะต้องหาวิธีทำให้เฟรมใหม่ปรากฏอยู่ด้านบนเสมอ แต่นั่นอยู่นอกขอบเขตของคำถามนี้)

ฉันใช้ OS X หากมีความเกี่ยวข้อง


1
เพียงแค่หัวขึ้นฉันกำลังทำงานกับ elisp และสคริปต์ macruby ที่จะแสดงข้อมูลบรรทัดโหมด org ในแถบเมนู OSX มันใช้งานได้สำหรับฉัน แต่ฉันจะพยายามห่อให้เรียบร้อย
Jordon Biondo

@JordonBiondo - ยอดเยี่ยม! ทางออกของคุณอาจดีกว่าสิ่งที่ฉันทำที่นี่ ตั้งตารอ. โปรดให้ฉันปรับปรุง
Sridhar Ratnakumar

คุณควรตอบโต้และใช้ถ้อยคำใหม่อีกครั้งหากคุณรู้สึกว่าคำตอบที่คุณพูดว่า " ยอดเยี่ยม! " เพื่อตอบคำถาม เพราะเท่าที่ฉันสามารถบอกได้ว่าพวกเขาไม่ตอบคำขอของคุณสำหรับกรอบด้วย " ไม่มีอะไรนอกจากบรรทัดโหมด " - เลย (และฉันสงสัยว่าคำตอบใด ๆ จะ) IOW หากคุณได้ผ่อนคลายเป้าหมายของคุณตั้งแต่การกำหนดคำขอดั้งเดิมของคุณโปรดลองอัปเดตคำถามตามนั้น
ดึง

ฉันเห็นด้วยหลังจากอ่านแล้วดูเหมือนว่า OP มีปัญหาเฉพาะ แต่ขอวิธีแก้ปัญหาเพียงวิธีเดียวไม่ใช่ทางออกที่ดีที่สุด
Jordon Biondo

@Drew - คุณแนะนำการแก้ไขที่เฉพาะเจาะจงหรือไม่? โซลูชันดั้งเดิมของ PythonNut ตอบคำขอต้นฉบับของฉัน โปรดทราบว่าฉันพูดว่า "โดยเฉพาะอย่างยิ่งไม่ใช่บัฟเฟอร์ไฟล์" และโซลูชันของเขา - แม้ว่าจะสร้างบัฟเฟอร์ว่างเปล่า - ไม่ได้นำไปสู่บัฟเฟอร์ไฟล์ที่ปรากฏในเฟรมใหม่
Sridhar Ratnakumar

คำตอบ:


7

การขยายคำตอบของ Jorgen Schäferด้วย คำแนะนำของ Matthew Piziakจะสร้างตัวอย่างต่อไปนี้:

(with-current-buffer (generate-new-buffer "*empty*")
  (make-frame '((minibuffer . nil)
                 (unsplittable . t)
                 (buffer-predicate . (lambda (x) nil))
                 (height . 2)
                 (left-fringe . 0)
                 (right-fringe . 0)
                 (tool-bar-lines . 0)
                 (menu-bar-lines . 0)))
  (set-window-dedicated-p
    (get-buffer-window (current-buffer) t) t))

เท่าที่ฉันสามารถบอกได้สิ่งนี้ล็อคหน้าต่างอย่างถูกต้องกับบัฟเฟอร์ที่ว่างเปล่า ความพยายามที่จะสลับไปยังบัฟเฟอร์ที่แตกต่างกันจะเปิดบัฟเฟอร์ในหน้าต่างที่มีอยู่ในเฟรมหลัก


ยอดเยี่ยมฉันได้ตรวจสอบสิ่งนี้เพื่อใช้งานแล้ว มีวิธีใดที่จะทำให้เฟรมใหม่สืบทอดขนาดตัวอักษร (และชื่อตัวอักษร) ของเฟรมหลักได้ นอกจากนี้ชิ้นส่วนเฉพาะบัฟเฟอร์ที่ซ้ำซ้อนของบรรทัดโหมด*empty* All L1 (Fundamental)- สามารถลบออกได้หรือไม่? นี่คือลักษณะของฉัน: i.imgur.com/iOLw57c.png
Sridhar Ratnakumar

@SridharRatnakumar โชคดีที่การดึงข้อมูลบรรทัดโหมดพิเศษนั้นเป็นเรื่องเล็กน้อย ฉันได้แก้ไขคำตอบของฉันเพื่อรวมสิ่งนั้น ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดยการรักษาตัวอักษร? บัฟเฟอร์ไม่ว่างเปล่าหรือ
PythonNut

ฉันอ้างถึงคุณสมบัติแบบอักษรของข้อความในโหมดบรรทัด (ไม่ใช่บัฟเฟอร์ว่าง)
Sridhar Ratnakumar

อ่าโค้ดในภายหลังของคุณจะล้างบรรทัดโหมดของเฟรมหลักด้วย! หากสิ่งนี้เป็นไปไม่ได้เราจะยกเลิกการเปลี่ยนแปลงนั้นและฉันจะยอมรับคำตอบของคุณ
Sridhar Ratnakumar

ฉันเพิ่งสังเกตเห็นเช่นกัน ฉันแก้ไขมันแล้ว แบบอักษรของบรรทัดโหมดไม่เปลี่ยนแปลงเมื่อฉันทำดังนั้นฉันไม่แน่ใจว่าเกิดอะไรขึ้น
PythonNut

5

นี่คือสิ่งที่ดีที่สุดที่ฉันสามารถทำได้:

(with-current-buffer (generate-new-buffer "*empty*")
  (make-frame '((minibuffer . nil)
                (unsplittable . t)
                (buffer-predicate . (lambda (x) nil))
                (height . 2)
                (left-fringe . 0)
                (right-fringe . 0)
                (tool-bar-lines . 0)
                (menu-bar-lines . 0))))

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


มันไม่ทำงานตามที่คาดไว้ บัฟเฟอร์ยังคงเปิดใช้งานในเฟรมใหม่ นี่คือภาพเคลื่อนไหว gif ที่แสดงตัวอย่าง: i.imgur.com/07Q3tcW.gifv
Sridhar Ratnakumar

2
การใช้display-buffer-alistอาจเป็นวิธีแก้ปัญหานี้
Kaushal Modi

buffer-predicateผมไม่ทราบว่าทำไมองค์กรของการใช้งานที่นี่ไม่ได้เป็นไปตาม การใช้display-buffer-alistอาจเป็นแนวคิด แต่ฉันไม่ทราบวิธีใช้เพื่อป้องกันเฟรมเฉพาะจากการใช้งาน
Jorgen Schäfer

2
สามารถแก้ไขได้ด้วยset-window-dedicated-pหรือไม่
Matthew Piziak

1
buffer-predicateเป็นไปตามข้อมูลที่ใช้โดยเฉพาะother-bufferฟังก์ชั่นคือมันไม่ได้ป้องกันการฟังก์ชั่นอื่น ๆ จากการแสดงบัฟเฟอร์ใด ๆ ในกรอบ
politza

3

อีกวิธีหนึ่งสำหรับนาฬิกา org ใน osx

กล่องขนาดเล็กในแถบสถานะ มันเปลี่ยนเป็นสีแดงเมื่อคุณไม่ได้นาฬิกา

ภาพประกอบสำหรับกล่องสีแดงดูที่หน้า GitHub

https://github.com/koddo/org-clock-statusbar-app


1
ฉันไปช้าและไม่ตอบคำถามที่แน่นอน แต่ฉันเสนอทางเลือกที่เหมาะกับใครบางคน
koddo

3

โซลูชั่นสำหรับการแสดงข้อมูลนาฬิกาในแถบเมนู OSX

นี่คือทางเลือกอื่นสำหรับปัญหาที่คุณระบุ:

ฉันใช้แอพอื่นนอกเหนือจาก Emacs ดังนั้นเมื่อฉันเปลี่ยนมาใช้ (เช่นเมื่อใช้เบราว์เซอร์หรือเทอร์มินัล) ฉันยังต้องการดูตัวจับเวลาที่กำลังทำงานอยู่

คุณสามารถใช้สิ่งนี้เพื่อแสดงข้อมูลจากนาฬิกาใน osx menubar ซึ่งคุณควรจะเห็นได้ตลอดเวลา

https://github.com/jordonbiondo/osx-org-clock-menubarพร้อมใช้งานบน MELPA

โปรดทราบว่าสิ่งนี้ต้องใช้ macruby

มันดูเหมือนอะไรในขณะที่โอเวอร์คล็อก

ป้อนคำอธิบายรูปภาพที่นี่


1
การติดตั้งอย่างง่ายที่ไม่ต้องใช้ macruby สามารถทำได้ด้วยemacsclient -e "(org-clock-get-clocked-time)"และ bitbar: getbitbar.com
mankoff

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