1 คะแนน โดย GN⁺ 5 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การตัดและวางทั่วไปแบ่งการย้ายข้อความออกเป็นสองงาน ทำให้ Undo ได้ไม่สมบูรณ์ และยังเปลี่ยน flow ของเอกสารโดยไม่จำเป็น
  • แม้จะยกเลิกการตัดได้ แต่ เนื้อหาใน clipboard ที่ถูกเขียนทับจะไม่ถูกกู้คืน และแม้ใช้ clipboard manager ก็ไม่สามารถย้อนการเปลี่ยนแปลงทั้งหมดที่เกิดจากการกดปุ่มครั้งเดียวได้
  • เมื่อข้อความหายไปทันที เอกสารจะเกิด reflow ทำให้ต้องหาตำแหน่งที่จะวางใหม่ และหากต้องการยกเลิกการย้ายทั้งหมด ต้อง Undo อย่างน้อยสองครั้ง
  • Ghost Cut ของ Ishmael ซึ่งเป็นโปรแกรมแก้ไขนิยาย จะทำให้ selection จางลงและไม่ active ด้วย Ctrl+X จากนั้นเมื่อวาง จึงลบออกจากตำแหน่งเดิมและย้ายไปตำแหน่งใหม่เป็น งาน atomic งานเดียว
  • Ghost Cut ไม่เขียนทับ clipboard และสามารถย้อนการย้ายทั้งหมดได้ในครั้งเดียว แต่ถ้าต้องการตัดแบบเดิม ต้องคัดลอกแล้วกด Backspace

พฤติกรรมของการตัด/วางแบบเดิม

  • การตัด/วางคือการรวมกันของ การตัด ที่ลบข้อความที่เลือกออกจากเอกสารและใส่ไว้ใน clipboard กับ การวาง ที่แทรกข้อความนั้นในตำแหน่งอื่น
  • แม้จะถูกมองว่าเป็นงานเดียวในการย้ายข้อความจากตำแหน่งหนึ่งไปอีกตำแหน่งหนึ่ง แต่ใน editor จริงจะถูกจัดการเป็นสองงานที่แยกจากกัน

ข้อบกพร่องสามประการของการตัดแบบเดิม

  • Undo ไม่สามารถกู้คืน clipboard ได้

    • หลังตัดข้อความ หากกด Ctrl+Z หรือ Command+Z ข้อความในเอกสารจะถูกกู้คืน แต่ เนื้อหาใน clipboard ที่ถูกเขียนทับจะไม่กลับมา
    • แม้จะใช้ clipboard manager ก็ไม่ได้แปลว่าย้อนการเปลี่ยนแปลงทั้งหมดที่เกิดจากการกดปุ่มเดียวได้อย่างสมบูรณ์
  • การลบต้นฉบับทำให้เอกสารถูกจัดวางใหม่ทันที

    • ทันทีที่ตัดข้อความ เนื้อหาที่เหลือจะถูกดึงเข้ามา และบรรทัดกับตำแหน่งในเอกสารจะถูกจัดวางใหม่
    • การตัด/วางส่วนใหญ่มีเป้าหมายเพื่อย้ายข้อความ แต่หน้าจอกลับเปลี่ยนไปก่อนที่จะหาจุดวาง ทำให้ต้องค้นหาตำแหน่งใหม่
    • ภาระนี้อาจไม่มาก แต่ทำให้เกิด ต้นทุนทางการรับรู้ ที่ไม่จำเป็น
  • การย้ายไม่ได้ถูกจัดการเป็นงาน atomic

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

