2012-05-22 28 views
8

Vâng, hầu như mọi thứ đều có trong tiêu đề: có bất kỳ lối tắt nào để thực hiện điều gì đó khác ngoài việc viết văn bản in đậm, in nghiêng hoặc gạch chân không? Hoặc bất kỳ plugin nào cho phép làm như vậy?Trong Etherpad, có bất kỳ lối tắt nào cho các hành động khác ngoài chữ in đậm, in nghiêng và gạch dưới (dấu chấm, dấu đầu dòng, ...) không?

Theo một đồng nghiệp của tôi, mã nguồn dường như không chứa những thứ như vậy, nhưng có lẽ chúng tôi đã bỏ lỡ điều gì đó?

Trả lời

11

Etherpad chứa trình chỉnh sửa văn bản có định dạng được nhúng có tên ACE2 (ban đầu là Trình soạn thảo mã AppJet), dường như chịu trách nhiệm về xử lý phím tắt.

File ace.js được nhúng theo mặc định sử dụng để được minified và do đó khó có thể đọc trong phiên bản cũ của Etherpad, nhưng bạn có thể đọc các tập tin nguồn gốc trực tiếp trong infrastructure/acepart of the source code, mà từ đó các phiên bản rút gọn được sản xuất. Để biết thêm thông tin về điều đó, hãy xem ACE2's README. Các phiên bản gần đây (ít nhất là các phiên bản etherpad.org) dường như bao gồm nguồn ACE2 JS bình thường.

Mã xử lý phím tắt nằm ở ace2_inner.js, bên trong hàm handleKeyEvent(). Trên cơ sở này, có vẻ như các phím tắt được hỗ trợ out-of-the-box như sau (trên đầu trang của các phím tắt của trình duyệt như Cut/Copy/Paste):

  • Nhập - etherpad đặc biệt vận chuyển trở lại
  • Tab hay phím Shift +Tab - thụt lề hoặc đạn outdent danh sách
  • Ctrl +Z - ETH đặc biệt erpad undo
  • Ctrl + Y - etherpad đặc biệt redo
  • Ctrl + B - đậm
  • Ctrl + tôi - nghiêng
  • Ctrl + U - gạch dưới
  • Ctrl + H - xóa
  • Ctrl + S - Lưu Revision

Không có gì cho gạch ngang hoặc đạn danh sách thực sự, và không có gì đó trông giống như một cơ chế mở rộng dễ dàng cho các phím tắt, vì vậy bạn có thể cần phải có được bàn tay của bạn bẩn ;-)

Nếu bạn có triển khai Etherpad của riêng bạn, cách dễ nhất có thể là sửa đổi mã nguồn của ACE2 để xử lý các phím tắt bổ sung, n xây dựng lại ace2.js phiên bản rút gọn (theo hướng dẫn trong README) nếu cần. Dưới đây là một ví dụ về cách xử lý Ctrl +S shortcut cho Toggle gạch ngang, và Ctrl +L cho danh sách bullet chuyển đổi. Phím tắt strikethrough tắt phím tắt Save as ... của trình duyệt được tích hợp sẵn, mà tôi thấy là phần thưởng, nhưng nếu bạn không thích, bạn luôn có thể chọn một khóa khác hơn S.
Chèn đoạn sau trong ace2_inner.js ở giữa các khối tương tự nhìn có thể xử lý các phím tắt khác, xung quanh dòng 3200:

/* Ctrl+S toggles striketrough, and prevents triggering the browser's Save dialog */ 
if ((!specialHandled) && isTypeForCmdKey && 
    String.fromCharCode(which).toLowerCase() == "s" && 
    (evt.metaKey || evt.ctrlKey)) { 
    // ctrl/cmd-s (strikethrough toggle) 
    fastIncorp(13); // don't ask me ;-) 
    evt.preventDefault(); 
    toggleAttributeOnSelection('strikethrough'); 
    specialHandled = true; 
} 
if ((!specialHandled) && isTypeForCmdKey && 
    String.fromCharCode(which).toLowerCase() == "l" && 
    (evt.ctrlKey)) { 
    // ctrl/cmd-L (bullet list toggle) 
    fastIncorp(9); // seriously, don't ask me ;-) 
    evt.preventDefault(); 
    doInsertUnorderedList(); 
    specialHandled = true; 
} 

Nếu bạn không thể xây dựng lại các phiên bản minified bạn cũng có thể thử trực tiếp vá nó bằng cách sử dụng minified tên. Dưới đây là phiên bản rút gọn của đoạn mã trên cho tôi, mặc dù YMMV, tôi đã không kiểm tra xem việc rút gọn có ổn định hay không và sử dụng lại các tên rút ngắn giống nhau mỗi lần. Tìm kiếm "y" (với dấu ngoặc kép) để xác định vị trí các phiên bản minified của handleKeyEvent() bên ace.js:

if ((!Cp)&&Cu&&String.fromCharCode(Ct).toLowerCase()=="s"&&(i.metaKey || i.ctrlKey)){G(13);\\ni.preventDefault();c("strikethrough");Cp=true;}if((!Cp)&&Cu&&String.fromCharCode(Ct).toLowerCase()=="l"&&(i.metaKey||i.ctrlKey)){G(9);\\ni.preventDefault();As();Cp=true;} 

Cuối cùng, nếu bạn không kiểm soát việc triển khai etherpad bạn có lẽ có thể thực hiện một cái gì đó tương tự như sử dụng một trong trình duyệt GreaseMonkey tập lệnh vá lỗi hàm handleKeyEvent() mặc định. Là điểm bắt đầu để gắn vào trình chỉnh sửa, hãy thử kiểm tra các đối tượng window.pad*, chẳng hạn như window.padeditor. Ví dụ: chọn một số văn bản trong trình chỉnh sửa và thử những điều sau trong bảng điều khiển:

> window.padeditor.ace.execCommand('bold') 
> window.padeditor.ace.execCommand('insertunorderedlist') 
+0

Bất kỳ loại thừa nào, tình cờ? –

Các vấn đề liên quan