From 400e7e87a61c43f86a225e7bb4cb6df5a90c667b Mon Sep 17 00:00:00 2001 From: David Hedbor <david@hedbor.org> Date: Sun, 25 Apr 1999 01:29:28 -0700 Subject: [PATCH] Added lowercase, uppercase and capitalize. Fixed backward word. Rev: lib/modules/Stdio.pmod/Readline.pike:1.12 --- lib/modules/Stdio.pmod/Readline.pike | 63 ++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 8 deletions(-) diff --git a/lib/modules/Stdio.pmod/Readline.pike b/lib/modules/Stdio.pmod/Readline.pike index 4809bab901..3760d01880 100644 --- a/lib/modules/Stdio.pmod/Readline.pike +++ b/lib/modules/Stdio.pmod/Readline.pike @@ -1,4 +1,4 @@ -// $Id: Readline.pike,v 1.11 1999/04/12 02:23:12 hubbe Exp $ +// $Id: Readline.pike,v 1.12 1999/04/25 08:29:28 neotron Exp $ class OutputController { @@ -545,7 +545,7 @@ class InputController class DefaultEditKeys { - static private multiset word_break_chars = mkmultiset("\t \n\r/*?_-.[]~&;\!#$%^(){}<>"/""); + static private multiset word_break_chars = mkmultiset("\t \n\r/*?_-.[]~&;\!#$%^(){}<>\""/""); static object _readline; void self_insert_command(string str) @@ -618,6 +618,43 @@ class DefaultEditKeys _readline->insert(reverse(c), p-1); } + array find_word_to_manipulate() + { + int p = _readline->getcursorpos(); + int ep; + string line = _readline->gettext(); + while(word_break_chars[ line[p..p] ] && p < strlen(line)) + p++; + if(p >= strlen(line)) { + _readline->setcursorpos(p); + return ({ 0, 0 }); + } + ep = forward_find_word(); + _readline->delete(p, ep); + return ({ line[p..ep-1], p }); + } + + void capitalize_word() + { + [string word, string pos]= find_word_to_manipulate(); + if(word) + _readline->insert(String.capitalize(lower_case(word)), pos); + } + + void upper_case_word() + { + [string word, string pos]= find_word_to_manipulate(); + if(word) + _readline->insert(upper_case(word), pos); + } + + void lower_case_word() + { + [string word, string pos]= find_word_to_manipulate(); + if(word) + _readline->insert(lower_case(word), pos); + } + int forward_find_word() { int p, n; @@ -632,14 +669,17 @@ class DefaultEditKeys int backward_find_word() { - int p = _readline->getcursorpos() , n; + int p = _readline->getcursorpos()-1; string line = _readline->gettext(); if(p >= strlen(line)) p = strlen(line) - 1; - for(; p >= 0; p--) { + while(word_break_chars[ line[p..p] ] && p >= 0) + // find first "non break char" + p--; + for(;p >= 0; p--) if(word_break_chars[ line[p..p] ]) { - if(n) break; - } else n = 1; - } + p++; // We want to be one char before the break char. + break; + } return p; } @@ -657,9 +697,10 @@ class DefaultEditKeys { _readline->delete(_readline->getcursorpos(), forward_find_word()); } + void backward_delete_word() { - int sp = backward_find_word() + 1; + int sp = backward_find_word(); int ep = _readline->getcursorpos(); if((ep - sp) == 0) sp--; @@ -712,6 +753,12 @@ class DefaultEditKeys ({ "\\!kd", down_history }), ({ "\\!kr", forward_char }), ({ "\\!kl", backward_char }), + ({ "^[C", capitalize_word }), + ({ "^[c", capitalize_word }), + ({ "^[U", upper_case_word }), + ({ "^[u", upper_case_word }), + ({ "^[L", lower_case_word }), + ({ "^[l", lower_case_word }), ({ "^[D", forward_delete_word }), ({ "^[^H", backward_delete_word }), ({ "^[^?", backward_delete_word }), -- GitLab