วิธีการทำงานของ Ghost Cut

  • ใน Ishmael เมื่อกด Ctrl+X ข้อความที่เลือกจะจางลงและอยู่ใน สถานะไม่ active แต่ยังคงอยู่ในเอกสาร
    • พื้นที่ดังกล่าวคลิกไม่ได้ และเคอร์เซอร์จะข้ามไป
    • ณ จุดนี้จะยังไม่มีอะไรถูกบันทึกลง clipboard และยังไม่มีงานให้ยกเลิก
    • หากกด Escape ข้อความจะกลับสู่สถานะที่แก้ไขได้อีกครั้ง
  • เมื่อกด Ctrl+V หรือ Command+V จะลบพื้นที่ที่จางลงออกจากตำแหน่งเดิมและย้ายไปยังตำแหน่งเคอร์เซอร์ปัจจุบัน
    • การย้ายทั้งหมดเป็น งาน atomic งานเดียว จึงย้อนกลับได้ด้วยการ Undo เพียงครั้งเดียว
    • คล้ายกับวิธีที่ Excel แสดงเซลล์ที่ถูกตัดให้จางลง แต่ใน text editor แทบไม่พบวิธีแบบเดียวกัน
  • หากต้องการพฤติกรรมการตัดแบบเดิม ต้องคัดลอกด้วย Ctrl+C หรือ Command+C แล้วลบต้นฉบับด้วย Backspace
  • code editor มีปัญหา reflow ของเอกสารน้อยกว่า จึงมีความจำเป็นค่อนข้างต่ำ แต่ถ้ามีให้ใช้ใน VSCode ก็น่าเปิดใช้งาน

