implement word count via Meta-D at the main window
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2633 35c25a1d-7b9e-4130-9fde-d3aeb78583b8master
parent
19462616d4
commit
e010edd1f8
|
@ -61,6 +61,10 @@ CVS code -
|
||||||
is_blank_mbchar(), is_blank_wchar() (renamed niswblank()),
|
is_blank_mbchar(), is_blank_wchar() (renamed niswblank()),
|
||||||
is_cntrl_wchar(), control_rep(), control_mbrep(), etc.;
|
is_cntrl_wchar(), control_rep(), control_mbrep(), etc.;
|
||||||
removal of is_alnum_char() and is_alnum_wchar(). (DLR)
|
removal of is_alnum_char() and is_alnum_wchar(). (DLR)
|
||||||
|
- Implement word count via Meta-D at the main window. Note that
|
||||||
|
this is disabled when NANO_SMALL is defined. New functions
|
||||||
|
do_word_count() and do_next_word_void(); changes to
|
||||||
|
shortcut_init() and do_next_word(). (DLR)
|
||||||
- chars.c:
|
- chars.c:
|
||||||
make_mbstring()
|
make_mbstring()
|
||||||
- Change erroneous ENABLE_EXTRA #ifdef to NANO_EXTRA to fix a
|
- Change erroneous ENABLE_EXTRA #ifdef to NANO_EXTRA to fix a
|
||||||
|
|
|
@ -321,6 +321,8 @@ void shortcut_init(bool unjustify)
|
||||||
#ifndef NANO_SMALL
|
#ifndef NANO_SMALL
|
||||||
const char *nano_nextword_msg = N_("Move forward one word");
|
const char *nano_nextword_msg = N_("Move forward one word");
|
||||||
const char *nano_prevword_msg = N_("Move backward one word");
|
const char *nano_prevword_msg = N_("Move backward one word");
|
||||||
|
const char *nano_wordcount_msg =
|
||||||
|
N_("Count the number of words in the file");
|
||||||
#endif
|
#endif
|
||||||
#ifndef DISABLE_JUSTIFY
|
#ifndef DISABLE_JUSTIFY
|
||||||
const char *nano_parabegin_msg =
|
const char *nano_parabegin_msg =
|
||||||
|
@ -564,11 +566,15 @@ void shortcut_init(bool unjustify)
|
||||||
#ifndef NANO_SMALL
|
#ifndef NANO_SMALL
|
||||||
sc_init_one(&main_list, NANO_NEXTWORD_KEY, N_("Next Word"),
|
sc_init_one(&main_list, NANO_NEXTWORD_KEY, N_("Next Word"),
|
||||||
IFHELP(nano_nextword_msg, NANO_NO_KEY), NANO_NO_KEY,
|
IFHELP(nano_nextword_msg, NANO_NO_KEY), NANO_NO_KEY,
|
||||||
NANO_NO_KEY, VIEW, do_next_word);
|
NANO_NO_KEY, VIEW, do_next_word_void);
|
||||||
|
|
||||||
sc_init_one(&main_list, NANO_NO_KEY, N_("Prev Word"),
|
sc_init_one(&main_list, NANO_NO_KEY, N_("Prev Word"),
|
||||||
IFHELP(nano_prevword_msg, NANO_PREVWORD_KEY), NANO_NO_KEY,
|
IFHELP(nano_prevword_msg, NANO_PREVWORD_KEY), NANO_NO_KEY,
|
||||||
NANO_NO_KEY, VIEW, do_prev_word);
|
NANO_NO_KEY, VIEW, do_prev_word);
|
||||||
|
|
||||||
|
sc_init_one(&main_list, NANO_NO_KEY, N_("Word Count"),
|
||||||
|
IFHELP(nano_wordcount_msg, NANO_WORDCOUNT_KEY), NANO_NO_KEY,
|
||||||
|
NANO_NO_KEY, VIEW, do_word_count);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef DISABLE_JUSTIFY
|
#ifndef DISABLE_JUSTIFY
|
||||||
|
|
55
src/nano.c
55
src/nano.c
|
@ -1445,13 +1445,16 @@ void do_enter(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NANO_SMALL
|
#ifndef NANO_SMALL
|
||||||
/* Move to the next word. */
|
/* Move to the next word. If allow_update is FALSE, don't update the
|
||||||
void do_next_word(void)
|
* screen afterward. Return TRUE if we started on a word, and FALSE
|
||||||
|
* otherwise. */
|
||||||
|
bool do_next_word(bool allow_update)
|
||||||
{
|
{
|
||||||
size_t pww_save = placewewant;
|
size_t pww_save = placewewant;
|
||||||
const filestruct *current_save = current;
|
const filestruct *current_save = current;
|
||||||
char *char_mb;
|
char *char_mb;
|
||||||
int char_mb_len;
|
int char_mb_len;
|
||||||
|
bool started_on_word = FALSE;
|
||||||
|
|
||||||
assert(current != NULL && current->data != NULL);
|
assert(current != NULL && current->data != NULL);
|
||||||
|
|
||||||
|
@ -1467,6 +1470,10 @@ void do_next_word(void)
|
||||||
* line. */
|
* line. */
|
||||||
if (!is_alnum_mbchar(char_mb))
|
if (!is_alnum_mbchar(char_mb))
|
||||||
break;
|
break;
|
||||||
|
/* If we haven't found it, then we've started on a word, so set
|
||||||
|
* started_on_word to TRUE. */
|
||||||
|
else
|
||||||
|
started_on_word = TRUE;
|
||||||
|
|
||||||
current_x += char_mb_len;
|
current_x += char_mb_len;
|
||||||
}
|
}
|
||||||
|
@ -1505,8 +1512,17 @@ void do_next_word(void)
|
||||||
|
|
||||||
placewewant = xplustabs();
|
placewewant = xplustabs();
|
||||||
|
|
||||||
/* Update the screen. */
|
/* If allow_update is TRUE, update the screen. */
|
||||||
edit_redraw(current_save, pww_save);
|
if (allow_update)
|
||||||
|
edit_redraw(current_save, pww_save);
|
||||||
|
|
||||||
|
/* Return whether we started on a word. */
|
||||||
|
return started_on_word;
|
||||||
|
}
|
||||||
|
|
||||||
|
void do_next_word_void(void)
|
||||||
|
{
|
||||||
|
do_next_word(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Move to the previous word. */
|
/* Move to the previous word. */
|
||||||
|
@ -1615,6 +1631,37 @@ void do_prev_word(void)
|
||||||
edit_redraw(current_save, pww_save);
|
edit_redraw(current_save, pww_save);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void do_word_count(void)
|
||||||
|
{
|
||||||
|
size_t words = 0;
|
||||||
|
size_t current_x_save = current_x, pww_save = placewewant;
|
||||||
|
filestruct *current_save = current;
|
||||||
|
|
||||||
|
/* Start at the beginning of the file. */
|
||||||
|
current = fileage;
|
||||||
|
current_x = 0;
|
||||||
|
placewewant = 0;
|
||||||
|
|
||||||
|
/* Keep moving to the next word until we reach the end of the file,
|
||||||
|
* incrementing the total word count whenever we're on a word just
|
||||||
|
* before moving. */
|
||||||
|
while (current != filebot || current_x != 0) {
|
||||||
|
if (do_next_word(FALSE))
|
||||||
|
words++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Go back to where we were before. */
|
||||||
|
current = current_save;
|
||||||
|
current_x = current_x_save;
|
||||||
|
placewewant = pww_save;
|
||||||
|
|
||||||
|
/* Update the screen. */
|
||||||
|
edit_refresh();
|
||||||
|
|
||||||
|
/* Display the total word count on the statusbar. */
|
||||||
|
statusbar(_("Word count: %lu"), (unsigned long)words);
|
||||||
|
}
|
||||||
|
|
||||||
void do_mark(void)
|
void do_mark(void)
|
||||||
{
|
{
|
||||||
TOGGLE(MARK_ISSET);
|
TOGGLE(MARK_ISSET);
|
||||||
|
|
|
@ -455,6 +455,7 @@ typedef struct syntaxtype {
|
||||||
#define NANO_BRACKET_KEY NANO_ALT_RBRACKET
|
#define NANO_BRACKET_KEY NANO_ALT_RBRACKET
|
||||||
#define NANO_NEXTWORD_KEY NANO_CONTROL_SPACE
|
#define NANO_NEXTWORD_KEY NANO_CONTROL_SPACE
|
||||||
#define NANO_PREVWORD_KEY NANO_ALT_SPACE
|
#define NANO_PREVWORD_KEY NANO_ALT_SPACE
|
||||||
|
#define NANO_WORDCOUNT_KEY NANO_ALT_D
|
||||||
#define NANO_CUTTILLEND_KEY NANO_CONTROL_X
|
#define NANO_CUTTILLEND_KEY NANO_CONTROL_X
|
||||||
#define NANO_CUTTILLEND_ALTKEY NANO_ALT_T
|
#define NANO_CUTTILLEND_ALTKEY NANO_ALT_T
|
||||||
#define NANO_PARABEGIN_KEY NANO_CONTROL_W
|
#define NANO_PARABEGIN_KEY NANO_CONTROL_W
|
||||||
|
|
|
@ -401,8 +401,10 @@ void do_delete(void);
|
||||||
void do_tab(void);
|
void do_tab(void);
|
||||||
void do_enter(void);
|
void do_enter(void);
|
||||||
#ifndef NANO_SMALL
|
#ifndef NANO_SMALL
|
||||||
void do_next_word(void);
|
bool do_next_word(bool allow_update);
|
||||||
|
void do_next_word_void(void);
|
||||||
void do_prev_word(void);
|
void do_prev_word(void);
|
||||||
|
void do_word_count(void);
|
||||||
void do_mark(void);
|
void do_mark(void);
|
||||||
#endif
|
#endif
|
||||||
#ifndef DISABLE_WRAPPING
|
#ifndef DISABLE_WRAPPING
|
||||||
|
|
Loading…
Reference in New Issue