1 ความคิดเห็น

 
GN⁺ 5 시간 전
ความคิดเห็นจาก Hacker News
  • อยากให้ไม่ไปรบกวน การเลือก/วางของ X11 ตอนนี้ถ้าจะใช้แบบเดิม ต้องลุ้นทุกครั้งว่าต้องกด Shift หรือไม่
    วิธี เลือก → Ctrl+C → คลิก → Ctrl+V ที่บังคับให้ใช้ทั้งเมาส์และคีย์บอร์ดในการคัดลอกและวางนั้นป่าเถื่อน และแอปสมัยใหม่กำลังทำลายสิ่งที่ X11 เคยทำไว้ถูกต้องแล้ว

  • การตัดและวางประกอบด้วยสามการกระทำ โดยการตัดประกอบด้วยการคัดลอกและการลบ การ undo ไม่ได้ย้อนการคัดลอกฉันใด ก็ไม่ควรย้อนเนื้อหาในคลิปบอร์ดของการตัดฉันนั้น และผมใช้วิธีตัดแล้ว undo จากนั้นวางหลายครั้งอยู่ทุกวัน
    สงสัยว่าใน Ghost Cut ถ้าวางหลายครั้งควรได้อะไรออกมา, เพื่อ rollback แล้วตัวแก้ไขต้องอ่านคลิปบอร์ดทั้งที่ยังไม่ได้วางหรือไม่, และถ้ามี secret key อยู่ จะถูกเปิดเผยให้ส่วนขยายอย่าง Copilot หรือไม่
    การตัดใน file explorer จริง ๆ แล้วคือ การย้าย ที่ระบุจุดต้นทางและปลายทางตามลำดับ ไม่มีคลิปบอร์ดของระบบไฟล์ และแทบไม่มีกรณีต้องวางในหลายตำแหน่ง ไม่ได้บอกว่า semantics ที่เสนอนั้นแย่ แต่ฟีเจอร์แยกต่างหากที่ใช้คีย์ลัดอีกชุด ทำให้ข้อความจางลงแล้วจึงย้ายแบบ atomic น่าจะสะอาดกว่า

    • การตัดและวางควรเป็น การกระทำแบบ atomic เพียงหนึ่งเดียว ถ้าอยากวางหลายครั้งก็ควรคัดลอก
      การ undo การตัดแต่ไม่ย้อน side effect เป็นข้อบกพร่องโดยพื้นฐาน และ undo ควรกู้ระบบกลับสู่สถานะก่อนหน้า ไม่ใช่ถอยหลังแค่บางขั้นตามเงื่อนไข
    • การเสนอ ฟังก์ชันย้ายแบบ atomic ที่สะดวกใน text editor นั้นสมเหตุสมผล แต่โดยส่วนตัวไม่ได้รู้สึกว่าจำเป็นมาก
    • วิธีทำให้ข้อความจางลงแล้วค่อยย้ายไปยังตำแหน่งที่ต้องการ แทบจะเหมือนกับ drag and drop ของ macOS
    • ไม่เข้าใจว่าทำไม flow ใน macOS Finder ที่คัดลอกไฟล์ด้วย ⌘+C แล้วไปที่ปลายทางใช้ ⌘+⌥+V เพื่อย้าย หรือ ⌘+V เพื่อคัดลอก ถึงถูกวิจารณ์ เพราะเป็นการตัดสินใจการกระทำที่ปลายทาง จึงเป็นธรรมชาติที่สุด
      Windows ก็ทำให้ไฟล์ที่ถูกตัดดูจางลงและย้ายเมื่อวาง เพื่อป้องกันไฟล์สูญหาย แต่ UX ดี ๆ แบบนี้กลับไม่ได้รับการยอมรับมากพอ
    • ถ้าวางหลายครั้ง ก็รู้สึกว่าแท้จริงแล้วตั้งใจจะคัดลอกหรือเปล่า ไม่มี mental model ใดถูกต้องอย่างสมบูรณ์ และถ้าการตัดคือการคัดลอกกับลบ ก็แค่คัดลอกแล้วลบเองก็ได้ ส่วนใน Vim กับ Emacs ก็แค่ลบไปเลย
  • Ghost Cut แทบจะเหมือนการตัด/วางของ Excel และอาจไม่ใช้คลิปบอร์ดเลยก็ได้ ซอฟต์แวร์ทั่วไปมองว่านี่คือการคัดลอก·วางที่เพิ่มการลบเข้าไป แต่ผู้เขียนและ Excel มองว่าเป็นการย้ายเนื้อหาภายในเอกสาร
    Ghost Cut มีข้อจำกัดว่าปลายทางต้องมีเพียงหนึ่งเดียวและต้องอยู่ในโปรแกรมหรือเอกสารเดียวกัน ถึงอย่างนั้น ถ้าการตัดแบบเดิมสุดท้ายก็เป็นเพียงรูปแบบหนึ่งของการคัดลอก·วาง ก็สามารถทำผลลัพธ์เดียวกันด้วย คัดลอกแล้ว Backspace ได้ ดังนั้นการเปลี่ยนเป็น Ghost Cut ก็ดูไม่ได้สูญเสียอะไรมาก

    • ใน IDE มักใช้ตัดโดยวางเคอร์เซอร์ไว้ตรงไหนก็ได้ในบรรทัดโดยไม่เลือกช่วง เพื่อเป็น การลบทั้งบรรทัด เป็นคีย์ลัดที่กดด้วยมือซ้ายได้สะดวก แต่ Ghost Cut จะทำลายการใช้งานแบบนี้
  • UX ของการตัดแบบพื้นฐานไม่ตรงกับ mental model ส่วนตัว ของผู้เขียน ไม่ใช่ข้อบกพร่อง ถ้าตัดผิดโดยไม่ได้ตั้งใจ ส่วนใหญ่ก็คงตั้งใจจะคัดลอก ดังนั้นการออกแบบให้ข้อความยังคงอยู่ในคลิปบอร์ดจึงสมเหตุสมผล
    คนส่วนใหญ่เข้าใจ undo ว่าเป็นการยกเลิกการเปลี่ยนแปลงของไฟล์ ไม่ได้มองว่าเป็นการย้อนทั้งสถานะของไฟล์และระบบปฏิบัติการ การตัดที่ตั้งค่าได้ก็น่าพิจารณา แต่เป็นทางเลือกที่เหมาะกับผู้ใช้ส่วนน้อยมากกว่าคนส่วนใหญ่

    • ไม่ได้มองพฤติกรรมนี้ว่าเป็นข้อบกพร่อง แต่เคารพที่ชี้ข้อเสียและเสนอทางเลือก ผมใช้ พฤติกรรมคงคลิปบอร์ดไว้ ค่อนข้างบ่อย คือการตัดอะไรบางอย่างใส่คลิปบอร์ด แล้ว undo เฉพาะการเปลี่ยนแปลง จากนั้นนำเนื้อหานั้นไปใช้
    • ชอบวิธีตัดหรือคัดลอกข้อความ แล้ว undo ย้อนกลับไปสองสามขั้น ก่อนนำไปวางตำแหน่งใหม่ ถ้าทำตามข้อเสนอ ก็จะมี ขั้นตอนกลาง เพิ่ม เช่น ต้องวางลงไฟล์ชั่วคราวก่อน undo
  • การตัดคือการ ย้ายข้อความจากแอปไปยังคลิปบอร์ด ซึ่งเป็นแอปพลิเคชันแยกต่างหาก เหมือนที่เราไม่คาดว่าเมื่อแก้ไขแอป A แล้ว undo ในแอป B จะทำให้ A เปลี่ยนกลับไปด้วย ก็ไม่คาดว่า undo จะกระทบคลิปบอร์ด
    Ghost Cut คล้ายกับ Excel และด้วยเหตุนี้จึงทำให้สับสนอยู่บ่อย ๆ ใน Excel บางครั้งเมื่อคัดลอกเซลล์แล้วแก้ไข จากนั้นจะวาง กลับพบว่าสิ่งที่คัดลอกไม่ใช่ค่าจริง แต่เป็นการอ้างอิงช่วงที่เลือก และเมื่อช่วงนั้นเปลี่ยนหรือถูก undo ก็วางอะไรไม่ได้เลย

  • ถ้าออกแบบตั้งแต่ต้น คำวิจารณ์ต่อการตัด/วางในปัจจุบันก็สมเหตุสมผล แต่การตัดและวางเป็นสองการกระทำ ดังนั้นข้ออ้างว่าควร undo ทั้งสองอย่างด้วยการ undo ครั้งเดียวจึงฟังดูแปลก
    คล้ายกับ ตัวเลือกแบบ RISC/CISC ว่าคำสั่งคือ CUTANDPASTE คำสั่งเดียว หรือเป็น CUT กับ PASTE สองคำสั่ง

  • ไม่ควรเปลี่ยนพฤติกรรมที่ผู้ใช้คาดหวัง Excel ทำคล้าย ๆ กัน แต่เพราะไม่ได้เป็นไปตามที่ต้องการจึงไม่สะดวกมาก
    การตัดควรใส่ลงคลิปบอร์ดทันทีเพื่อให้วางในโปรแกรมอื่นได้ด้วย และไม่คุ้มที่จะทำลายความคาดหวังและ flow ปกติของผู้ใช้ส่วนใหญ่เพื่อปรับปรุงให้คนส่วนน้อย

    • ข้อจำกัดปลายทางมีมากเกินไป เช่น ข้อความที่ยังไม่ได้วางจะยังจางค้างอยู่หรือไม่, ถ้าคัดลอกข้อความใหม่จากแอปอื่น ระหว่างข้อความที่จางกับเนื้อหาใหม่ในคลิปบอร์ดจะวางอะไร
      หาก Ctrl+X ไม่แตะคลิปบอร์ด ก็จะวางในโปรแกรมอื่นไม่ได้ด้วย ประโยชน์ที่ได้เล็กเกินไปเมื่อเทียบกับปัญหาที่เกิดขึ้นเมื่อหลุดจาก flow ในอุดมคติ
  • มุมมองแบบนี้จะคิดก็ได้ แต่เห็นด้วยยากกว่า อยากให้แก้ การดักคัดลอก ก่อนดีกว่า คือเวลาตั้งใจจะคัดลอกรายการที่เลือก แต่เว็บหรือแอปกลับ “ช่วย” ใส่เนื้อหาอื่นที่ต่างไปอย่างสิ้นเชิง
    เวลา copy URL ก็ไม่อยากให้เบราว์เซอร์เติม https:// เองตามใจ

  • Windows Explorer ก็ทำงานคล้ายกันเมื่อ cut ไฟล์ แต่ก็ บันทึกลงคลิปบอร์ดด้วย
    Ghost Cut ก็แค่พังในแบบที่ต่างจากพฤติกรรมเดิม แต่ตรงกับรสนิยมของผู้เขียน ถึงอย่างนั้นก็เป็นแนวคิดที่น่าสนใจ ทำให้ลองคิดว่าถ้า cut/paste ไม่ได้ถูกสร้างเป็นฟังก์ชันทั้งระบบและข้ามแอป แอปต่าง ๆ อาจพัฒนาไปอย่างไร

  • คิดว่าน่าจะไม่ชอบวิธีนี้ แอปที่ทำงานคล้ายกันอย่าง Excel เป็นแอปที่เกลียดที่สุดสำหรับการตัด·คัดลอก·วาง

    • ผมมองว่า Excel ถูกออกแบบมาได้ดีมากสำหรับผู้ใช้ส่วนใหญ่ แม้จะมีข้อบกพร่องบางอย่าง เพราะไม่ใช่แค่เนื้อหาเซลล์ แต่ยังมี การอ้างอิงเซลล์ ด้วย ทำให้ cut กับ copy ทำงานต่างกันอย่างละเอียดอ่อน
      การตัดโดยมากเป็นการย้ายแบบ atomic ที่จบด้วยการวางครั้งเดียว ดังนั้นการอ้างอิงที่เกี่ยวข้องทั้งหมดจะถูกอัปเดต ไม่ว่าจะอยู่ในหรือนอกช่วงที่ย้าย และไม่ว่าจะเป็น relative หรือ absolute reference ก็ตาม นี่คือเหตุผลที่หลังวางแล้วเครื่องหมายแสดงผลหายไปและวางซ้ำไม่ได้
      ในทางกลับกัน เมื่อคัดลอก จะอัปเดตเฉพาะ relative reference ระหว่างเซลล์ที่ถูกคัดลอก ส่วน absolute reference หรือ reference ของเซลล์ที่ไม่ได้ถูกคัดลอกจะไม่เปลี่ยน และสามารถวางได้หลายครั้ง เมื่อพิจารณาถึง range reference ด้วย แค่มันทำงานได้ตามคาดแบบนี้ก็น่าทึ่งแล้ว และข้อจำกัดที่ว่าถ้าแก้ไขพื้นที่ต้นฉบับแล้วงานจะถูกยกเลิกก็เข้าใจได้ ดังนั้นใน Excel การคัดลอกแล้วลบจึงเป็นการกระทำที่ต่างจากการตัด
    • Excel ให้ความรู้สึกว่าเลือกวิธีคัดลอก·ตัด·วางที่แย่ที่สุดให้ทุกครั้งตามเจตนาของผม จริง ๆ คงไม่ใช่อย่างนั้น แต่ส่วนตัวแล้วมัน ไม่ intuitive มากในหลายด้าน
    • ใน Excel ผมจะคัดลอกก่อน วาง แล้วค่อยลบต้นฉบับ เพราะการตัด/วางแบบปกติจะ ทำสูตรที่อ้างอิงตำแหน่งที่จะวางพัง
      ควรรักษาการตัดแบบพื้นฐานไว้ แล้วกำหนดการย้ายแบบพิเศษให้ Ctrl+Shift++
    • ประมาณครึ่งหนึ่งยังทำงานไม่ถูกด้วย